diff --git a/frontend/package.json b/frontend/package.json
index f1b04bdc..542a6745 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "nginx-ui-frontend-next",
"private": true,
- "version": "1.7.5",
+ "version": "1.7.6",
"type": "commonjs",
"scripts": {
"dev": "vite",
diff --git a/frontend/src/language/en/app.po b/frontend/src/language/en/app.po
index 1eff1d90..c34f7315 100644
--- a/frontend/src/language/en/app.po
+++ b/frontend/src/language/en/app.po
@@ -17,8 +17,8 @@ msgstr "About"
msgid "Access Logs"
msgstr ""
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
msgid "Action"
msgstr "Action"
@@ -85,11 +85,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
msgid "Auto Cert"
msgstr ""
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
msgid "Auto cert is enabled, please do not modify this certification."
msgstr ""
@@ -97,6 +97,10 @@ msgstr ""
msgid "Auto Refresh"
msgstr ""
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr ""
+
#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "Auto-renewal disabled for %{name}"
@@ -152,7 +156,7 @@ msgstr "Certificate has expired"
msgid "Certificate is valid"
msgstr "Certificate is valid"
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
msgstr "Certificate Status"
@@ -176,10 +180,15 @@ msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
#: src/views/domain/ngx_conf/LocationEditor.vue:35
#: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
msgid "Comments"
msgstr "Comments"
+#: src/views/cert/Cert.vue:32
+#, fuzzy
+msgid "Config Name"
+msgstr "Configuration Name"
+
#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
#, fuzzy
msgid "Config Templates"
@@ -258,7 +267,13 @@ msgstr "Dashboard"
msgid "Database (Optional, default: database)"
msgstr "Database (Optional, default: database)"
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
#: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
#: src/views/domain/DomainList.vue:32
@@ -269,7 +284,7 @@ msgstr ""
msgid "Delete ID: %{id}"
msgstr ""
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
msgid "Delete site: %{site_name}"
msgstr ""
@@ -304,15 +319,15 @@ msgstr "Directives"
msgid "Disable auto-renewal failed for %{name}"
msgstr "Disable auto-renewal failed for %{name}"
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
#: src/views/domain/DomainList.vue:9
msgid "Disabled"
msgstr "Disabled"
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
msgid "Disabled successfully"
msgstr "Disabled successfully"
@@ -320,14 +335,14 @@ msgstr "Disabled successfully"
msgid "Disk IO"
msgstr "Disk IO"
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr ""
-
#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr "Domain Config Created Successfully"
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr ""
+
#: src/language/constants.ts:26
msgid "Download latest release error"
msgstr ""
@@ -338,9 +353,15 @@ msgstr ""
#: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
msgid "Duplicate"
msgstr ""
+#: src/views/domain/SiteDuplicate.vue:43
+#, fuzzy
+msgid "Duplicated successfully"
+msgstr "Saved successfully"
+
#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr "Edit %{n}"
@@ -369,16 +390,16 @@ msgstr "Enable failed"
msgid "Enable TLS"
msgstr "Enable TLS"
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
#: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
msgid "Enabled"
msgstr "Enabled"
#: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
msgid "Enabled successfully"
msgstr "Enabled successfully"
@@ -410,11 +431,11 @@ msgstr "Expiration Date: %{date}"
msgid "Export"
msgstr ""
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
msgid "Failed to disable %{msg}"
msgstr "Failed to disable %{msg}"
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
msgid "Failed to enable %{msg}"
msgstr "Failed to enable %{msg}"
@@ -609,7 +630,7 @@ msgstr "Single Directive"
#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
#: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
msgid "Name"
msgstr "Name"
@@ -736,6 +757,12 @@ msgstr ""
msgid "Performing core upgrade"
msgstr ""
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr ""
+
#: src/views/other/Install.vue:36
msgid "Please input your E-mail!"
msgstr "Please input your E-mail!"
@@ -885,9 +912,8 @@ msgstr "Send"
#: src/components/StdDataDisplay/StdTable.vue:168
#: src/components/StdDataDisplay/StdTable.vue:343
#: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
msgid "Server error"
msgstr "Server error"
@@ -917,27 +943,27 @@ msgstr "Sites List"
msgid "Sites List"
msgstr "Sites List"
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
#, fuzzy
msgid "SSL Certificate Key Path"
msgstr "Certificate Status"
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
#, fuzzy
msgid "SSL Certificate Path"
msgstr "Certificate Status"
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
#, fuzzy
msgid "SSL Certification Content"
msgstr "Certificate Status"
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
#, fuzzy
msgid "SSL Certification Key Content"
msgstr "Certificate Status"
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
msgid "Status"
msgstr "Status"
@@ -1003,12 +1029,16 @@ msgstr ""
msgid "Theme"
msgstr ""
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr ""
+
#: src/views/config/config.ts:14
msgid "Type"
msgstr ""
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
msgid "Updated at"
msgstr "Updated at"
diff --git a/frontend/src/language/messages.pot b/frontend/src/language/messages.pot
index 63fecf1b..7d25bcac 100644
--- a/frontend/src/language/messages.pot
+++ b/frontend/src/language/messages.pot
@@ -11,9 +11,9 @@ msgstr ""
msgid "Access Logs"
msgstr ""
-#: src/views/cert/Cert.vue:78
+#: src/views/cert/Cert.vue:74
#: src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47
+#: src/views/domain/DomainList.vue:48
#: src/views/user/User.vue:43
msgid "Action"
msgstr ""
@@ -83,12 +83,12 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/views/cert/Cert.vue:41
+#: src/views/cert/Cert.vue:37
#: src/views/domain/cert/ChangeCert.vue:35
msgid "Auto Cert"
msgstr ""
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
msgid "Auto cert is enabled, please do not modify this certification."
msgstr ""
@@ -96,6 +96,10 @@ msgstr ""
msgid "Auto Refresh"
msgstr ""
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr ""
+
#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr ""
@@ -153,7 +157,7 @@ msgstr ""
msgid "Certificate is valid"
msgstr ""
-#: src/views/cert/Cert.vue:12
+#: src/views/cert/Cert.vue:34
#: src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
msgstr ""
@@ -179,10 +183,14 @@ msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
#: src/views/domain/ngx_conf/LocationEditor.vue:35
#: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
msgid "Comments"
msgstr ""
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr ""
+
#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
msgid "Config Templates"
msgstr ""
@@ -263,7 +271,13 @@ msgstr ""
msgid "Database (Optional, default: database)"
msgstr ""
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
#: src/views/domain/DomainList.vue:19
#: src/views/domain/DomainList.vue:20
#: src/views/domain/DomainList.vue:21
@@ -276,7 +290,7 @@ msgstr ""
msgid "Delete ID: %{id}"
msgstr ""
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
msgid "Delete site: %{site_name}"
msgstr ""
@@ -312,12 +326,12 @@ msgstr ""
msgid "Disable auto-renewal failed for %{name}"
msgstr ""
-#: src/views/cert/Cert.vue:51
+#: src/views/cert/Cert.vue:47
#: src/views/domain/cert/ChangeCert.vue:45
#: src/views/domain/DomainEdit.vue:10
#: src/views/domain/DomainEdit.vue:9
#: src/views/domain/DomainList.vue:16
-#: src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:35
#: src/views/domain/DomainList.vue:7
#: src/views/domain/DomainList.vue:8
#: src/views/domain/DomainList.vue:9
@@ -325,7 +339,7 @@ msgid "Disabled"
msgstr ""
#: src/views/domain/DomainEdit.vue:146
-#: src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainList.vue:70
msgid "Disabled successfully"
msgstr ""
@@ -333,14 +347,14 @@ msgstr ""
msgid "Disk IO"
msgstr ""
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr ""
-
#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr ""
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr ""
+
#: src/language/constants.ts:26
msgid "Download latest release error"
msgstr ""
@@ -353,9 +367,14 @@ msgstr ""
#: src/views/domain/DomainList.vue:15
#: src/views/domain/DomainList.vue:16
#: src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
msgid "Duplicate"
msgstr ""
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr ""
+
#: src/views/domain/DomainEdit.vue:4
#: src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
@@ -386,7 +405,7 @@ msgstr ""
msgid "Enable TLS"
msgstr ""
-#: src/views/cert/Cert.vue:48
+#: src/views/cert/Cert.vue:44
#: src/views/domain/cert/ChangeCert.vue:42
#: src/views/domain/DomainEdit.vue:43
#: src/views/domain/DomainEdit.vue:6
@@ -395,13 +414,13 @@ msgstr ""
#: src/views/domain/DomainList.vue:11
#: src/views/domain/DomainList.vue:12
#: src/views/domain/DomainList.vue:19
-#: src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:32
msgid "Enabled"
msgstr ""
#: src/views/domain/DomainAdd.vue:47
#: src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
msgid "Enabled successfully"
msgstr ""
@@ -437,12 +456,12 @@ msgid "Export"
msgstr ""
#: src/views/domain/DomainEdit.vue:149
-#: src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainList.vue:74
msgid "Failed to disable %{msg}"
msgstr ""
#: src/views/domain/DomainEdit.vue:140
-#: src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainList.vue:64
msgid "Failed to enable %{msg}"
msgstr ""
@@ -636,7 +655,8 @@ msgstr ""
#: src/views/config/config.ts:9
#: src/views/domain/cert/ChangeCert.vue:19
#: src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16
+#: src/views/domain/SiteDuplicate.vue:5
msgid "Name"
msgstr ""
@@ -765,6 +785,10 @@ msgstr ""
msgid "Performing core upgrade"
msgstr ""
+#: src/views/domain/SiteDuplicate.vue:28
+msgid "Please input name, this will be used as the filename of the new configuration!"
+msgstr ""
+
#: src/views/other/Install.vue:36
msgid "Please input your E-mail!"
msgstr ""
@@ -924,8 +948,7 @@ msgstr ""
#: src/components/StdDataDisplay/StdTable.vue:343
#: src/components/StdDataDisplay/StdTable.vue:463
#: src/views/config/ConfigEdit.vue:32
-#: src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83
+#: src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:71
#: src/views/preference/Preference.vue:41
msgid "Server error"
@@ -957,23 +980,23 @@ msgstr ""
msgid "Sites List"
msgstr ""
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
msgid "SSL Certificate Key Path"
msgstr ""
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
msgid "SSL Certificate Path"
msgstr ""
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
msgid "SSL Certification Content"
msgstr ""
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
msgid "SSL Certification Key Content"
msgstr ""
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
msgid "Status"
msgstr ""
@@ -1030,13 +1053,17 @@ msgstr ""
msgid "Theme"
msgstr ""
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr ""
+
#: src/views/config/config.ts:14
msgid "Type"
msgstr ""
-#: src/views/cert/Cert.vue:72
+#: src/views/cert/Cert.vue:68
#: src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41
+#: src/views/domain/DomainList.vue:42
#: src/views/user/User.vue:37
msgid "Updated at"
msgstr ""
diff --git a/frontend/src/language/translations.json b/frontend/src/language/translations.json
index 4bcc3df6..afca2865 100644
--- a/frontend/src/language/translations.json
+++ b/frontend/src/language/translations.json
@@ -1 +1 @@
-{"en":{"About":"About","Action":"Action","Add Directive Below":"Add Directive Below","Add Location":"Add Location","Add Site":"Add Site","Advance Mode":"Advance Mode","Are you sure you want to remove this directive?":"Are you sure you want to remove this directive?","Auto-renewal disabled for %{name}":"Auto-renewal disabled for %{name}","Auto-renewal enabled for %{name}":"Auto-renewal enabled for %{name}","Back":"Back","Base information":"Base information","Basic Mode":"Basic Mode","Build with":"Build with","Cancel":"Cancel","Certificate has expired":"Certificate has expired","Certificate is valid":"Certificate is valid","Certificate Status":"Certificate Status","Comments":"Comments","Configuration Name":"Configuration Name","Configurations":"Configurations","Configure SSL":"Configure SSL","Content":"Content","CPU Status":"CPU Status","CPU:":"CPU:","Create Another":"Create Another","Created at":"Created at","Dashboard":"Dashboard","Database (Optional, default: database)":"Database (Optional, default: database)","Development Mode":"Development Mode","Directive":"Directive","Directives":"Directives","Disable auto-renewal failed for %{name}":"Disable auto-renewal failed for %{name}","Disabled":"Disabled","Disabled successfully":"Disabled successfully","Disk IO":"Disk IO","Domain Config Created Successfully":"Domain Config Created Successfully","Edit %{n}":"Edit %{n}","Edit Configuration":"Edit Configuration","Edit Site":"Edit Site","Email (*)":"Email (*)","Enable auto-renewal failed for %{name}":"Enable auto-renewal failed for %{name}","Enable failed":"Enable failed","Enable TLS":"Enable TLS","Enabled":"Enabled","Enabled successfully":"Enabled successfully","Encrypt website with Let's Encrypt":"Encrypt website with Let's Encrypt","Expiration Date: %{date}":"Expiration Date: %{date}","Failed to disable %{msg}":"Failed to disable %{msg}","Failed to enable %{msg}":"Failed to enable %{msg}","File Not Found":"File Not Found","Finished":"Finished","Getting the certificate, please wait...":"Getting the certificate, please wait...","Home":"Home","Install":"Install","Intermediate Certification Authorities: %{issuer}":"Intermediate Certification Authorities: %{issuer}","Leave blank for no change":"Leave blank for no change","Load Averages:":"Load Averages:","Location":"Location","Locations":"Locations","Login":"Login","Login successful":"Login successful","Logout successful":"Logout successful","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.","Manage Configs":"Manage Configs","Manage Sites":"Manage Sites","Manage Users":"Manage Users","Memory":"Memory","Memory and Storage":"Memory and Storage","Modify Config":"Modify Config","Name":"Name","Network":"Network","Network Statistics":"Network Statistics","Network Total Receive":"Network Total Receive","Network Total Send":"Network Total Send","Next":"Next","No":"No","Not Found":"Not Found","Not Valid Before: %{date}":"Not Valid Before: %{date}","OS:":"OS:","Params":"Params","Password":"Password","Password (*)":"Password (*)","Path":"Path","Please input your E-mail!":"Please input your E-mail!","Please input your password!":"Please input your password!","Please input your username!":"Please input your username!","Project Team":"Project Team","Reads":"Reads","Receive":"Receive","Save":"Save","Save Directive":"Save Directive","Save error %{msg}":"Save error %{msg}","Saved successfully":"Saved successfully","Send":"Send","Server error":"Server error","Server Info":"Server Info","server_name not found in directives":"server_name not found in directives","server_name parameter is required":"server_name parameter is required","Single Directive":"Single Directive","Sites List":"Sites List","Status":"Status","Storage":"Storage","Subject Name: %{name}":"Subject Name: %{name}","Swap":"Swap","Terminal":"Terminal","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.","The filename cannot contain the following characters: %{c}":"The filename cannot contain the following characters: %{c}","Updated at":"Updated at","Uptime:":"Uptime:","Username":"Username","Username (*)":"Username (*)","Warning":"Warning","Writes":"Writes","Yes":"Yes","License":{"Project":"License"}},"zh_TW":{"About":"關於","Access Logs":"訪問日誌","Action":"操作","Add":"新增","Add Directive Below":"在下面新增指令","Add Location":"新增 Location","Add Site":"新增站點","Advance Mode":"高階模式","Arch":"架搆","Are you sure you want to delete?":"你確定你要刪除?","Are you sure you want to remove this directive?":"您確定要刪除這條指令?","Are you sure you want to remove this location?":"您確定要刪除此 Location 嗎?","Author":"作者","Auto":"自動","Auto Cert":"自動更新","Auto cert is enabled, please do not modify this certification.":"自動證書已啟用,請不要修改此證書。","Auto Refresh":"自動刷新","Auto-renewal disabled for %{name}":"已關閉 %{name} 自動續簽","Auto-renewal enabled for %{name}":"已啟用 %{name} 自動續簽","Back":"返回","Back Home":"回到首頁","Base information":"基本訊息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"構建基於","Cancel":"取消","Certificate has expired":"此憑證已過期","Certificate is valid":"此憑證有效","Certificate Status":"憑證狀態","Certification":"證照","Change Certificate":"更改證書","Check again":"再次檢查","Comments":"註釋","Config Templates":"配置模板","Configuration file is test successful":"配置文件測試成功","Configuration Name":"配置名稱","Configurations":"配置","Configure SSL":"配置 SSL","Content":"內容","Core Upgrade":"核心升級","CPU Status":"中央處理器狀態","CPU:":"中央處理器:","Create Another":"再創建一個","Created at":"建立時間","Creating client facilitates communication with the CA server":"創建客戶端方便與CA服務器通信","Current Version":"當前版本","Custom":"自訂","Dark":"深色","Dashboard":"儀表盤","Database (Optional, default: database)":"資料庫 (可選,預設: database)","Delete":"刪除","Delete ID: %{id}":"刪除 ID: %{id}","Delete site: %{site_name}":"刪除站點:%{site_name}","Description":"敘述","Development Mode":"開發模式","Dir":"目錄","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"關閉 %{name} 自動續簽失敗","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁碟 IO","Domain":"網域","Domain Config Created Successfully":"域名配置文件創建成功","Download latest release error":"下載最新版本錯誤","Downloading latest release":"正在下載最新版本","Duplicate":"複製","Edit %{n}":"編輯 %{n}","Edit Configuration":"編輯配置","Edit Site":"編輯站點","Email (*)":"郵箱 (*)","Enable auto-renewal failed for %{name}":"啟用 %{name} 自動續簽失敗","Enable failed":"啟用失敗","Enable TLS":"啟用 TLS","Enabled":"啟用","Enabled successfully":"啟用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 對網站進行加密","Error":"錯誤","Error Logs":"錯誤日志","Executable Path":"可執行檔路徑","Expiration Date: %{date}":"過期時間: %{date}","Export":"導出","Failed to disable %{msg}":"禁用失敗 %{msg}","Failed to enable %{msg}":"啟用失敗 %{msg}","Failed to get certificate information":"獲取證書信息失敗","Failed to save, syntax error(s) was detected in the configuration.":"保存失敗,在配置中檢測到語法錯誤。","File":"文件","File exists":"文件已存在","File Not Found":"未找到檔案","Filter":"篩選","Finished":"完成","Format Code":"格式化代碼","Format error %{msg}":"格式錯誤 %{msg}","Format successfully":"格式化成功","Generate":"生成","Generating private key for registering account":"生成註冊賬號私鑰","Getting the certificate, please wait...":"正在獲取憑證,請稍等...","Home":"首頁","HTTP Challenge Port":"HTTP 挑戰端口","HTTP Port":"HTTP 監聽埠","Initial core upgrader error":"初始核心升級程序錯誤","Initialing core upgrader":"正在初始化核心升級程序","Inspect Configurations":"檢查配置","Install":"安裝","Install successfully":"安裝成功","Intermediate Certification Authorities: %{issuer}":"中級憑證頒發機構: %{issuer}","Issued certificate successfully":"頒發證書成功","Jwt Secret":"Jwt Secret","Last checked at":"上次檢查時間","Leave blank for no change":"留空表示不修改","Light":"淺色","Load Averages:":"系統負載:","Location":"Location","Locations":"Locations","Login":"登入","Login successful":"登入成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在獲取證書前,請確保配置檔案中已將 .well-known 目錄反向代理到 HTTPChallengePort (預設: 9180)","Manage Configs":"配置管理","Manage Sites":"網站管理","Manage Users":"使用者管理","Memory":"記憶體","Memory and Storage":"記憶體和存儲","Modify":"修改","Modify Config":"修改配置","Multi-line Directive":"多行指令","Name":"名稱","Network":"網路","Network Statistics":"網路統計","Network Total Receive":"下載流量","Network Total Send":"上傳流量","New version released":"新版本發布","Next":"下一步","Nginx Access Log Path":"Nginx 訪問日誌路徑","Nginx Configuration Parse Error":"Nginx 配置解析錯誤","Nginx Control":"Nginx 控件","Nginx Error Log Path":"Nginx 錯誤日誌路徑","Nginx Log":"Nginx 日誌","Nginx reloaded successfully":"Nginx 重載成功","Nginx restarted successfully":"Nginx 重啟成功","No":"取消","Not Found":"找不到頁面","Not Valid Before: %{date}":"此前無效: %{date}","Note":"備註","Obtaining certificate":"正在獲取證書","OK":"確定","OS":"作業系統","OS:":"作業系統:","Params":"參數","Password":"密碼","Password (*)":"密碼 (*)","Path":"路徑","Perform core upgrade error":"執行核心升級錯誤","Performing core upgrade":"正在執行核心升級","Please input your E-mail!":"請輸入您的郵箱!","Please input your password!":"請輸入您的密碼!","Please input your username!":"請輸入您的使用者名稱!","Preference":"設定","Preparing lego configurations":"準備 Lego 配置","Prohibit changing root password in demo":"禁止在demo中修改root密碼","Prohibit deleting the default user":"禁止刪除默認用戶","Project Team":"專案團隊","Reads":"讀","Receive":"下載","Registering user":"註冊用戶","Reinstall":"安裝","Release Note":"發行公告","Reload":"重新載入","Reloading":"换弹中","Reloading nginx":"重载 Nginx","Reset":"重設","Restart":"重新啟動","Restarting":"重啟","Run Mode":"高階模式","Running":"運行中","Save":"儲存","Save Directive":"儲存指令","Save error %{msg}":"儲存錯誤 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"儲存成功","Selector":"選擇器","Send":"上傳","Server error":"伺服器錯誤","Server Info":"伺服器資訊","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必須為 server_name 指令指明參數","Single Directive":"單行指令","Site Logs":"網站日誌","Sites List":"站點列表","SSL Certificate Key Path":"SSL 證書密鑰路徑","SSL Certificate Path":"SSL證書路徑","SSL Certification Content":"SSL認證內容","SSL Certification Key Content":"SSL 證書密鑰內容","Status":"狀態","Stopped":"已停止","Storage":"儲存","Subject Name: %{name}":"主體名稱: %{name}","Swap":"交換空間","System":"系統","Table":"表格","Terminal":"終端","Terminal Start Command":"終端啟動命令","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"系統將會每小時檢測一次該域名證書,若距離上次簽發已超過1個月,則將自動續簽。
如果您之前沒有證書,請先點選「從 Let's Encrypt 獲取證書」。","The filename cannot contain the following characters: %{c}":"檔名不能包含以下字元: %{c}","The server_name in the current configuration must be the domain name you need to get the certificate.":"注意:當前配置中的 server_name 必須為需要申請證書的域名。","The username or password is incorrect":"用戶名或密碼不正確","Theme":"外觀樣式","Type":"類型","Updated at":"修改時間","Updated successfully":"已成功更新","Upgrade":"升級","Upgraded successfully":"升級成功","Upgrading Nginx UI, please wait...":"正在升級 Nginx UI,請稍候...","Uptime:":"執行時間:","Username":"使用者名稱","Username (*)":"使用者名稱 (*)","Using HTTP01 challenge provider":"使用 HTTP01 挑戰提供者","View":"查看","Warning":"警告","Writes":"寫","Writing certificate private key to disk":"將證書私鑰寫入磁盤","Writing certificate to disk":"將證書寫入磁盤","Yes":"是的","You are using the latest version":"您使用的是最新版本","You can check Nginx UI upgrade at this page.":"您可以在此頁面查看 Nginx UI 升級。","License":{"Project":"開源軟體授權條款"}},"zh_CN":{"About":"关于","Access Logs":"访问日志","Action":"操作","Add":"添加","Add Directive Below":"在下面添加指令","Add Location":"添加 Location","Add Site":"添加站点","Advance Mode":"高级模式","Arch":"架构","Are you sure you want to delete?":"您确定要删除吗?","Are you sure you want to remove this directive?":"您确定要删除这条指令?","Are you sure you want to remove this location?":"您确定要删除这个 Location?","Author":"作者","Auto":"自动","Auto Cert":"自动更新","Auto cert is enabled, please do not modify this certification.":"自动更新已启用,请勿修改此证书配置。","Auto Refresh":"自动刷新","Auto-renewal disabled for %{name}":"成功关闭 %{name} 自动续签","Auto-renewal enabled for %{name}":"成功启用 %{name} 自动续签","Back":"返回","Back Home":"返回首页","Base information":"基本信息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"构建基于","Cancel":"取消","Certificate has expired":"此证书已过期","Certificate is valid":"此证书有效","Certificate Status":"证书状态","Certification":"证书","Change Certificate":"更改证书","Check again":"重新检查","Comments":"注释","Config Templates":"配置","Configuration file is test successful":"配置文件测试成功","Configuration Name":"配置名称","Configurations":"配置","Configure SSL":"配置 SSL","Content":"内容","Core Upgrade":"核心升级","CPU Status":"CPU 状态","CPU:":"CPU:","Create Another":"再创建一个","Created at":"创建时间","Creating client facilitates communication with the CA server":"正在创建客户端用于与 CA 服务器通信","Current Version":"当前版本","Custom":"自定义","Dark":"深色","Dashboard":"仪表盘","Database (Optional, default: database)":"数据库 (可选,默认: database)","Delete":"删除","Delete ID: %{id}":"删除 ID: %{id}","Delete site: %{site_name}":"删除站点: %{site_name}","Description":"描述","Development Mode":"开发模式","Dir":"目录","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"关闭 %{name} 自动续签失败","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁盘 IO","Domain":"域名","Domain Config Created Successfully":"域名配置文件创建成功","Download latest release error":"下载最新版本错误","Downloading latest release":"下载最新版本","Duplicate":"复制","Edit %{n}":"编辑 %{n}","Edit Configuration":"编辑配置","Edit Site":"编辑站点","Email (*)":"邮箱 (*)","Enable auto-renewal failed for %{name}":"启用 %{name} 自动续签失败","Enable failed":"启用失败","Enable TLS":"启用 TLS","Enabled":"启用","Enabled successfully":"启用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 对网站进行加密","Error":"错误","Error Logs":"错误日志","Executable Path":"可执行文件路径","Expiration Date: %{date}":"过期时间: %{date}","Export":"导出","Failed to disable %{msg}":"禁用失败 %{msg}","Failed to enable %{msg}":"启用失败 %{msg}","Failed to get certificate information":"获取证书信息失败","Failed to save, syntax error(s) was detected in the configuration.":"保存失败,在配置中检测到语法错误。","File":"文件","File exists":"文件已存在","File Not Found":"未找到文件","Filter":"过滤","Finished":"完成","Format Code":"代码格式化","Format error %{msg}":"保存错误 %{msg}","Format successfully":"格式化成功","Generate":"生成","Generating private key for registering account":"正在生成私钥用于注册账户","Getting the certificate, please wait...":"正在获取证书,请稍等...","Home":"首页","HTTP Challenge Port":"HTTP Challenge 监听端口","HTTP Port":"HTTP 监听端口","Initial core upgrader error":"初始化核心升级程序错误","Initialing core upgrader":"初始化核心升级器","Inspect Configurations":"检查配置","Install":"安装","Install successfully":"安装成功","Intermediate Certification Authorities: %{issuer}":"中级证书颁发机构: %{issuer}","Issued certificate successfully":"证书申请成功","Jwt Secret":"Jwt 密钥","Last checked at":"最后检查时间","Leave blank for no change":"留空表示不修改","Light":"浅色","Load Averages:":"系统负载:","Location":"Location","Locations":"Locations","Login":"登录","Login successful":"登录成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 HTTPChallengePort (默认: 9180)","Manage Configs":"配置管理","Manage Sites":"网站管理","Manage Users":"用户管理","Memory":"内存","Memory and Storage":"内存与存储","Modify":"修改","Modify Config":"修改配置文件","Multi-line Directive":"单行指令","Name":"名称","Network":"网络","Network Statistics":"流量统计","Network Total Receive":"下载流量","Network Total Send":"上传流量","New version released":"新版本发布","Next":"下一步","Nginx Access Log Path":"Nginx 访问日志路径","Nginx Configuration Parse Error":"Nginx 配置解析错误","Nginx Control":"控制 Nginx","Nginx Error Log Path":"Nginx 错误日志路径","Nginx Log":"Nginx 日志","Nginx reloaded successfully":"Nginx 重载成功","Nginx restarted successfully":"Nginx 重启成功","No":"取消","Not Found":"找不到页面","Not Valid Before: %{date}":"此前无效: %{date}","Note":"注意","Obtaining certificate":"正在获取证书","OK":"确定","OS":"OS","OS:":"OS:","Params":"参数","Password":"密码","Password (*)":"密码 (*)","Path":"路径","Perform core upgrade error":"执行核心升级错误","Performing core upgrade":"正在进行核心升级","Please input your E-mail!":"请输入您的邮箱!","Please input your password!":"请输入您的密码!","Please input your username!":"请输入您的用户名!","Preference":"偏好设置","Preparing lego configurations":"正在准备 Lego 的配置","Prohibit changing root password in demo":"禁止在演示模式下修改 root 账户的密码","Prohibit deleting the default user":"禁止删除默认用户","Project Team":"项目团队","Reads":"读","Receive":"下载","Registering user":"正在注册用户","Reinstall":"重新安装","Release Note":"发行日志","Reload":"重载","Reloading":"重载中","Reloading nginx":"正在重载 Nginx","Reset":"重置","Restart":"重启","Restarting":"重启中","Run Mode":"运行模式","Running":"运行中","Save":"保存","Save Directive":"保存指令","Save error %{msg}":"保存错误 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"保存成功","Selector":"选择器","Send":"上传","Server error":"服务器错误","Server Info":"服务器信息","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必须为 server_name 指令指明参数","Single Directive":"单行指令","Site Logs":"站点列表","Sites List":"站点列表","SSL Certificate Key Path":"SSL证书密钥路径","SSL Certificate Path":"SSL证书路径","SSL Certification Content":"SSL证书内容","SSL Certification Key Content":"SSL证书密钥内容","Status":"状态","Stopped":"已停止","Storage":"存储","Subject Name: %{name}":"主体名称: %{name}","Swap":"Swap","System":"系统","Table":"列表","Terminal":"终端","Terminal Start Command":"终端启动命令","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。","The filename cannot contain the following characters: %{c}":"文件名不能包含以下字符: %{c}","The server_name in the current configuration must be the domain name you need to get the certificate.":"当前配置中的 server_name 必须为需要申请证书的域名。","The username or password is incorrect":"用户名或密码错误","Theme":"主题","Type":"类型","Updated at":"修改时间","Updated successfully":"更新成功","Upgrade":"升级","Upgraded successfully":"升级成功","Upgrading Nginx UI, please wait...":"正在升级Nginx UI,请等待...","Uptime:":"运行时间:","Username":"用户名","Username (*)":"用户名 (*)","Using HTTP01 challenge provider":"使用 HTTP01 challenge provider","View":"查看","Warning":"警告","Writes":"写","Writing certificate private key to disk":"正在将证书私钥写入磁盘","Writing certificate to disk":"正在将证书写入磁盘","Yes":"是的","You are using the latest version":"您使用的是最新版本","You can check Nginx UI upgrade at this page.":"你可以在这个页面检查Nginx UI的升级。","License":{"Project":"开源许可"}}}
\ No newline at end of file
+{"en":{"About":"About","Action":"Action","Add Directive Below":"Add Directive Below","Add Location":"Add Location","Add Site":"Add Site","Advance Mode":"Advance Mode","Are you sure you want to remove this directive?":"Are you sure you want to remove this directive?","Auto-renewal disabled for %{name}":"Auto-renewal disabled for %{name}","Auto-renewal enabled for %{name}":"Auto-renewal enabled for %{name}","Back":"Back","Base information":"Base information","Basic Mode":"Basic Mode","Build with":"Build with","Cancel":"Cancel","Certificate has expired":"Certificate has expired","Certificate is valid":"Certificate is valid","Certificate Status":"Certificate Status","Comments":"Comments","Configuration Name":"Configuration Name","Configurations":"Configurations","Configure SSL":"Configure SSL","Content":"Content","CPU Status":"CPU Status","CPU:":"CPU:","Create Another":"Create Another","Created at":"Created at","Dashboard":"Dashboard","Database (Optional, default: database)":"Database (Optional, default: database)","Development Mode":"Development Mode","Directive":"Directive","Directives":"Directives","Disable auto-renewal failed for %{name}":"Disable auto-renewal failed for %{name}","Disabled":"Disabled","Disabled successfully":"Disabled successfully","Disk IO":"Disk IO","Domain Config Created Successfully":"Domain Config Created Successfully","Edit %{n}":"Edit %{n}","Edit Configuration":"Edit Configuration","Edit Site":"Edit Site","Email (*)":"Email (*)","Enable auto-renewal failed for %{name}":"Enable auto-renewal failed for %{name}","Enable failed":"Enable failed","Enable TLS":"Enable TLS","Enabled":"Enabled","Enabled successfully":"Enabled successfully","Encrypt website with Let's Encrypt":"Encrypt website with Let's Encrypt","Expiration Date: %{date}":"Expiration Date: %{date}","Failed to disable %{msg}":"Failed to disable %{msg}","Failed to enable %{msg}":"Failed to enable %{msg}","File Not Found":"File Not Found","Finished":"Finished","Getting the certificate, please wait...":"Getting the certificate, please wait...","Home":"Home","Install":"Install","Intermediate Certification Authorities: %{issuer}":"Intermediate Certification Authorities: %{issuer}","Leave blank for no change":"Leave blank for no change","Load Averages:":"Load Averages:","Location":"Location","Locations":"Locations","Login":"Login","Login successful":"Login successful","Logout successful":"Logout successful","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.","Manage Configs":"Manage Configs","Manage Sites":"Manage Sites","Manage Users":"Manage Users","Memory":"Memory","Memory and Storage":"Memory and Storage","Modify Config":"Modify Config","Name":"Name","Network":"Network","Network Statistics":"Network Statistics","Network Total Receive":"Network Total Receive","Network Total Send":"Network Total Send","Next":"Next","No":"No","Not Found":"Not Found","Not Valid Before: %{date}":"Not Valid Before: %{date}","OS:":"OS:","Params":"Params","Password":"Password","Password (*)":"Password (*)","Path":"Path","Please input your E-mail!":"Please input your E-mail!","Please input your password!":"Please input your password!","Please input your username!":"Please input your username!","Project Team":"Project Team","Reads":"Reads","Receive":"Receive","Save":"Save","Save Directive":"Save Directive","Save error %{msg}":"Save error %{msg}","Saved successfully":"Saved successfully","Send":"Send","Server error":"Server error","Server Info":"Server Info","server_name not found in directives":"server_name not found in directives","server_name parameter is required":"server_name parameter is required","Single Directive":"Single Directive","Sites List":"Sites List","Status":"Status","Storage":"Storage","Subject Name: %{name}":"Subject Name: %{name}","Swap":"Swap","Terminal":"Terminal","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.","The filename cannot contain the following characters: %{c}":"The filename cannot contain the following characters: %{c}","Updated at":"Updated at","Uptime:":"Uptime:","Username":"Username","Username (*)":"Username (*)","Warning":"Warning","Writes":"Writes","Yes":"Yes","License":{"Project":"License"}},"zh_TW":{"About":"關於","Access Logs":"訪問日誌","Action":"操作","Add":"新增","Add Directive Below":"在下面新增指令","Add Location":"新增 Location","Add Site":"新增站點","Advance Mode":"高階模式","Arch":"架搆","Are you sure you want to delete?":"你確定你要刪除?","Are you sure you want to remove this directive?":"您確定要刪除這條指令?","Are you sure you want to remove this location?":"您確定要刪除此 Location 嗎?","Author":"作者","Auto":"自動","Auto Cert":"自動更新","Auto cert is enabled, please do not modify this certification.":"自動證書已啟用,請不要修改此證書。","Auto Refresh":"自動刷新","Auto-Cert Log":"自動證書日誌","Auto-renewal disabled for %{name}":"已關閉 %{name} 自動續簽","Auto-renewal enabled for %{name}":"已啟用 %{name} 自動續簽","Back":"返回","Back Home":"回到首頁","Base information":"基本訊息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"構建基於","Cancel":"取消","Certificate has expired":"此憑證已過期","Certificate is valid":"此憑證有效","Certificate Status":"憑證狀態","Certification":"證照","Change Certificate":"更改證書","Check again":"再次檢查","Comments":"註釋","Config Name":"配置名稱","Config Templates":"配置模板","Configuration file is test successful":"配置文件測試成功","Configuration Name":"配置名稱","Configurations":"配置","Configure SSL":"配置 SSL","Content":"內容","Core Upgrade":"核心升級","CPU Status":"中央處理器狀態","CPU:":"中央處理器:","Create Another":"再創建一個","Created at":"建立時間","Creating client facilitates communication with the CA server":"創建客戶端方便與CA服務器通信","Current Version":"當前版本","Custom":"自訂","Dark":"深色","Dashboard":"儀表盤","Database (Optional, default: database)":"資料庫 (可選,預設: database)","Delete":"刪除","Delete ID: %{id}":"刪除 ID: %{id}","Delete site: %{site_name}":"刪除站點:%{site_name}","Description":"敘述","Development Mode":"開發模式","Dir":"目錄","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"關閉 %{name} 自動續簽失敗","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁碟 IO","Domain Config Created Successfully":"域名配置文件創建成功","Domains list is empty, try to reopen auto-cert for %{config}":"域列表為空,請嘗試重新打開 %{config} 的自動證書","Download latest release error":"下載最新版本錯誤","Downloading latest release":"正在下載最新版本","Duplicate":"複製","Duplicated successfully":"複製成功","Edit %{n}":"編輯 %{n}","Edit Configuration":"編輯配置","Edit Site":"編輯站點","Email (*)":"郵箱 (*)","Enable auto-renewal failed for %{name}":"啟用 %{name} 自動續簽失敗","Enable failed":"啟用失敗","Enable TLS":"啟用 TLS","Enabled":"啟用","Enabled successfully":"啟用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 對網站進行加密","Error":"錯誤","Error Logs":"錯誤日志","Executable Path":"可執行檔路徑","Expiration Date: %{date}":"過期時間: %{date}","Export":"導出","Failed to disable %{msg}":"禁用失敗 %{msg}","Failed to enable %{msg}":"啟用失敗 %{msg}","Failed to get certificate information":"獲取證書信息失敗","Failed to save, syntax error(s) was detected in the configuration.":"保存失敗,在配置中檢測到語法錯誤。","File":"文件","File exists":"文件已存在","File Not Found":"未找到檔案","Filter":"篩選","Finished":"完成","Format Code":"格式化代碼","Format error %{msg}":"格式錯誤 %{msg}","Format successfully":"格式化成功","Generate":"生成","Generating private key for registering account":"生成註冊賬號私鑰","Getting the certificate, please wait...":"正在獲取憑證,請稍等...","Home":"首頁","HTTP Challenge Port":"HTTP 挑戰端口","HTTP Port":"HTTP 監聽埠","Initial core upgrader error":"初始核心升級程序錯誤","Initialing core upgrader":"正在初始化核心升級程序","Inspect Configurations":"檢查配置","Install":"安裝","Install successfully":"安裝成功","Intermediate Certification Authorities: %{issuer}":"中級憑證頒發機構: %{issuer}","Issued certificate successfully":"頒發證書成功","Jwt Secret":"Jwt Secret","Last checked at":"上次檢查時間","Leave blank for no change":"留空表示不修改","Light":"淺色","Load Averages:":"系統負載:","Location":"Location","Locations":"Locations","Login":"登入","Login successful":"登入成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在獲取證書前,請確保配置檔案中已將 .well-known 目錄反向代理到 HTTPChallengePort (預設: 9180)","Manage Configs":"配置管理","Manage Sites":"網站管理","Manage Users":"使用者管理","Memory":"記憶體","Memory and Storage":"記憶體和存儲","Modify":"修改","Modify Config":"修改配置","Multi-line Directive":"多行指令","Name":"名稱","Network":"網路","Network Statistics":"網路統計","Network Total Receive":"下載流量","Network Total Send":"上傳流量","New version released":"新版本發布","Next":"下一步","Nginx Access Log Path":"Nginx 訪問日誌路徑","Nginx Configuration Parse Error":"Nginx 配置解析錯誤","Nginx Control":"Nginx 控件","Nginx Error Log Path":"Nginx 錯誤日誌路徑","Nginx Log":"Nginx 日誌","Nginx reloaded successfully":"Nginx 重載成功","Nginx restarted successfully":"Nginx 重啟成功","No":"取消","Not Found":"找不到頁面","Not Valid Before: %{date}":"此前無效: %{date}","Note":"備註","Obtaining certificate":"正在獲取證書","OK":"確定","OS":"作業系統","OS:":"作業系統:","Params":"參數","Password":"密碼","Password (*)":"密碼 (*)","Path":"路徑","Perform core upgrade error":"執行核心升級錯誤","Performing core upgrade":"正在執行核心升級","Please input name, this will be used as the filename of the new configuration!":"請輸入名稱,這將作為新配置的文件名!","Please input your E-mail!":"請輸入您的郵箱!","Please input your password!":"請輸入您的密碼!","Please input your username!":"請輸入您的使用者名稱!","Preference":"設定","Preparing lego configurations":"準備 Lego 配置","Prohibit changing root password in demo":"禁止在demo中修改root密碼","Prohibit deleting the default user":"禁止刪除默認用戶","Project Team":"專案團隊","Reads":"讀","Receive":"下載","Registering user":"註冊用戶","Reinstall":"安裝","Release Note":"發行公告","Reload":"重新載入","Reloading":"换弹中","Reloading nginx":"重载 Nginx","Reset":"重設","Restart":"重新啟動","Restarting":"重啟","Run Mode":"高階模式","Running":"運行中","Save":"儲存","Save Directive":"儲存指令","Save error %{msg}":"儲存錯誤 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"儲存成功","Selector":"選擇器","Send":"上傳","Server error":"伺服器錯誤","Server Info":"伺服器資訊","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必須為 server_name 指令指明參數","Single Directive":"單行指令","Site Logs":"網站日誌","Sites List":"站點列表","SSL Certificate Key Path":"SSL 證書密鑰路徑","SSL Certificate Path":"SSL證書路徑","SSL Certification Content":"SSL認證內容","SSL Certification Key Content":"SSL 證書密鑰內容","Status":"狀態","Stopped":"已停止","Storage":"儲存","Subject Name: %{name}":"主體名稱: %{name}","Swap":"交換空間","System":"系統","Table":"表格","Terminal":"終端","Terminal Start Command":"終端啟動命令","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"系統將會每小時檢測一次該域名證書,若距離上次簽發已超過1個月,則將自動續簽。
如果您之前沒有證書,請先點選「從 Let's Encrypt 獲取證書」。","The filename cannot contain the following characters: %{c}":"檔名不能包含以下字元: %{c}","The server_name in the current configuration must be the domain name you need to get the certificate.":"注意:當前配置中的 server_name 必須為需要申請證書的域名。","The username or password is incorrect":"用戶名或密碼不正確","Theme":"外觀樣式","This auto-cert item is invalid, please remove it.":"此自動證書項無效,請將其刪除。","Type":"類型","Updated at":"修改時間","Updated successfully":"已成功更新","Upgrade":"升級","Upgraded successfully":"升級成功","Upgrading Nginx UI, please wait...":"正在升級 Nginx UI,請稍候...","Uptime:":"執行時間:","Username":"使用者名稱","Username (*)":"使用者名稱 (*)","Using HTTP01 challenge provider":"使用 HTTP01 挑戰提供者","View":"查看","Warning":"警告","Writes":"寫","Writing certificate private key to disk":"將證書私鑰寫入磁盤","Writing certificate to disk":"將證書寫入磁盤","Yes":"是的","You are using the latest version":"您使用的是最新版本","You can check Nginx UI upgrade at this page.":"您可以在此頁面查看 Nginx UI 升級。","License":{"Project":"開源軟體授權條款"}},"zh_CN":{"About":"关于","Access Logs":"访问日志","Action":"操作","Add":"添加","Add Directive Below":"在下面添加指令","Add Location":"添加 Location","Add Site":"添加站点","Advance Mode":"高级模式","Arch":"架构","Are you sure you want to delete?":"您确定要删除吗?","Are you sure you want to remove this directive?":"您确定要删除这条指令?","Are you sure you want to remove this location?":"您确定要删除这个 Location?","Author":"作者","Auto":"自动","Auto Cert":"自动更新","Auto cert is enabled, please do not modify this certification.":"自动更新已启用,请勿修改此证书配置。","Auto Refresh":"自动刷新","Auto-Cert Log":"证书自动续期日志","Auto-renewal disabled for %{name}":"成功关闭 %{name} 自动续签","Auto-renewal enabled for %{name}":"成功启用 %{name} 自动续签","Back":"返回","Back Home":"返回首页","Base information":"基本信息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"构建基于","Cancel":"取消","Certificate has expired":"此证书已过期","Certificate is valid":"此证书有效","Certificate Status":"证书状态","Certification":"证书","Change Certificate":"更改证书","Check again":"重新检查","Comments":"注释","Config Name":"配置文件名称","Config Templates":"配置","Configuration file is test successful":"配置文件测试成功","Configuration Name":"配置名称","Configurations":"配置","Configure SSL":"配置 SSL","Content":"内容","Core Upgrade":"核心升级","CPU Status":"CPU 状态","CPU:":"CPU:","Create Another":"再创建一个","Created at":"创建时间","Creating client facilitates communication with the CA server":"正在创建客户端用于与 CA 服务器通信","Current Version":"当前版本","Custom":"自定义","Dark":"深色","Dashboard":"仪表盘","Database (Optional, default: database)":"数据库 (可选,默认: database)","Delete":"删除","Delete ID: %{id}":"删除 ID: %{id}","Delete site: %{site_name}":"删除站点: %{site_name}","Description":"描述","Development Mode":"开发模式","Dir":"目录","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"关闭 %{name} 自动续签失败","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁盘 IO","Domain Config Created Successfully":"域名配置文件创建成功","Domains list is empty, try to reopen auto-cert for %{config}":"域名列表为空,请尝试为%{config}重新打开证书自动续期。","Download latest release error":"下载最新版本错误","Downloading latest release":"下载最新版本","Duplicate":"复制","Duplicated successfully":"复制成功","Edit %{n}":"编辑 %{n}","Edit Configuration":"编辑配置","Edit Site":"编辑站点","Email (*)":"邮箱 (*)","Enable auto-renewal failed for %{name}":"启用 %{name} 自动续签失败","Enable failed":"启用失败","Enable TLS":"启用 TLS","Enabled":"启用","Enabled successfully":"启用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 对网站进行加密","Error":"错误","Error Logs":"错误日志","Executable Path":"可执行文件路径","Expiration Date: %{date}":"过期时间: %{date}","Export":"导出","Failed to disable %{msg}":"禁用失败 %{msg}","Failed to enable %{msg}":"启用失败 %{msg}","Failed to get certificate information":"获取证书信息失败","Failed to save, syntax error(s) was detected in the configuration.":"保存失败,在配置中检测到语法错误。","File":"文件","File exists":"文件已存在","File Not Found":"未找到文件","Filter":"过滤","Finished":"完成","Format Code":"代码格式化","Format error %{msg}":"保存错误 %{msg}","Format successfully":"格式化成功","Generate":"生成","Generating private key for registering account":"正在生成私钥用于注册账户","Getting the certificate, please wait...":"正在获取证书,请稍等...","Home":"首页","HTTP Challenge Port":"HTTP Challenge 监听端口","HTTP Port":"HTTP 监听端口","Initial core upgrader error":"初始化核心升级程序错误","Initialing core upgrader":"初始化核心升级器","Inspect Configurations":"检查配置","Install":"安装","Install successfully":"安装成功","Intermediate Certification Authorities: %{issuer}":"中级证书颁发机构: %{issuer}","Issued certificate successfully":"证书申请成功","Jwt Secret":"Jwt 密钥","Last checked at":"最后检查时间","Leave blank for no change":"留空表示不修改","Light":"浅色","Load Averages:":"系统负载:","Location":"Location","Locations":"Locations","Login":"登录","Login successful":"登录成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 HTTPChallengePort (默认: 9180)","Manage Configs":"配置管理","Manage Sites":"网站管理","Manage Users":"用户管理","Memory":"内存","Memory and Storage":"内存与存储","Modify":"修改","Modify Config":"修改配置文件","Multi-line Directive":"单行指令","Name":"名称","Network":"网络","Network Statistics":"流量统计","Network Total Receive":"下载流量","Network Total Send":"上传流量","New version released":"新版本发布","Next":"下一步","Nginx Access Log Path":"Nginx 访问日志路径","Nginx Configuration Parse Error":"Nginx 配置解析错误","Nginx Control":"控制 Nginx","Nginx Error Log Path":"Nginx 错误日志路径","Nginx Log":"Nginx 日志","Nginx reloaded successfully":"Nginx 重载成功","Nginx restarted successfully":"Nginx 重启成功","No":"取消","Not Found":"找不到页面","Not Valid Before: %{date}":"此前无效: %{date}","Note":"注意","Obtaining certificate":"正在获取证书","OK":"确定","OS":"OS","OS:":"OS:","Params":"参数","Password":"密码","Password (*)":"密码 (*)","Path":"路径","Perform core upgrade error":"执行核心升级错误","Performing core upgrade":"正在进行核心升级","Please input name, this will be used as the filename of the new configuration!":"请输入名称,这将被用作新配置的文件名。","Please input your E-mail!":"请输入您的邮箱!","Please input your password!":"请输入您的密码!","Please input your username!":"请输入您的用户名!","Preference":"偏好设置","Preparing lego configurations":"正在准备 Lego 的配置","Prohibit changing root password in demo":"禁止在演示模式下修改 root 账户的密码","Prohibit deleting the default user":"禁止删除默认用户","Project Team":"项目团队","Reads":"读","Receive":"下载","Registering user":"正在注册用户","Reinstall":"重新安装","Release Note":"发行日志","Reload":"重载","Reloading":"重载中","Reloading nginx":"正在重载 Nginx","Reset":"重置","Restart":"重启","Restarting":"重启中","Run Mode":"运行模式","Running":"运行中","Save":"保存","Save Directive":"保存指令","Save error %{msg}":"保存错误 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"保存成功","Selector":"选择器","Send":"上传","Server error":"服务器错误","Server Info":"服务器信息","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必须为 server_name 指令指明参数","Single Directive":"单行指令","Site Logs":"站点列表","Sites List":"站点列表","SSL Certificate Key Path":"SSL证书密钥路径","SSL Certificate Path":"SSL证书路径","SSL Certification Content":"SSL证书内容","SSL Certification Key Content":"SSL证书密钥内容","Status":"状态","Stopped":"已停止","Storage":"存储","Subject Name: %{name}":"主体名称: %{name}","Swap":"Swap","System":"系统","Table":"列表","Terminal":"终端","Terminal Start Command":"终端启动命令","The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued.":"系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。","The filename cannot contain the following characters: %{c}":"文件名不能包含以下字符: %{c}","The server_name in the current configuration must be the domain name you need to get the certificate.":"当前配置中的 server_name 必须为需要申请证书的域名。","The username or password is incorrect":"用户名或密码错误","Theme":"主题","This auto-cert item is invalid, please remove it.":"这个证书自动续期项目是无效的,请删除。","Type":"类型","Updated at":"修改时间","Updated successfully":"更新成功","Upgrade":"升级","Upgraded successfully":"升级成功","Upgrading Nginx UI, please wait...":"正在升级Nginx UI,请等待...","Uptime:":"运行时间:","Username":"用户名","Username (*)":"用户名 (*)","Using HTTP01 challenge provider":"使用 HTTP01 challenge provider","View":"查看","Warning":"警告","Writes":"写","Writing certificate private key to disk":"正在将证书私钥写入磁盘","Writing certificate to disk":"正在将证书写入磁盘","Yes":"是的","You are using the latest version":"您使用的是最新版本","You can check Nginx UI upgrade at this page.":"你可以在这个页面检查Nginx UI的升级。","License":{"Project":"开源许可"}}}
\ No newline at end of file
diff --git a/frontend/src/language/zh_CN/app.mo b/frontend/src/language/zh_CN/app.mo
index 1bb3ce40..a51bbe2c 100644
Binary files a/frontend/src/language/zh_CN/app.mo and b/frontend/src/language/zh_CN/app.mo differ
diff --git a/frontend/src/language/zh_CN/app.po b/frontend/src/language/zh_CN/app.po
index 7f96c545..ad7a1646 100644
--- a/frontend/src/language/zh_CN/app.po
+++ b/frontend/src/language/zh_CN/app.po
@@ -20,8 +20,8 @@ msgstr "关于"
msgid "Access Logs"
msgstr "访问日志"
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
msgid "Action"
msgstr "操作"
@@ -86,11 +86,11 @@ msgstr "作者"
msgid "Auto"
msgstr "自动"
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
msgid "Auto Cert"
msgstr "自动更新"
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
msgid "Auto cert is enabled, please do not modify this certification."
msgstr "自动更新已启用,请勿修改此证书配置。"
@@ -98,6 +98,10 @@ msgstr "自动更新已启用,请勿修改此证书配置。"
msgid "Auto Refresh"
msgstr "自动刷新"
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr "证书自动续期日志"
+
#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "成功关闭 %{name} 自动续签"
@@ -151,7 +155,7 @@ msgstr "此证书已过期"
msgid "Certificate is valid"
msgstr "此证书有效"
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
msgstr "证书状态"
@@ -173,10 +177,14 @@ msgstr "重新检查"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
#: src/views/domain/ngx_conf/LocationEditor.vue:35
#: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
msgid "Comments"
msgstr "注释"
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr "配置文件名称"
+
#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
msgid "Config Templates"
msgstr "配置"
@@ -254,7 +262,13 @@ msgstr "仪表盘"
msgid "Database (Optional, default: database)"
msgstr "数据库 (可选,默认: database)"
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
#: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
#: src/views/domain/DomainList.vue:32
@@ -265,7 +279,7 @@ msgstr "删除"
msgid "Delete ID: %{id}"
msgstr "删除 ID: %{id}"
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
msgid "Delete site: %{site_name}"
msgstr "删除站点: %{site_name}"
@@ -300,15 +314,15 @@ msgstr "指令"
msgid "Disable auto-renewal failed for %{name}"
msgstr "关闭 %{name} 自动续签失败"
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
#: src/views/domain/DomainList.vue:9
msgid "Disabled"
msgstr "禁用"
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
msgid "Disabled successfully"
msgstr "禁用成功"
@@ -316,14 +330,14 @@ msgstr "禁用成功"
msgid "Disk IO"
msgstr "磁盘 IO"
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr "域名"
-
#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr "域名配置文件创建成功"
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr "域名列表为空,请尝试为%{config}重新打开证书自动续期。"
+
#: src/language/constants.ts:26
msgid "Download latest release error"
msgstr "下载最新版本错误"
@@ -334,9 +348,14 @@ msgstr "下载最新版本"
#: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
msgid "Duplicate"
msgstr "复制"
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr "复制成功"
+
#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr "编辑 %{n}"
@@ -365,16 +384,16 @@ msgstr "启用失败"
msgid "Enable TLS"
msgstr "启用 TLS"
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
#: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
msgid "Enabled"
msgstr "启用"
#: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
msgid "Enabled successfully"
msgstr "启用成功"
@@ -406,11 +425,11 @@ msgstr "过期时间: %{date}"
msgid "Export"
msgstr "导出"
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
msgid "Failed to disable %{msg}"
msgstr "禁用失败 %{msg}"
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
msgid "Failed to enable %{msg}"
msgstr "启用失败 %{msg}"
@@ -598,7 +617,7 @@ msgstr "单行指令"
#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
#: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
msgid "Name"
msgstr "名称"
@@ -721,6 +740,12 @@ msgstr "执行核心升级错误"
msgid "Performing core upgrade"
msgstr "正在进行核心升级"
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr "请输入名称,这将被用作新配置的文件名。"
+
#: src/views/other/Install.vue:36
msgid "Please input your E-mail!"
msgstr "请输入您的邮箱!"
@@ -865,9 +890,8 @@ msgstr "上传"
#: src/components/StdDataDisplay/StdTable.vue:168
#: src/components/StdDataDisplay/StdTable.vue:343
#: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
msgid "Server error"
msgstr "服务器错误"
@@ -896,23 +920,23 @@ msgstr "站点列表"
msgid "Sites List"
msgstr "站点列表"
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
msgid "SSL Certificate Key Path"
msgstr "SSL证书密钥路径"
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
msgid "SSL Certificate Path"
msgstr "SSL证书路径"
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
msgid "SSL Certification Content"
msgstr "SSL证书内容"
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
msgid "SSL Certification Key Content"
msgstr "SSL证书密钥内容"
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
msgid "Status"
msgstr "状态"
@@ -973,12 +997,16 @@ msgstr "用户名或密码错误"
msgid "Theme"
msgstr "主题"
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr "这个证书自动续期项目是无效的,请删除。"
+
#: src/views/config/config.ts:14
msgid "Type"
msgstr "类型"
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
msgid "Updated at"
msgstr "修改时间"
@@ -1061,6 +1089,9 @@ msgctxt "Project"
msgid "License"
msgstr "开源许可"
+#~ msgid "Domain"
+#~ msgstr "域名"
+
#~ msgid "Do you want to reload Nginx?"
#~ msgstr "你需要重载 Nginx 吗?"
diff --git a/frontend/src/language/zh_TW/app.mo b/frontend/src/language/zh_TW/app.mo
index 9349a997..df1952ed 100644
Binary files a/frontend/src/language/zh_TW/app.mo and b/frontend/src/language/zh_TW/app.mo differ
diff --git a/frontend/src/language/zh_TW/app.po b/frontend/src/language/zh_TW/app.po
index c8fcdf52..c19b8caa 100644
--- a/frontend/src/language/zh_TW/app.po
+++ b/frontend/src/language/zh_TW/app.po
@@ -21,8 +21,8 @@ msgstr "關於"
msgid "Access Logs"
msgstr "訪問日誌"
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
msgid "Action"
msgstr "操作"
@@ -87,11 +87,11 @@ msgstr "作者"
msgid "Auto"
msgstr "自動"
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
msgid "Auto Cert"
msgstr "自動更新"
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
msgid "Auto cert is enabled, please do not modify this certification."
msgstr "自動證書已啟用,請不要修改此證書。"
@@ -99,6 +99,10 @@ msgstr "自動證書已啟用,請不要修改此證書。"
msgid "Auto Refresh"
msgstr "自動刷新"
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr "自動證書日誌"
+
#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "已關閉 %{name} 自動續簽"
@@ -152,7 +156,7 @@ msgstr "此憑證已過期"
msgid "Certificate is valid"
msgstr "此憑證有效"
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
msgstr "憑證狀態"
@@ -174,10 +178,14 @@ msgstr "再次檢查"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
#: src/views/domain/ngx_conf/LocationEditor.vue:35
#: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
msgid "Comments"
msgstr "註釋"
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr "配置名稱"
+
#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
msgid "Config Templates"
msgstr "配置模板"
@@ -255,7 +263,13 @@ msgstr "儀表盤"
msgid "Database (Optional, default: database)"
msgstr "資料庫 (可選,預設: database)"
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
#: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
#: src/views/domain/DomainList.vue:32
@@ -266,7 +280,7 @@ msgstr "刪除"
msgid "Delete ID: %{id}"
msgstr "刪除 ID: %{id}"
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
msgid "Delete site: %{site_name}"
msgstr "刪除站點:%{site_name}"
@@ -301,15 +315,15 @@ msgstr "指令"
msgid "Disable auto-renewal failed for %{name}"
msgstr "關閉 %{name} 自動續簽失敗"
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
#: src/views/domain/DomainList.vue:9
msgid "Disabled"
msgstr "禁用"
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
msgid "Disabled successfully"
msgstr "禁用成功"
@@ -317,14 +331,14 @@ msgstr "禁用成功"
msgid "Disk IO"
msgstr "磁碟 IO"
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr "網域"
-
#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr "域名配置文件創建成功"
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr "域列表為空,請嘗試重新打開 %{config} 的自動證書"
+
#: src/language/constants.ts:26
msgid "Download latest release error"
msgstr "下載最新版本錯誤"
@@ -335,9 +349,14 @@ msgstr "正在下載最新版本"
#: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
msgid "Duplicate"
msgstr "複製"
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr "複製成功"
+
#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr "編輯 %{n}"
@@ -366,16 +385,16 @@ msgstr "啟用失敗"
msgid "Enable TLS"
msgstr "啟用 TLS"
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
#: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
msgid "Enabled"
msgstr "啟用"
#: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
msgid "Enabled successfully"
msgstr "啟用成功"
@@ -407,11 +426,11 @@ msgstr "過期時間: %{date}"
msgid "Export"
msgstr "導出"
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
msgid "Failed to disable %{msg}"
msgstr "禁用失敗 %{msg}"
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
msgid "Failed to enable %{msg}"
msgstr "啟用失敗 %{msg}"
@@ -599,7 +618,7 @@ msgstr "多行指令"
#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
#: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
msgid "Name"
msgstr "名稱"
@@ -722,6 +741,12 @@ msgstr "執行核心升級錯誤"
msgid "Performing core upgrade"
msgstr "正在執行核心升級"
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr "請輸入名稱,這將作為新配置的文件名!"
+
#: src/views/other/Install.vue:36
msgid "Please input your E-mail!"
msgstr "請輸入您的郵箱!"
@@ -866,9 +891,8 @@ msgstr "上傳"
#: src/components/StdDataDisplay/StdTable.vue:168
#: src/components/StdDataDisplay/StdTable.vue:343
#: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
msgid "Server error"
msgstr "伺服器錯誤"
@@ -897,23 +921,23 @@ msgstr "網站日誌"
msgid "Sites List"
msgstr "站點列表"
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
msgid "SSL Certificate Key Path"
msgstr "SSL 證書密鑰路徑"
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
msgid "SSL Certificate Path"
msgstr "SSL證書路徑"
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
msgid "SSL Certification Content"
msgstr "SSL認證內容"
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
msgid "SSL Certification Key Content"
msgstr "SSL 證書密鑰內容"
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
msgid "Status"
msgstr "狀態"
@@ -975,12 +999,16 @@ msgstr "用戶名或密碼不正確"
msgid "Theme"
msgstr "外觀樣式"
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr "此自動證書項無效,請將其刪除。"
+
#: src/views/config/config.ts:14
msgid "Type"
msgstr "類型"
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
msgid "Updated at"
msgstr "修改時間"
@@ -1063,6 +1091,9 @@ msgctxt "Project"
msgid "License"
msgstr "開源軟體授權條款"
+#~ msgid "Domain"
+#~ msgstr "網域"
+
#~ msgid "Do you want to reload Nginx?"
#~ msgstr "你想重載 Nginx 嗎?"
diff --git a/frontend/src/version.json b/frontend/src/version.json
index fc8c8d79..a3c1a511 100644
--- a/frontend/src/version.json
+++ b/frontend/src/version.json
@@ -1 +1 @@
-{"version":"1.7.5","build_id":81,"total_build":151}
\ No newline at end of file
+{"version":"1.7.6","build_id":82,"total_build":152}
\ No newline at end of file
diff --git a/frontend/version.json b/frontend/version.json
index fc8c8d79..a3c1a511 100644
--- a/frontend/version.json
+++ b/frontend/version.json
@@ -1 +1 @@
-{"version":"1.7.5","build_id":81,"total_build":151}
\ No newline at end of file
+{"version":"1.7.6","build_id":82,"total_build":152}
\ No newline at end of file
diff --git a/server/pkg/cert/cert.go b/server/pkg/cert/cert.go
index 3da22056..6e7fecfa 100644
--- a/server/pkg/cert/cert.go
+++ b/server/pkg/cert/cert.go
@@ -1,157 +1,157 @@
package cert
import (
- "crypto"
- "crypto/ecdsa"
- "crypto/elliptic"
- "crypto/rand"
- "crypto/tls"
- "github.com/0xJacky/Nginx-UI/server/pkg/nginx"
- "github.com/0xJacky/Nginx-UI/server/settings"
- "github.com/go-acme/lego/v4/certcrypto"
- "github.com/go-acme/lego/v4/certificate"
- "github.com/go-acme/lego/v4/challenge/http01"
- "github.com/go-acme/lego/v4/lego"
- "github.com/go-acme/lego/v4/registration"
- "github.com/pkg/errors"
- "log"
- "net/http"
- "os"
- "path/filepath"
- "strings"
+ "crypto"
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "crypto/rand"
+ "crypto/tls"
+ "github.com/0xJacky/Nginx-UI/server/pkg/nginx"
+ "github.com/0xJacky/Nginx-UI/server/settings"
+ "github.com/go-acme/lego/v4/certcrypto"
+ "github.com/go-acme/lego/v4/certificate"
+ "github.com/go-acme/lego/v4/challenge/http01"
+ "github.com/go-acme/lego/v4/lego"
+ "github.com/go-acme/lego/v4/registration"
+ "github.com/pkg/errors"
+ "log"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strings"
)
// MyUser You'll need a user or account type that implements acme.User
type MyUser struct {
- Email string
- Registration *registration.Resource
- key crypto.PrivateKey
+ Email string
+ Registration *registration.Resource
+ key crypto.PrivateKey
}
func (u *MyUser) GetEmail() string {
- return u.Email
+ return u.Email
}
func (u *MyUser) GetRegistration() *registration.Resource {
- return u.Registration
+ return u.Registration
}
func (u *MyUser) GetPrivateKey() crypto.PrivateKey {
- return u.key
+ return u.key
}
func IssueCert(domain []string, logChan chan string, errChan chan error) {
- defer func() {
- if err := recover(); err != nil {
- log.Println("Issue Cert recover", err)
- }
- }()
+ defer func() {
+ if err := recover(); err != nil {
+ log.Println("Issue Cert recover", err)
+ }
+ }()
- // Create a user. New accounts need an email and private key to start.
- logChan <- "Generating private key for registering account"
- privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
- if err != nil {
- errChan <- errors.Wrap(err, "issue cert generate key error")
- return
- }
+ // Create a user. New accounts need an email and private key to start.
+ logChan <- "Generating private key for registering account"
+ privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ if err != nil {
+ errChan <- errors.Wrap(err, "issue cert generate key error")
+ return
+ }
- logChan <- "Preparing lego configurations"
- myUser := MyUser{
- Email: settings.ServerSettings.Email,
- key: privateKey,
- }
+ logChan <- "Preparing lego configurations"
+ myUser := MyUser{
+ Email: settings.ServerSettings.Email,
+ key: privateKey,
+ }
- config := lego.NewConfig(&myUser)
+ config := lego.NewConfig(&myUser)
- if settings.ServerSettings.Demo {
- config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"
- }
+ if settings.ServerSettings.Demo {
+ config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"
+ }
- if settings.ServerSettings.CADir != "" {
- config.CADirURL = settings.ServerSettings.CADir
- if config.HTTPClient != nil {
- config.HTTPClient.Transport = &http.Transport{
- TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
- }
- }
- }
+ if settings.ServerSettings.CADir != "" {
+ config.CADirURL = settings.ServerSettings.CADir
+ if config.HTTPClient != nil {
+ config.HTTPClient.Transport = &http.Transport{
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+ }
+ }
+ }
- config.Certificate.KeyType = certcrypto.RSA2048
+ config.Certificate.KeyType = certcrypto.RSA2048
- logChan <- "Creating client facilitates communication with the CA server"
- // A client facilitates communication with the CA server.
- client, err := lego.NewClient(config)
- if err != nil {
- errChan <- errors.Wrap(err, "issue cert new client error")
- return
- }
+ logChan <- "Creating client facilitates communication with the CA server"
+ // A client facilitates communication with the CA server.
+ client, err := lego.NewClient(config)
+ if err != nil {
+ errChan <- errors.Wrap(err, "issue cert new client error")
+ return
+ }
- logChan <- "Using HTTP01 challenge provider"
- err = client.Challenge.SetHTTP01Provider(
- http01.NewProviderServer("",
- settings.ServerSettings.HTTPChallengePort,
- ),
- )
+ logChan <- "Using HTTP01 challenge provider"
+ err = client.Challenge.SetHTTP01Provider(
+ http01.NewProviderServer("",
+ settings.ServerSettings.HTTPChallengePort,
+ ),
+ )
- if err != nil {
- errChan <- errors.Wrap(err, "fail to challenge")
- return
- }
+ if err != nil {
+ errChan <- errors.Wrap(err, "fail to challenge")
+ return
+ }
- // New users will need to register
- logChan <- "Registering user"
- reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
- if err != nil {
- errChan <- errors.Wrap(err, "fail to register")
- return
- }
- myUser.Registration = reg
+ // New users will need to register
+ logChan <- "Registering user"
+ reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
+ if err != nil {
+ errChan <- errors.Wrap(err, "fail to register")
+ return
+ }
+ myUser.Registration = reg
- request := certificate.ObtainRequest{
- Domains: domain,
- Bundle: true,
- }
+ request := certificate.ObtainRequest{
+ Domains: domain,
+ Bundle: true,
+ }
- logChan <- "Obtaining certificate"
- certificates, err := client.Certificate.Obtain(request)
- if err != nil {
- errChan <- errors.Wrap(err, "fail to obtain")
- return
- }
- name := strings.Join(domain, "_")
- saveDir := nginx.GetConfPath("ssl/" + name)
- if _, err = os.Stat(saveDir); os.IsNotExist(err) {
- err = os.MkdirAll(saveDir, 0755)
- if err != nil {
- errChan <- errors.Wrap(err, "fail to mkdir")
- return
- }
- }
+ logChan <- "Obtaining certificate"
+ certificates, err := client.Certificate.Obtain(request)
+ if err != nil {
+ errChan <- errors.Wrap(err, "fail to obtain")
+ return
+ }
+ name := strings.Join(domain, "_")
+ saveDir := nginx.GetConfPath("ssl/" + name)
+ if _, err = os.Stat(saveDir); os.IsNotExist(err) {
+ err = os.MkdirAll(saveDir, 0755)
+ if err != nil {
+ errChan <- errors.Wrap(err, "fail to mkdir")
+ return
+ }
+ }
- // Each certificate comes back with the cert bytes, the bytes of the client's
- // private key, and a certificate URL. SAVE THESE TO DISK.
- logChan <- "Writing certificate to disk"
- err = os.WriteFile(filepath.Join(saveDir, "fullchain.cer"),
- certificates.Certificate, 0644)
+ // Each certificate comes back with the cert bytes, the bytes of the client's
+ // private key, and a certificate URL. SAVE THESE TO DISK.
+ logChan <- "Writing certificate to disk"
+ err = os.WriteFile(filepath.Join(saveDir, "fullchain.cer"),
+ certificates.Certificate, 0644)
- if err != nil {
- errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
- return
- }
+ if err != nil {
+ errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
+ return
+ }
- logChan <- "Writing certificate private key to disk"
- err = os.WriteFile(filepath.Join(saveDir, "private.key"),
- certificates.PrivateKey, 0644)
+ logChan <- "Writing certificate private key to disk"
+ err = os.WriteFile(filepath.Join(saveDir, "private.key"),
+ certificates.PrivateKey, 0644)
- if err != nil {
- errChan <- errors.Wrap(err, "fail to write key")
- return
- }
+ if err != nil {
+ errChan <- errors.Wrap(err, "fail to write key")
+ return
+ }
- close(errChan)
- logChan <- "Reloading nginx"
+ close(errChan)
+ logChan <- "Reloading nginx"
- nginx.Reload()
+ nginx.Reload()
- logChan <- "Finished"
+ logChan <- "Finished"
- close(logChan)
+ close(logChan)
}