Browse Source

feat: support wildcard certificate #190

0xJacky 1 year ago
parent
commit
a7e523b47b

+ 1 - 0
api/certificate/issue.go

@@ -121,6 +121,7 @@ func IssueCert(c *gin.Context) {
 		Domains:               payload.ServerName,
 		SSLCertificatePath:    sslCertificatePath,
 		SSLCertificateKeyPath: sslCertificateKeyPath,
+		AutoCert:              model.AutoCertEnabled,
 	})
 
 	if err != nil {

+ 6 - 1
app/src/components/CodeEditor/CodeEditor.vue

@@ -8,6 +8,7 @@ const props = defineProps<{
   content?: string
   defaultHeight?: string
   readonly?: boolean
+  placeholder?: string
 }>()
 
 const emit = defineEmits(['update:content'])
@@ -32,9 +33,13 @@ const value = computed({
       borderRadius: '5px',
     }"
     :readonly="readonly"
+    :placeholder="placeholder"
   />
 </template>
 
 <style scoped>
-
+:deep(.ace_placeholder) {
+  z-index: 1;
+  position: relative;
+}
 </style>

+ 91 - 74
app/src/language/en/app.po

@@ -26,17 +26,11 @@ msgstr "Action"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr ""
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "Certificate Status"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "Add Directive Below"
@@ -46,11 +40,11 @@ msgstr "Add Directive Below"
 msgid "Add Location"
 msgstr "Add Location"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "Add Site"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 #, fuzzy
 msgid "Additional"
 msgstr "Add Location"
@@ -87,7 +81,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "Are you sure you want to remove this directive?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 #, fuzzy
 msgid "Are you sure you want to delete?"
 msgstr "Are you sure you want to remove this directive?"
@@ -109,8 +103,8 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr ""
 
@@ -122,15 +116,15 @@ msgstr ""
 msgid "Auto Refresh"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Auto-renewal disabled for %{name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -141,7 +135,7 @@ msgstr "Back"
 msgid "Back Home"
 msgstr "Back"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "Base information"
 
@@ -174,10 +168,10 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "Cancel"
@@ -250,11 +244,11 @@ msgstr "Disabled successfully"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "Comments"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 #, fuzzy
 msgid "Config Templates"
 msgstr "Configurations"
@@ -263,7 +257,7 @@ msgstr "Configurations"
 msgid "Configuration file is test successful"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "Configuration Name"
 
@@ -271,7 +265,7 @@ msgstr "Configuration Name"
 msgid "Configurations"
 msgstr "Configurations"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "Configure SSL"
 
@@ -297,7 +291,7 @@ msgstr "CPU Status"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "Create Another"
 
@@ -321,8 +315,8 @@ msgstr ""
 msgid "Current Version"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr ""
 
@@ -335,12 +329,12 @@ msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr ""
 
@@ -367,8 +361,8 @@ msgstr ""
 msgid "Deploy successfully"
 msgstr "Saved successfully"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr ""
 
@@ -393,22 +387,22 @@ msgstr "Directives"
 msgid "Directory"
 msgstr "Directive"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 #, fuzzy
 msgid "Disable"
 msgstr "Disabled"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "Disabled"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "Disabled successfully"
 
@@ -436,7 +430,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "Are you sure you want to remove this directive?"
 msgstr[1] "Are you sure you want to remove this directive?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr ""
 
@@ -455,12 +449,12 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Do you want to enable TLS?"
 msgstr "Are you sure you want to remove this directive?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 #, fuzzy
 msgid "Do you want to remove this server?"
 msgstr "Are you sure you want to remove this directive?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "Domain Config Created Successfully"
 
@@ -481,7 +475,7 @@ msgid "Dry run mode enabled"
 msgstr ""
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr ""
 
@@ -521,7 +515,7 @@ msgstr "Edit Site"
 msgid "Email (*)"
 msgstr "Email (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 #, fuzzy
 msgid "Enable"
 msgstr "Enabled"
@@ -534,7 +528,7 @@ msgstr ""
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Enable auto-renewal failed for %{name}"
 
@@ -547,20 +541,20 @@ msgstr "Enable failed"
 msgid "Enable successfully"
 msgstr "Enabled successfully"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "Enable TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "Enabled"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "Enabled successfully"
 
@@ -604,12 +598,12 @@ msgid "Export"
 msgstr ""
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
@@ -637,7 +631,7 @@ msgstr "File Not Found"
 msgid "Filter"
 msgstr ""
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "Finished"
 
@@ -717,6 +711,15 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
+#: src/views/certificate/Certificate.vue:120
+msgid "Import"
+msgstr ""
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "Certificate Status"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -763,6 +766,12 @@ msgstr "Leave blank for no change"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr ""
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "Leave blank for no change"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -791,7 +800,7 @@ msgstr "Location"
 msgid "Locations"
 msgstr "Locations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "Login"
@@ -821,7 +830,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "Manage Configs"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "Manage Sites"
 
@@ -854,7 +863,7 @@ msgstr "Modify Config"
 msgid "Modify Certificate"
 msgstr "Certificate Status"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "Modify Config"
 
@@ -893,8 +902,8 @@ msgstr "Network Total Send"
 msgid "New version released"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "Next"
 
@@ -911,7 +920,7 @@ msgstr ""
 msgid "Nginx Configuration Parse Error"
 msgstr "Configuration Name"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr ""
 
@@ -923,7 +932,7 @@ msgstr ""
 msgid "Nginx Log"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 #, fuzzy
 msgid "Nginx reloaded successfully"
 msgstr "Saved successfully"
@@ -936,7 +945,7 @@ msgstr "Saved successfully"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -974,7 +983,7 @@ msgstr "Certificate is valid"
 msgid "Notifications"
 msgstr "Certificate is valid"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 #, fuzzy
 msgid "Obtain certificate"
 msgstr "Certificate is valid"
@@ -995,11 +1004,11 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1159,11 +1168,11 @@ msgid "Release Note"
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr ""
 
@@ -1205,11 +1214,11 @@ msgstr ""
 msgid "Reset"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr ""
 
@@ -1218,12 +1227,12 @@ msgstr ""
 msgid "Run Mode"
 msgstr "Advance Mode"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1266,13 +1275,13 @@ msgstr ""
 msgid "Send"
 msgstr "Send"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1282,12 +1291,12 @@ msgstr "Server error"
 msgid "Server Info"
 msgstr "Server Info"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "server_name not found in directives"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "server_name parameter is required"
 
@@ -1321,7 +1330,7 @@ msgstr "Sites List"
 msgid "SSL Certificate Content"
 msgstr "Certificate Status"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgstr "Certificate Status"
@@ -1353,7 +1362,7 @@ msgstr "Enabled"
 msgid "Status"
 msgstr "Status"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr ""
 
@@ -1510,7 +1519,7 @@ msgstr "Username (*)"
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr ""
 
@@ -1521,7 +1530,7 @@ msgstr "Certificate is valid"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "Warning"
 
@@ -1531,7 +1540,7 @@ msgid ""
 "ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1563,6 +1572,14 @@ msgstr ""
 msgid "You can check Nginx UI upgrade at this page."
 msgstr ""
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "Certificate Status"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "Leave blank for no change"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "Certificate is valid"

+ 92 - 74
app/src/language/es/app.po

@@ -31,17 +31,11 @@ msgstr "Acción"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "Agregar"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "Estado del Certificado"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "Añadir directiva a continuación"
@@ -51,11 +45,11 @@ msgstr "Añadir directiva a continuación"
 msgid "Add Location"
 msgstr "Agregar Ubicación"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "Agregar Sitio"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 msgid "Additional"
 msgstr "Adicional"
 
@@ -90,7 +84,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "¿Está seguro de que desea borrar el registro del chat?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 msgid "Are you sure you want to delete?"
 msgstr "¿Está seguro de que quiere borrar?"
 
@@ -110,8 +104,8 @@ msgstr "Preguntar por ayuda a ChatGPT"
 msgid "Assistant"
 msgstr "Asistente"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr "Autor"
 
@@ -123,15 +117,15 @@ msgstr "Certificado automático"
 msgid "Auto Refresh"
 msgstr "Actualización automática"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Renovación automática deshabilitada por %{name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Renovación automática habilitada por %{name}"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -141,7 +135,7 @@ msgstr "Volver"
 msgid "Back Home"
 msgstr "Volver al Inicio"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "Información general"
 
@@ -172,10 +166,10 @@ msgstr "Directorio CA"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "Cancelar"
@@ -247,11 +241,11 @@ msgstr "Desactivado con éxito"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "Comentarios"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 msgid "Config Templates"
 msgstr "Plantillas de configuración"
 
@@ -259,7 +253,7 @@ msgstr "Plantillas de configuración"
 msgid "Configuration file is test successful"
 msgstr "El archivo de configuración se probó exitosamente"
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "Nombre de la configuración"
 
@@ -267,7 +261,7 @@ msgstr "Nombre de la configuración"
 msgid "Configurations"
 msgstr "Configuraciones"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "Configurar SSL"
 
@@ -293,7 +287,7 @@ msgstr "Estado del CPU"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "Crear otro"
 
@@ -317,8 +311,8 @@ msgstr "Credenciales"
 msgid "Current Version"
 msgstr "Versión actual"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "Personalizado"
 
@@ -331,12 +325,12 @@ msgid "Database (Optional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "Eliminar"
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr "Eliminar sitio: %{site_name}"
 
@@ -362,8 +356,8 @@ msgstr "Desplegado de %{conf_name} a %{node_name} exitoso"
 msgid "Deploy successfully"
 msgstr "Desplegado con éxito"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr "Descripción"
 
@@ -388,22 +382,22 @@ msgstr "Directivas"
 msgid "Directory"
 msgstr "Directiva"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 #, fuzzy
 msgid "Disable"
 msgstr "Desactivado"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "No se pudo desactivar la renovación automática por %{name}"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "Desactivado"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "Desactivado con éxito"
 
@@ -430,7 +424,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "¿Desea desplegar este archivo en un servidor remoto?"
 msgstr[1] "¿Desea desplegar este archivo en los servidores remotos?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "¿Desea deshabilitar la renovación automática de certificado?"
 
@@ -446,11 +440,11 @@ msgstr "¿Quieres habilitar este sitio?"
 msgid "Do you want to enable TLS?"
 msgstr "¿Quieres habilitar TLS?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 msgid "Do you want to remove this server?"
 msgstr "¿Quieres eliminar este servidor?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "Configuración de dominio creada con éxito"
 
@@ -474,7 +468,7 @@ msgid "Dry run mode enabled"
 msgstr "Modo de ejecución de prueba habilitado"
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr "Duplicar"
 
@@ -510,7 +504,7 @@ msgstr "Editar Sitio"
 msgid "Email (*)"
 msgstr "Correo (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 #, fuzzy
 msgid "Enable"
 msgstr "Habilitado"
@@ -523,7 +517,7 @@ msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "No se pudo activar la renovación automática por %{name}"
 
@@ -535,20 +529,20 @@ msgstr "Falló la habilitación"
 msgid "Enable successfully"
 msgstr "Habilitado con éxito"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "Habilitar TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "Habilitado"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "Habilitado con éxito"
 
@@ -591,12 +585,12 @@ msgid "Export"
 msgstr "Exportar"
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "Error al habilitar %{msg}"
 
@@ -625,7 +619,7 @@ msgstr "Archivo no encontrado"
 msgid "Filter"
 msgstr "Filtro"
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "Terminado"
 
@@ -703,6 +697,16 @@ msgstr "Puerto HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
+#: src/views/certificate/Certificate.vue:120
+#, fuzzy
+msgid "Import"
+msgstr "Exportar"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "Estado del Certificado"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -747,6 +751,12 @@ msgstr "Para no modificar dejar en blanco"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "Para no modificar dejar en blanco"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -774,7 +784,7 @@ msgstr "Ubicación"
 msgid "Locations"
 msgstr "Ubicaciones"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "Acceso"
@@ -803,7 +813,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "Administrar configuraciones"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "Administrar sitios"
 
@@ -835,7 +845,7 @@ msgstr "Modificar"
 msgid "Modify Certificate"
 msgstr "Estado del Certificado"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "Modificar configuración"
 
@@ -873,8 +883,8 @@ msgstr "Total enviado por la red"
 msgid "New version released"
 msgstr "Se liberó una nueva versión"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "Siguiente"
 
@@ -890,7 +900,7 @@ msgstr "Ruta de registro de acceso de Nginx"
 msgid "Nginx Configuration Parse Error"
 msgstr "Error de análisis de configuración de Nginx"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr "Control de Nginx"
 
@@ -902,7 +912,7 @@ msgstr "Ruta de registro de errores de Nginx"
 msgid "Nginx Log"
 msgstr "Registro Nginx"
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 msgid "Nginx reloaded successfully"
 msgstr "Nginx recargado con éxito"
 
@@ -913,7 +923,7 @@ msgstr "Nginx reiniciado con éxito"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -951,7 +961,7 @@ msgstr "Certificación"
 msgid "Notifications"
 msgstr "Certificación"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 msgid "Obtain certificate"
 msgstr "Obtener certificado"
 
@@ -971,11 +981,11 @@ msgstr "Desconectado"
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1138,11 +1148,11 @@ msgid "Release Note"
 msgstr "Nota de versión"
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr "Recargar"
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr "Recargando"
 
@@ -1184,11 +1194,11 @@ msgstr "Pedido con parámetros incorrectos"
 msgid "Reset"
 msgstr "Limpiar"
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr "Reiniciar"
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr "Reiniciando"
 
@@ -1196,12 +1206,12 @@ msgstr "Reiniciando"
 msgid "Run Mode"
 msgstr "Modo de ejecución"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr "Corriendo"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1242,13 +1252,13 @@ msgstr "Selector"
 msgid "Send"
 msgstr "Enviado"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1258,12 +1268,12 @@ msgstr "Error del servidor"
 msgid "Server Info"
 msgstr "Información del servidor"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "No se encuentra server_name en las directivas"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "Se requiere el parámetro server_name"
 
@@ -1298,7 +1308,7 @@ msgstr "Lista de sitios"
 msgid "SSL Certificate Content"
 msgstr "Contenido de certificado SSL"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgstr "Contenido de la llave del certificado SSL"
@@ -1327,7 +1337,7 @@ msgstr "Estable"
 msgid "Status"
 msgstr "Estado"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr "Detenido"
 
@@ -1486,7 +1496,7 @@ msgstr "Nombre de usuario (*)"
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr "Ver"
 
@@ -1497,7 +1507,7 @@ msgstr "Certificación"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "Advertencia"
 
@@ -1507,7 +1517,7 @@ msgid ""
 "ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1541,6 +1551,14 @@ msgstr "Estás usando la última versión"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "Puede consultar la actualización de Nginx UI en esta página."
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "Estado del Certificado"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "Para no modificar dejar en blanco"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "Obtener certificado"

+ 92 - 74
app/src/language/fr_FR/app.po

@@ -28,17 +28,11 @@ msgstr "Action"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "Ajouter"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "État du certificat"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "Ajouter une directive"
@@ -48,11 +42,11 @@ msgstr "Ajouter une directive"
 msgid "Add Location"
 msgstr "Ajouter une localisation"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "Ajouter un site"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 #, fuzzy
 msgid "Additional"
 msgstr "Supplémentaire"
@@ -89,7 +83,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 msgid "Are you sure you want to delete?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 
@@ -110,8 +104,8 @@ msgstr "Modèle ChatGPT"
 msgid "Assistant"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr "Autheur"
 
@@ -123,15 +117,15 @@ msgstr "Auto Cert"
 msgid "Auto Refresh"
 msgstr "Actualisation automatique"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Renouvellement automatique désactivé pour %{name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Renouvellement automatique activé pour %{name}"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -141,7 +135,7 @@ msgstr "Retour"
 msgid "Back Home"
 msgstr "Retour au menu principal"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "Information générale"
 
@@ -173,10 +167,10 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "Annuler"
@@ -248,11 +242,11 @@ msgstr "Désactivé avec succès"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "Commentaires"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 msgid "Config Templates"
 msgstr "Modèles de configuration"
 
@@ -260,7 +254,7 @@ msgstr "Modèles de configuration"
 msgid "Configuration file is test successful"
 msgstr "Le fichier de configuration est testé avec succès"
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "Nom de la configuration"
 
@@ -268,7 +262,7 @@ msgstr "Nom de la configuration"
 msgid "Configurations"
 msgstr "Configurations"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "Configurer SSL"
 
@@ -294,7 +288,7 @@ msgstr "État du processeur"
 msgid "CPU:"
 msgstr "CPU :"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "Créer un autre"
 
@@ -318,8 +312,8 @@ msgstr "Identifiants"
 msgid "Current Version"
 msgstr "Version actuelle"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "Custom"
 
@@ -332,12 +326,12 @@ msgid "Database (Optional, default: database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "Supprimer"
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 
@@ -364,8 +358,8 @@ msgstr ""
 msgid "Deploy successfully"
 msgstr "Sauvegarde réussie"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr "Description"
 
@@ -390,22 +384,22 @@ msgstr "Directives"
 msgid "Directory"
 msgstr "Directive"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 #, fuzzy
 msgid "Disable"
 msgstr "Désactivé"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "Désactivé"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "Désactivé avec succès"
 
@@ -433,7 +427,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "Voulez-vous supprimer ce serveur ?"
 msgstr[1] "Voulez-vous supprimer ce serveur ?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "Voulez-vous désactiver le renouvellement automatique des certificats ?"
 
@@ -449,11 +443,11 @@ msgstr "Voulez-vous activer ce site ?"
 msgid "Do you want to enable TLS?"
 msgstr "Voulez-vous activer TLS ?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 msgid "Do you want to remove this server?"
 msgstr "Voulez-vous supprimer ce serveur ?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "La configuration du domaine a été créée avec succès"
 
@@ -477,7 +471,7 @@ msgid "Dry run mode enabled"
 msgstr ""
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr "Dupliquer"
 
@@ -517,7 +511,7 @@ msgstr "Modifier le site"
 msgid "Email (*)"
 msgstr "Email (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 #, fuzzy
 msgid "Enable"
 msgstr "Activé"
@@ -530,7 +524,7 @@ msgstr ""
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Échec de l'activation du renouvellement automatique pour %{name}"
 
@@ -543,20 +537,20 @@ msgstr "Échec de l'activation"
 msgid "Enable successfully"
 msgstr "Activé avec succès"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "Activer TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "Activé"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "Activé avec succès"
 
@@ -600,12 +594,12 @@ msgid "Export"
 msgstr "Exporter"
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
@@ -635,7 +629,7 @@ msgstr "Fichier introuvable"
 msgid "Filter"
 msgstr "Filtrer"
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "Finie"
 
@@ -713,6 +707,16 @@ msgstr "Port HTTP"
 msgid "HTTP01"
 msgstr "HTTP01"
 
+#: src/views/certificate/Certificate.vue:120
+#, fuzzy
+msgid "Import"
+msgstr "Exporter"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "État du certificat"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -757,6 +761,12 @@ msgstr "Laisser vide pour aucun changement"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "Laisser vide pour aucun changement"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -787,7 +797,7 @@ msgstr "Localisation"
 msgid "Locations"
 msgstr "Localisations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "Connexion"
@@ -817,7 +827,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "Gérer les configurations"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "Gérer les sites"
 
@@ -849,7 +859,7 @@ msgstr "Modifier"
 msgid "Modify Certificate"
 msgstr "État du certificat"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "Modifier la configuration"
 
@@ -887,8 +897,8 @@ msgstr "Envoi total réseau"
 msgid "New version released"
 msgstr "Nouvelle version publiée"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "Suivant"
 
@@ -905,7 +915,7 @@ msgstr "Chemin du journal d'accès Nginx"
 msgid "Nginx Configuration Parse Error"
 msgstr "Erreur d'analyse de configuration Nginx"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr "Contrôle Nginx"
 
@@ -917,7 +927,7 @@ msgstr "Chemin du journal des erreurs Nginx"
 msgid "Nginx Log"
 msgstr "Journal Nginx"
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 msgid "Nginx reloaded successfully"
 msgstr "Nginx a été rechargé avec succès"
 
@@ -928,7 +938,7 @@ msgstr "Nginx a redémarré avec succès"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -967,7 +977,7 @@ msgstr "Certification"
 msgid "Notifications"
 msgstr "Certification"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 msgid "Obtain certificate"
 msgstr "Obtenir un certificat"
 
@@ -987,11 +997,11 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1158,11 +1168,11 @@ msgid "Release Note"
 msgstr "Note de version"
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr "Recharger"
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr "Rechargement"
 
@@ -1204,11 +1214,11 @@ msgstr ""
 msgid "Reset"
 msgstr "Réinitialiser"
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr "Redémarrer"
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr "Redémarrage"
 
@@ -1216,12 +1226,12 @@ msgstr "Redémarrage"
 msgid "Run Mode"
 msgstr "Mode d'exécution"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr "En cours d'éxécution"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1262,13 +1272,13 @@ msgstr "Sélecteur"
 msgid "Send"
 msgstr "Envoyer"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1278,12 +1288,12 @@ msgstr "Erreur du serveur"
 msgid "Server Info"
 msgstr "Informations sur le serveur"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "server_name introuvable dans les directives"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "Le paramètre server_name est obligatoire"
 
@@ -1318,7 +1328,7 @@ msgstr "Liste des sites"
 msgid "SSL Certificate Content"
 msgstr "Contenu de la certification SSL"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgstr "Contenu de la clé de certification SSL"
@@ -1348,7 +1358,7 @@ msgstr "Tableau"
 msgid "Status"
 msgstr "Statut"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr "Arrêté"
 
@@ -1511,7 +1521,7 @@ msgstr "Nom d'utilisateur (*)"
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr "Voir"
 
@@ -1522,7 +1532,7 @@ msgstr "Certification"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "Avertissement"
 
@@ -1532,7 +1542,7 @@ msgid ""
 "ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1566,6 +1576,14 @@ msgstr "Vous utilisez la dernière version"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "Vous pouvez vérifier la mise à niveau de Nginx UI sur cette page."
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "État du certificat"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "Laisser vide pour aucun changement"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "Obtenir un certificat"

+ 82 - 74
app/src/language/messages.pot

@@ -23,17 +23,11 @@ msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr ""
 
-#: src/routes/index.ts:123
-#: src/views/certificate/CertificateEditor.vue:84
-msgid "Add Certificate"
-msgstr ""
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr ""
@@ -44,11 +38,11 @@ msgid "Add Location"
 msgstr ""
 
 #: src/routes/index.ts:71
-#: src/views/domain/DomainAdd.vue:91
+#: src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr ""
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 msgid "Additional"
 msgstr ""
 
@@ -82,7 +76,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 msgid "Are you sure you want to delete?"
 msgstr ""
 
@@ -102,8 +96,8 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr ""
 
@@ -115,15 +109,15 @@ msgstr ""
 msgid "Auto Refresh"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr ""
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75
 #: src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261
@@ -135,7 +129,7 @@ msgstr ""
 msgid "Back Home"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr ""
 
@@ -166,10 +160,10 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr ""
@@ -239,11 +233,11 @@ msgstr ""
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 msgid "Config Templates"
 msgstr ""
 
@@ -251,7 +245,7 @@ msgstr ""
 msgid "Configuration file is test successful"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr ""
 
@@ -259,7 +253,7 @@ msgstr ""
 msgid "Configurations"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr ""
 
@@ -285,7 +279,7 @@ msgstr ""
 msgid "CPU:"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr ""
 
@@ -310,8 +304,8 @@ msgstr ""
 msgid "Current Version"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr ""
 
@@ -324,12 +318,12 @@ msgid "Database (Optional, default: database)"
 msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr ""
 
@@ -354,8 +348,8 @@ msgstr ""
 msgid "Deploy successfully"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr ""
 
@@ -379,22 +373,22 @@ msgstr ""
 msgid "Directory"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 msgid "Disable"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 
 #: src/views/domain/cert/ChangeCert.vue:48
 #: src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr ""
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr ""
 
@@ -422,7 +416,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr ""
 
@@ -438,11 +432,11 @@ msgstr ""
 msgid "Do you want to enable TLS?"
 msgstr ""
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 msgid "Do you want to remove this server?"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr ""
 
@@ -463,7 +457,7 @@ msgid "Dry run mode enabled"
 msgstr ""
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr ""
 
@@ -500,7 +494,7 @@ msgstr ""
 msgid "Email (*)"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 msgid "Enable"
 msgstr ""
 
@@ -512,7 +506,7 @@ msgstr ""
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr ""
 
@@ -524,7 +518,7 @@ msgstr ""
 msgid "Enable successfully"
 msgstr ""
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr ""
 
@@ -532,14 +526,14 @@ msgstr ""
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/DomainEdit.vue:184
-#: src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr ""
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
 #: src/views/domain/DomainAdd.vue:45
-#: src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr ""
 
@@ -584,12 +578,12 @@ msgid "Export"
 msgstr ""
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr ""
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr ""
 
@@ -618,7 +612,7 @@ msgid "Filter"
 msgstr ""
 
 #: src/language/constants.ts:23
-#: src/views/domain/DomainAdd.vue:99
+#: src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr ""
 
@@ -694,6 +688,15 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
+#: src/views/certificate/Certificate.vue:120
+msgid "Import"
+msgstr ""
+
+#: src/routes/index.ts:123
+#: src/views/certificate/CertificateEditor.vue:84
+msgid "Import Certificate"
+msgstr ""
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -739,6 +742,11 @@ msgstr ""
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr ""
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+msgid "Leave blank will not change anything"
+msgstr ""
+
 #: src/views/system/About.vue:50
 msgid "License"
 msgstr ""
@@ -764,7 +772,7 @@ msgstr ""
 msgid "Locations"
 msgstr ""
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 msgid "Log"
 msgstr ""
 
@@ -791,7 +799,7 @@ msgid "Manage Configs"
 msgstr ""
 
 #: src/routes/index.ts:59
-#: src/views/domain/DomainList.vue:102
+#: src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr ""
 
@@ -823,7 +831,7 @@ msgstr ""
 msgid "Modify Certificate"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr ""
 
@@ -863,8 +871,8 @@ msgstr ""
 msgid "New version released"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr ""
 
@@ -880,7 +888,7 @@ msgstr ""
 msgid "Nginx Configuration Parse Error"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr ""
 
@@ -893,7 +901,7 @@ msgstr ""
 msgid "Nginx Log"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 msgid "Nginx reloaded successfully"
 msgstr ""
 
@@ -904,7 +912,7 @@ msgstr ""
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -942,7 +950,7 @@ msgstr ""
 msgid "Notifications"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 msgid "Obtain certificate"
 msgstr ""
 
@@ -962,11 +970,11 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1121,11 +1129,11 @@ msgid "Release Note"
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr ""
 
@@ -1162,11 +1170,11 @@ msgstr ""
 msgid "Reset"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr ""
 
@@ -1174,12 +1182,12 @@ msgstr ""
 msgid "Run Mode"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98
 #: src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
@@ -1223,14 +1231,14 @@ msgstr ""
 msgid "Send"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
 #: src/views/config/ConfigEdit.vue:42
-#: src/views/domain/DomainList.vue:79
+#: src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72
 #: src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
@@ -1241,12 +1249,12 @@ msgstr ""
 msgid "Server Info"
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr ""
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr ""
 
@@ -1278,7 +1286,7 @@ msgstr ""
 msgid "SSL Certificate Content"
 msgstr ""
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 msgid "SSL Certificate Key Content"
 msgstr ""
 
@@ -1307,7 +1315,7 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr ""
 
@@ -1451,7 +1459,7 @@ msgstr ""
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr ""
 
@@ -1462,7 +1470,7 @@ msgstr ""
 #: src/constants/index.ts:18
 #: src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr ""
 
@@ -1470,7 +1478,7 @@ msgstr ""
 msgid "We will add one or more TXT records to the DNS records of your domain for ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgstr ""
 

+ 92 - 74
app/src/language/ru_RU/app.po

@@ -26,17 +26,11 @@ msgstr "Действие"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "Добавить"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "Статус сертификата"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "Добавить директиву ниже"
@@ -46,11 +40,11 @@ msgstr "Добавить директиву ниже"
 msgid "Add Location"
 msgstr "Добавить Location"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "Добавть Сайт"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 #, fuzzy
 msgid "Additional"
 msgstr "Дополнительно"
@@ -87,7 +81,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 #, fuzzy
 msgid "Are you sure you want to delete?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
@@ -109,8 +103,8 @@ msgstr ""
 msgid "Assistant"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr "Автор"
 
@@ -122,15 +116,15 @@ msgstr "Авто Сертификат"
 msgid "Auto Refresh"
 msgstr "Автообновление"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Автообновление отключено для %{name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Автообновление включено для %{name}"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -141,7 +135,7 @@ msgstr "Назад"
 msgid "Back Home"
 msgstr "Вернутся"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "Основная информация"
 
@@ -174,10 +168,10 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "Отмена"
@@ -250,11 +244,11 @@ msgstr "Отключено успешно"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "Комментарии"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 #, fuzzy
 msgid "Config Templates"
 msgstr "Шаблоны конфигураций"
@@ -263,7 +257,7 @@ msgstr "Шаблоны конфигураций"
 msgid "Configuration file is test successful"
 msgstr "Проверка конфигурации успешна"
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "Название конфигурации"
 
@@ -271,7 +265,7 @@ msgstr "Название конфигурации"
 msgid "Configurations"
 msgstr "Конфигурации"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "Настроить SSL"
 
@@ -297,7 +291,7 @@ msgstr "Нагрузка CPU"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "Создать еще"
 
@@ -321,8 +315,8 @@ msgstr "Учетные данные"
 msgid "Current Version"
 msgstr "Текущяя версия"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "Пользовательский"
 
@@ -335,12 +329,12 @@ msgid "Database (Optional, default: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "Удалить"
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr ""
 
@@ -367,8 +361,8 @@ msgstr ""
 msgid "Deploy successfully"
 msgstr "Saved successfully"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr "Описание"
 
@@ -393,22 +387,22 @@ msgstr "Дерективы"
 msgid "Directory"
 msgstr "Деректива"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 #, fuzzy
 msgid "Disable"
 msgstr "Отключить"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Не удалось отключить автоматическое продление для %{name}"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "Отключено"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "Отключено успешно"
 
@@ -436,7 +430,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "Are you sure you want to remove this directive?"
 msgstr[1] "Are you sure you want to remove this directive?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "Вы хотите отключить автоматическое обновление сертификата?"
 
@@ -455,12 +449,12 @@ msgstr "Вы хотите включить этот сайт?"
 msgid "Do you want to enable TLS?"
 msgstr "Включить TLS?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 #, fuzzy
 msgid "Do you want to remove this server?"
 msgstr "Вы хотите удалить этот сервер?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "Конфигурация домена успешно создана"
 
@@ -483,7 +477,7 @@ msgid "Dry run mode enabled"
 msgstr "Включен пробный режим"
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr "Дублировать"
 
@@ -523,7 +517,7 @@ msgstr "Редактировать Сайт"
 msgid "Email (*)"
 msgstr "Email (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 #, fuzzy
 msgid "Enable"
 msgstr "Включить"
@@ -536,7 +530,7 @@ msgstr "Включение %{conf_name} in %{node_name} нипалучилася
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Не удалось включить автоматическое продление для %{name}"
 
@@ -549,20 +543,20 @@ msgstr "Включить не удалось"
 msgid "Enable successfully"
 msgstr "Активировано успешно"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "Включить TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "Включено"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "Активировано успешно"
 
@@ -606,12 +600,12 @@ msgid "Export"
 msgstr "Экспорт"
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "Не удалось отключить %{msg}"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "Не удалось включить %{msg}"
 
@@ -639,7 +633,7 @@ msgstr "Файл не найден"
 msgid "Filter"
 msgstr "Фильтр"
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "Готово"
 
@@ -719,6 +713,16 @@ msgstr "Порт HTTP"
 msgid "HTTP01"
 msgstr ""
 
+#: src/views/certificate/Certificate.vue:120
+#, fuzzy
+msgid "Import"
+msgstr "Экспорт"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "Статус сертификата"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -765,6 +769,12 @@ msgstr "Оставьте пустым без изменений"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "Оставьте пустым для значения по умолчанию: https://api.openai.com/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "Оставьте пустым без изменений"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -793,7 +803,7 @@ msgstr "Location"
 msgid "Locations"
 msgstr "Locations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "Логин"
@@ -823,7 +833,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "Конфигурации"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "Сайты"
 
@@ -856,7 +866,7 @@ msgstr "Изменить"
 msgid "Modify Certificate"
 msgstr "Статус сертификата"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "Изменить конфигурацию"
 
@@ -895,8 +905,8 @@ msgstr "Всего отправлено"
 msgid "New version released"
 msgstr "Вышла новая версия"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "Дальше"
 
@@ -914,7 +924,7 @@ msgstr "Путь для Nginx Access Log"
 msgid "Nginx Configuration Parse Error"
 msgstr "Ошибка синтаксического анализа конфигурации Nginx"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr "Управление Nginx"
 
@@ -926,7 +936,7 @@ msgstr "Путь для Nginx Error Log"
 msgid "Nginx Log"
 msgstr "Журнал"
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 #, fuzzy
 msgid "Nginx reloaded successfully"
 msgstr "Nginx перезагружен успешно"
@@ -939,7 +949,7 @@ msgstr "Nginx успешно перезапущен"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -977,7 +987,7 @@ msgstr "Сертификат"
 msgid "Notifications"
 msgstr "Сертификат"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 #, fuzzy
 msgid "Obtain certificate"
 msgstr "Получить сертификат"
@@ -998,11 +1008,11 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1164,11 +1174,11 @@ msgid "Release Note"
 msgstr "Что нового"
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr "Перегрузить"
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr "Перезагружается"
 
@@ -1210,11 +1220,11 @@ msgstr "Запрос с неправильными параметрами"
 msgid "Reset"
 msgstr "Сброс"
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr "Перезапуск"
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr "Перезапускается"
 
@@ -1223,12 +1233,12 @@ msgstr "Перезапускается"
 msgid "Run Mode"
 msgstr "Расширенный режим"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr "Выполняется"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1271,13 +1281,13 @@ msgstr "Выбор"
 msgid "Send"
 msgstr "Отправлено"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1287,12 +1297,12 @@ msgstr "Ошибка сервера"
 msgid "Server Info"
 msgstr "Информация о сервере"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "server_name не нашел в директивах"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "server_name параметр обязателен"
 
@@ -1326,7 +1336,7 @@ msgstr "Список сайтов"
 msgid "SSL Certificate Content"
 msgstr "Содержание сертификата SSL"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgstr "Содержание ключа сертификата SSL"
@@ -1358,7 +1368,7 @@ msgstr "Таблица"
 msgid "Status"
 msgstr "Статус"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr "Остановлен"
 
@@ -1516,7 +1526,7 @@ msgstr "Имя пользователя (*)"
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr "Просмотр"
 
@@ -1527,7 +1537,7 @@ msgstr "Сертификат"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "Внимание"
 
@@ -1537,7 +1547,7 @@ msgid ""
 "ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1569,6 +1579,14 @@ msgstr "Вы используете последнюю версию"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "Вы можете проверить обновление Nginx UI на этой странице."
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "Статус сертификата"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "Оставьте пустым без изменений"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "Получить сертификат"

+ 48 - 30
app/src/language/vi_VN/app.po

@@ -26,17 +26,11 @@ msgstr "Hành động"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "Thêm"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "Thêm chứng chỉ SSL"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "Thêm Directive"
@@ -50,7 +44,7 @@ msgstr "Thêm Location"
 msgid "Add Site"
 msgstr "Thêm Website"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 #, fuzzy
 msgid "Additional"
 msgstr "Tùy chọn bổ sung"
@@ -122,15 +116,15 @@ msgstr "Tự động ký chứng chỉ SSL"
 msgid "Auto Refresh"
 msgstr "Tự động làm mới"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Đã tắt tự động gia hạn SSL cho %{name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Đã bật tự động gia hạn SSL cho %{name}"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -174,10 +168,10 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "Huỷ"
@@ -250,7 +244,7 @@ msgstr "Đã xóa thành công"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "Bình luận"
 
@@ -322,7 +316,7 @@ msgid "Current Version"
 msgstr "Phiên bản hiện tại"
 
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "Tuỳ chỉnh"
 
@@ -336,7 +330,7 @@ msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
 #: src/views/domain/DomainList.vue:156
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "Xoá"
 
@@ -398,7 +392,7 @@ msgstr "Thư mục"
 msgid "Disable"
 msgstr "Tắt"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Tắt tự động gia hạn SSL cho %{name} thất bại"
 
@@ -436,7 +430,7 @@ msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "Bạn có muốn triển khai tệp này đến máy chủ từ xa không?"
 msgstr[1] "Bạn có muốn triển khai tệp này đến máy chủ từ xa không?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "Bạn muốn tắt tự động gia hạn chứng chỉ SSL ?"
 
@@ -455,7 +449,7 @@ msgstr "Bạn muốn bật trang web này ?"
 msgid "Do you want to enable TLS?"
 msgstr "Bạn muốn bật TLS ?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 #, fuzzy
 msgid "Do you want to remove this server?"
 msgstr "Bạn muốn xóa máy chủ này ?"
@@ -536,7 +530,7 @@ msgstr "Không thể bật %{conf_name} trên %{node_name}"
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Không thể bật tự động gia hạn SSL cho %{name}"
 
@@ -549,7 +543,7 @@ msgstr "Bật không thành công"
 msgid "Enable successfully"
 msgstr "Đã bật"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "Bật TLS"
 
@@ -719,6 +713,16 @@ msgstr ""
 msgid "HTTP01"
 msgstr ""
 
+#: src/views/certificate/Certificate.vue:120
+#, fuzzy
+msgid "Import"
+msgstr "Xuất"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "Chứng chỉ"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr "Thông tin"
@@ -765,6 +769,12 @@ msgstr "Bỏ trống nếu không thay đổi"
 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/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "Bỏ trống nếu không thay đổi"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -793,7 +803,7 @@ msgstr "Location"
 msgid "Locations"
 msgstr "Locations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "Log"
@@ -894,7 +904,7 @@ msgstr "Tổng lưu lượng mạng đã gửi"
 msgid "New version released"
 msgstr "Đã có phiên bản mới"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
+#: src/views/domain/cert/components/ObtainCert.vue:203
 #: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "Tiếp theo"
@@ -975,7 +985,7 @@ msgstr "Thông báo"
 msgid "Notifications"
 msgstr "Thông báo"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 #, fuzzy
 msgid "Obtain certificate"
 msgstr "Nhận chứng chỉ"
@@ -996,11 +1006,11 @@ msgstr "Ngoại tuyến"
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
 #: src/views/domain/DomainList.vue:146
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1228,7 +1238,7 @@ msgid "Running"
 msgstr "Running"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1287,7 +1297,7 @@ msgstr "Lỗi máy chủ"
 msgid "Server Info"
 msgstr "Thông tin máy chủ"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "không tìm thấy server_name trong directives"
 
@@ -1326,7 +1336,7 @@ msgstr "Danh sách Website"
 msgid "SSL Certificate Content"
 msgstr ""
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 msgid "SSL Certificate Key Content"
 msgstr ""
 
@@ -1537,7 +1547,7 @@ msgstr ""
 "Chúng tôi sẽ thêm một hoặc nhiều bản ghi TXT để xác minh quyền sở hữu tên "
 "miền của bạn."
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1571,6 +1581,14 @@ msgstr "Bạn đang sử dụng phiên bản mới nhất"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "Bạn có thể kiểm tra nâng cấp Nginx UI tại trang này"
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "Thêm chứng chỉ SSL"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "Bỏ trống nếu không thay đổi"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "Gia hạn SSL"

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


+ 87 - 73
app/src/language/zh_CN/app.po

@@ -30,16 +30,11 @@ msgstr "操作"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "添加"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-msgid "Add Certificate"
-msgstr "添加证书"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "在下面添加指令"
@@ -49,11 +44,11 @@ msgstr "在下面添加指令"
 msgid "Add Location"
 msgstr "添加 Location"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "添加站点"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 msgid "Additional"
 msgstr "额外选项"
 
@@ -87,7 +82,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "你确定你要清除聊天记录吗?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 msgid "Are you sure you want to delete?"
 msgstr "您确定要删除吗?"
 
@@ -107,8 +102,8 @@ msgstr "与ChatGPT聊天"
 msgid "Assistant"
 msgstr "助手"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr "作者"
 
@@ -120,15 +115,15 @@ msgstr "自动更新"
 msgid "Auto Refresh"
 msgstr "自动刷新"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "成功关闭 %{name} 自动续签"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "成功启用 %{name} 自动续签"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -138,7 +133,7 @@ msgstr "返回"
 msgid "Back Home"
 msgstr "返回首页"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "基本信息"
 
@@ -169,10 +164,10 @@ msgstr "CADir"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "取消"
@@ -241,11 +236,11 @@ msgstr "清除成功"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "注释"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 msgid "Config Templates"
 msgstr "配置"
 
@@ -253,7 +248,7 @@ msgstr "配置"
 msgid "Configuration file is test successful"
 msgstr "配置文件测试成功"
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "配置名称"
 
@@ -261,7 +256,7 @@ msgstr "配置名称"
 msgid "Configurations"
 msgstr "配置"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "配置 SSL"
 
@@ -287,7 +282,7 @@ msgstr "CPU 状态"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "再创建一个"
 
@@ -311,8 +306,8 @@ msgstr "凭证"
 msgid "Current Version"
 msgstr "当前版本"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "自定义"
 
@@ -325,12 +320,12 @@ msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "删除"
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
@@ -355,8 +350,8 @@ msgstr "成功地将%{conf_name}部署到%{node_name}"
 msgid "Deploy successfully"
 msgstr "部署成功"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr "描述"
 
@@ -380,21 +375,21 @@ msgstr "指令"
 msgid "Directory"
 msgstr "目录"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 msgid "Disable"
 msgstr "禁用"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "关闭 %{name} 自动续签失败"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "禁用"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "禁用成功"
 
@@ -420,7 +415,7 @@ msgid "Do you want to deploy this file to remote server?"
 msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "你想把这个文件部署到远程服务器上吗?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "你想禁用自动更新证书吗?"
 
@@ -436,11 +431,11 @@ msgstr "你想启用这个网站吗?"
 msgid "Do you want to enable TLS?"
 msgstr "你想启用TLS吗?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 msgid "Do you want to remove this server?"
 msgstr "你想删除这个服务器吗?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "域名配置文件创建成功"
 
@@ -461,7 +456,7 @@ msgid "Dry run mode enabled"
 msgstr "试运行模式已启动"
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr "复制"
 
@@ -497,7 +492,7 @@ msgstr "编辑站点"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 msgid "Enable"
 msgstr "启用"
 
@@ -509,7 +504,7 @@ msgstr "在%{node_name}中启用%{conf_name}失败"
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr "成功启用%{node_name}中的%{conf_name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "启用 %{name} 自动续签失败"
 
@@ -521,20 +516,20 @@ msgstr "启用失败"
 msgid "Enable successfully"
 msgstr "启用成功"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "启用 TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "启用"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "启用成功"
 
@@ -576,12 +571,12 @@ msgid "Export"
 msgstr "导出"
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 
@@ -609,7 +604,7 @@ msgstr "未找到文件"
 msgid "Filter"
 msgstr "过滤"
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "完成"
 
@@ -685,6 +680,14 @@ msgstr "HTTP 监听端口"
 msgid "HTTP01"
 msgstr "HTTP01"
 
+#: src/views/certificate/Certificate.vue:120
+msgid "Import"
+msgstr "导入"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+msgid "Import Certificate"
+msgstr "导入证书"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr "信息"
@@ -729,6 +732,11 @@ msgstr "留空表示不修改"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "留空为默认:https://api.openai.com/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+msgid "Leave blank will not change anything"
+msgstr "留空不做任何更改"
+
 #: src/views/system/About.vue:50
 msgid "License"
 msgstr "开源许可"
@@ -754,7 +762,7 @@ msgstr "Location"
 msgid "Locations"
 msgstr "Locations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 msgid "Log"
 msgstr "日志"
 
@@ -782,7 +790,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "配置管理"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "网站管理"
 
@@ -812,7 +820,7 @@ msgstr "修改"
 msgid "Modify Certificate"
 msgstr "修改证书"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "修改配置文件"
 
@@ -850,8 +858,8 @@ msgstr "上传流量"
 msgid "New version released"
 msgstr "新版本发布"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "下一步"
 
@@ -867,7 +875,7 @@ msgstr "Nginx 访问日志路径"
 msgid "Nginx Configuration Parse Error"
 msgstr "Nginx 配置解析错误"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr "控制 Nginx"
 
@@ -879,7 +887,7 @@ msgstr "Nginx 错误日志路径"
 msgid "Nginx Log"
 msgstr "Nginx 日志"
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 msgid "Nginx reloaded successfully"
 msgstr "Nginx 重载成功"
 
@@ -890,7 +898,7 @@ msgstr "Nginx 重启成功"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -926,7 +934,7 @@ msgstr "通知"
 msgid "Notifications"
 msgstr "通知"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 msgid "Obtain certificate"
 msgstr "获取证书"
 
@@ -946,11 +954,11 @@ msgstr "离线"
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1109,11 +1117,11 @@ msgid "Release Note"
 msgstr "发行日志"
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr "重载"
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr "重载中"
 
@@ -1150,11 +1158,11 @@ msgstr "请求参数错误"
 msgid "Reset"
 msgstr "重置"
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr "重启"
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr "重启中"
 
@@ -1162,12 +1170,12 @@ msgstr "重启中"
 msgid "Run Mode"
 msgstr "运行模式"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr "运行中"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1208,13 +1216,13 @@ msgstr "选择器"
 msgid "Send"
 msgstr "上传"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1224,12 +1232,12 @@ msgstr "服务器错误"
 msgid "Server Info"
 msgstr "服务器信息"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "未在指令集合中找到 server_name"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "必须为 server_name 指令指明参数"
 
@@ -1261,7 +1269,7 @@ msgstr "站点列表"
 msgid "SSL Certificate Content"
 msgstr "SSL 证书内容"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 msgid "SSL Certificate Key Content"
 msgstr "SSL 证书密钥内容"
 
@@ -1288,7 +1296,7 @@ msgstr "稳定"
 msgid "Status"
 msgstr "状态"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr "已停止"
 
@@ -1438,7 +1446,7 @@ msgstr "用户名 (*)"
 msgid "Valid"
 msgstr "有效的"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr "查看"
 
@@ -1448,7 +1456,7 @@ msgstr "查看全部通知"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "警告"
 
@@ -1458,7 +1466,7 @@ msgid ""
 "ownership verification."
 msgstr "我们将在您域名的 DNS 记录中添加一个或多个 TXT 记录,以核实域名所有权。"
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1491,6 +1499,12 @@ msgstr "您使用的是最新版本"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "你可以在这个页面检查Nginx UI的升级。"
 
+#~ msgid "Add Certificate"
+#~ msgstr "添加证书"
+
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "留空不会有任何变化。"
+
 #~ msgid "Renew certificate"
 #~ msgstr "更新证书"
 

+ 92 - 74
app/src/language/zh_TW/app.po

@@ -31,17 +31,11 @@ msgstr "操作"
 
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:115
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
-#: src/views/certificate/Certificate.vue:120
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:115
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:308
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:305
 msgid "Add"
 msgstr "新增"
 
-#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
-#, fuzzy
-msgid "Add Certificate"
-msgstr "憑證狀態"
-
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:98
 msgid "Add Directive Below"
 msgstr "在下方新增指令"
@@ -51,11 +45,11 @@ msgstr "在下方新增指令"
 msgid "Add Location"
 msgstr "新增 Location"
 
-#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:91
+#: src/routes/index.ts:71 src/views/domain/DomainAdd.vue:96
 msgid "Add Site"
 msgstr "新增網站"
 
-#: src/views/certificate/DNSChallenge.vue:95
+#: src/views/certificate/DNSChallenge.vue:94
 msgid "Additional"
 msgstr "其他設定"
 
@@ -90,7 +84,7 @@ msgid "Are you sure you want to clear the record of chat?"
 msgstr "您確定要清除聊天記錄嗎?"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:353
-#: src/views/domain/DomainList.vue:144
+#: src/views/domain/DomainList.vue:147
 msgid "Are you sure you want to delete?"
 msgstr "您確定要刪除嗎?"
 
@@ -110,8 +104,8 @@ msgstr "向 ChatGPT 尋求幫助"
 msgid "Assistant"
 msgstr "助理"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:104
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:118
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:108
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
 msgid "Author"
 msgstr "作者"
 
@@ -123,15 +117,15 @@ msgstr "自動憑證"
 msgid "Auto Refresh"
 msgstr "自動重新整理"
 
-#: src/views/domain/cert/components/ObtainCert.vue:76
+#: src/views/domain/cert/components/ObtainCert.vue:75
 msgid "Auto-renewal disabled for %{name}"
 msgstr "已關閉 %{name} 的自動續簽"
 
-#: src/views/domain/cert/components/ObtainCert.vue:69
+#: src/views/domain/cert/components/ObtainCert.vue:68
 msgid "Auto-renewal enabled for %{name}"
 msgstr "已啟用 %{name} 的自動續簽"
 
-#: src/views/certificate/CertificateEditor.vue:205
+#: src/views/certificate/CertificateEditor.vue:207
 #: src/views/config/Config.vue:75 src/views/config/ConfigEdit.vue:89
 #: src/views/domain/DomainEdit.vue:261 src/views/nginx_log/NginxLog.vue:170
 msgid "Back"
@@ -141,7 +135,7 @@ msgstr "返回"
 msgid "Back Home"
 msgstr "返回首頁"
 
-#: src/views/domain/DomainAdd.vue:97
+#: src/views/domain/DomainAdd.vue:102
 msgid "Base information"
 msgstr "基本資訊"
 
@@ -172,10 +166,10 @@ msgstr "CADir"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:58
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:143
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:103
-#: src/views/domain/cert/components/ObtainCert.vue:150
+#: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:24
 #: src/views/domain/components/RightSettings.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:216
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:213
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:48
 msgid "Cancel"
 msgstr "取消"
@@ -247,11 +241,11 @@ msgstr "成功停用"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/domain/ngx_conf/LocationEditor.vue:121
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:284
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:281
 msgid "Comments"
 msgstr "備註"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:82
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:86
 msgid "Config Templates"
 msgstr "設定模板"
 
@@ -259,7 +253,7 @@ msgstr "設定模板"
 msgid "Configuration file is test successful"
 msgstr "設定檔案測試成功"
 
-#: src/views/domain/DomainAdd.vue:103
+#: src/views/domain/DomainAdd.vue:108
 msgid "Configuration Name"
 msgstr "設定名稱"
 
@@ -267,7 +261,7 @@ msgstr "設定名稱"
 msgid "Configurations"
 msgstr "設定"
 
-#: src/views/domain/DomainAdd.vue:98
+#: src/views/domain/DomainAdd.vue:103
 msgid "Configure SSL"
 msgstr "設定 SSL"
 
@@ -293,7 +287,7 @@ msgstr "中央處理器狀態"
 msgid "CPU:"
 msgstr "中央處理器:"
 
-#: src/views/domain/DomainAdd.vue:156
+#: src/views/domain/DomainAdd.vue:161
 msgid "Create Another"
 msgstr "再建立一個"
 
@@ -317,8 +311,8 @@ msgstr "認證資訊"
 msgid "Current Version"
 msgstr "目前版本"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:122
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:241
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:126
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:238
 msgid "Custom"
 msgstr "自訂"
 
@@ -331,12 +325,12 @@ msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設: database)"
 
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:360
-#: src/views/domain/DomainList.vue:153
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:259
+#: src/views/domain/DomainList.vue:156
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:256
 msgid "Delete"
 msgstr "刪除"
 
-#: src/views/domain/DomainList.vue:77
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgstr "刪除網站:%{site_name}"
 
@@ -362,8 +356,8 @@ msgstr "成功部署 %{conf_name} 至 %{node_name}"
 msgid "Deploy successfully"
 msgstr "部署成功"
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:119
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:109
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:123
 msgid "Description"
 msgstr "描述"
 
@@ -388,21 +382,21 @@ msgstr "指令"
 msgid "Directory"
 msgstr "指令"
 
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:125
 msgid "Disable"
 msgstr "停用"
 
-#: src/views/domain/cert/components/ObtainCert.vue:78
+#: src/views/domain/cert/components/ObtainCert.vue:77
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "關閉 %{name} 自動續簽失敗"
 
 #: src/views/domain/cert/ChangeCert.vue:48 src/views/domain/DomainEdit.vue:190
-#: src/views/domain/DomainList.vue:122
+#: src/views/domain/DomainList.vue:36
 msgid "Disabled"
 msgstr "停用"
 
 #: src/views/domain/components/RightSettings.vue:39
-#: src/views/domain/DomainList.vue:67
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "成功停用"
 
@@ -428,7 +422,7 @@ msgid "Do you want to deploy this file to remote server?"
 msgid_plural "Do you want to deploy this file to remote servers?"
 msgstr[0] "您要將此檔案部署至遠端伺服器嗎?"
 
-#: src/views/domain/cert/components/ObtainCert.vue:146
+#: src/views/domain/cert/components/ObtainCert.vue:133
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "您要停用自動憑證續訂嗎?"
 
@@ -444,11 +438,11 @@ msgstr "您要啟用此網站嗎?"
 msgid "Do you want to enable TLS?"
 msgstr "您想啟用 TLS 嗎?"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:209
 msgid "Do you want to remove this server?"
 msgstr "您要移除此伺服器嗎?"
 
-#: src/views/domain/DomainAdd.vue:146
+#: src/views/domain/DomainAdd.vue:151
 msgid "Domain Config Created Successfully"
 msgstr "網域設定檔成功建立"
 
@@ -470,7 +464,7 @@ msgid "Dry run mode enabled"
 msgstr "試運轉模式已啟用"
 
 #: src/views/domain/components/SiteDuplicate.vue:128
-#: src/views/domain/DomainList.vue:138
+#: src/views/domain/DomainList.vue:141
 msgid "Duplicate"
 msgstr "複製"
 
@@ -506,7 +500,7 @@ msgstr "編輯網站"
 msgid "Email (*)"
 msgstr "電子郵件 (*)"
 
-#: src/views/domain/DomainList.vue:32
+#: src/views/domain/DomainList.vue:133
 msgid "Enable"
 msgstr "啟用"
 
@@ -518,7 +512,7 @@ msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 msgid "Enable %{conf_name} in %{node_name} successfully"
 msgstr "成功在 %{node_name} 啟用 %{conf_name}"
 
-#: src/views/domain/cert/components/ObtainCert.vue:71
+#: src/views/domain/cert/components/ObtainCert.vue:70
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "啟用 %{name} 自動續簽失敗"
 
@@ -530,20 +524,20 @@ msgstr "啟用失敗"
 msgid "Enable successfully"
 msgstr "啟用成功"
 
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:236
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:233
 msgid "Enable TLS"
 msgstr "啟用 TLS"
 
 #: src/views/domain/cert/ChangeCert.vue:44
 #: src/views/domain/components/Deploy.vue:89
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:130
+#: src/views/domain/DomainEdit.vue:184 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "已啟用"
 
 #: src/views/domain/components/RightSettings.vue:30
 #: src/views/domain/components/SiteDuplicate.vue:100
-#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainAdd.vue:45 src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "成功啟用"
 
@@ -586,12 +580,12 @@ msgid "Export"
 msgstr "匯出"
 
 #: src/views/domain/components/RightSettings.vue:42
-#: src/views/domain/DomainList.vue:70
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "停用 %{msg} 失敗"
 
 #: src/views/domain/components/RightSettings.vue:33
-#: src/views/domain/DomainList.vue:61
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "啟用 %{msg} 失敗"
 
@@ -619,7 +613,7 @@ msgstr "找不到檔案"
 msgid "Filter"
 msgstr "篩選"
 
-#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:99
+#: src/language/constants.ts:23 src/views/domain/DomainAdd.vue:104
 msgid "Finished"
 msgstr "完成"
 
@@ -696,6 +690,16 @@ msgstr "HTTP 監聽埠"
 msgid "HTTP01"
 msgstr "HTTP01"
 
+#: src/views/certificate/Certificate.vue:120
+#, fuzzy
+msgid "Import"
+msgstr "匯出"
+
+#: src/routes/index.ts:123 src/views/certificate/CertificateEditor.vue:84
+#, fuzzy
+msgid "Import Certificate"
+msgstr "憑證狀態"
+
 #: src/constants/index.ts:19
 msgid "Info"
 msgstr ""
@@ -740,6 +744,12 @@ msgstr "留空表示不修改"
 msgid "Leave blank for the default: https://api.openai.com/"
 msgstr "預設留空:https://api.openai.com/"
 
+#: src/views/certificate/CertificateEditor.vue:177
+#: src/views/certificate/CertificateEditor.vue:185
+#, fuzzy
+msgid "Leave blank will not change anything"
+msgstr "留空表示不修改"
+
 #: src/views/system/About.vue:50
 #, fuzzy
 msgid "License"
@@ -767,7 +777,7 @@ msgstr "Location"
 msgid "Locations"
 msgstr "Locations"
 
-#: src/views/certificate/CertificateEditor.vue:193
+#: src/views/certificate/CertificateEditor.vue:195
 #, fuzzy
 msgid "Log"
 msgstr "登入"
@@ -795,7 +805,7 @@ msgstr ""
 msgid "Manage Configs"
 msgstr "管理設定"
 
-#: src/routes/index.ts:59 src/views/domain/DomainList.vue:102
+#: src/routes/index.ts:59 src/views/domain/DomainList.vue:105
 msgid "Manage Sites"
 msgstr "管理網站"
 
@@ -827,7 +837,7 @@ msgstr "修改"
 msgid "Modify Certificate"
 msgstr "憑證狀態"
 
-#: src/views/domain/DomainAdd.vue:153
+#: src/views/domain/DomainAdd.vue:158
 msgid "Modify Config"
 msgstr "修改設定"
 
@@ -865,8 +875,8 @@ msgstr "上傳流量"
 msgid "New version released"
 msgstr "新版本發布"
 
-#: src/views/domain/cert/components/ObtainCert.vue:216
-#: src/views/domain/DomainAdd.vue:140
+#: src/views/domain/cert/components/ObtainCert.vue:203
+#: src/views/domain/DomainAdd.vue:145
 msgid "Next"
 msgstr "下一步"
 
@@ -882,7 +892,7 @@ msgstr "Nginx 存取日誌路徑"
 msgid "Nginx Configuration Parse Error"
 msgstr "Nginx 設定解析錯誤"
 
-#: src/components/NginxControl/NginxControl.vue:67
+#: src/components/NginxControl/NginxControl.vue:65
 msgid "Nginx Control"
 msgstr "Nginx 控制元件"
 
@@ -894,7 +904,7 @@ msgstr "Nginx 錯誤日誌路徑"
 msgid "Nginx Log"
 msgstr "Nginx 日誌"
 
-#: src/components/NginxControl/NginxControl.vue:23
+#: src/components/NginxControl/NginxControl.vue:25
 msgid "Nginx reloaded successfully"
 msgstr "Nginx 重新載入成功"
 
@@ -905,7 +915,7 @@ msgstr "Nginx 重啟成功"
 #: src/components/ChatGPT/ChatGPT.vue:277
 #: src/components/Notification/Notification.vue:84
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:351
-#: src/views/domain/DomainList.vue:142
+#: src/views/domain/DomainList.vue:145
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:81
 #: src/views/domain/ngx_conf/LocationEditor.vue:76
 #: src/views/notification/Notification.vue:71
@@ -943,7 +953,7 @@ msgstr "憑證"
 msgid "Notifications"
 msgstr "憑證"
 
-#: src/views/domain/cert/components/ObtainCert.vue:191
+#: src/views/domain/cert/components/ObtainCert.vue:178
 msgid "Obtain certificate"
 msgstr "取得憑證"
 
@@ -963,11 +973,11 @@ msgstr "離線"
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:144
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:352
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:104
-#: src/views/domain/cert/components/ObtainCert.vue:149
+#: src/views/domain/cert/components/ObtainCert.vue:136
 #: src/views/domain/components/Deploy.vue:23
 #: src/views/domain/components/RightSettings.vue:51
-#: src/views/domain/DomainList.vue:143
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:215
+#: src/views/domain/DomainList.vue:146
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:212
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:47
 #: src/views/notification/Notification.vue:72
 msgid "OK"
@@ -1127,11 +1137,11 @@ msgid "Release Note"
 msgstr "發行公告"
 
 #: src/components/ChatGPT/ChatGPT.vue:266
-#: src/components/NginxControl/NginxControl.vue:102
+#: src/components/NginxControl/NginxControl.vue:100
 msgid "Reload"
 msgstr "重新載入"
 
-#: src/components/NginxControl/NginxControl.vue:76
+#: src/components/NginxControl/NginxControl.vue:74
 msgid "Reloading"
 msgstr "重新載入中"
 
@@ -1173,11 +1183,11 @@ msgstr "請求參數錯誤"
 msgid "Reset"
 msgstr "重設"
 
-#: src/components/NginxControl/NginxControl.vue:95
+#: src/components/NginxControl/NginxControl.vue:93
 msgid "Restart"
 msgstr "重新啟動"
 
-#: src/components/NginxControl/NginxControl.vue:81
+#: src/components/NginxControl/NginxControl.vue:79
 msgid "Restarting"
 msgstr "正在重新啟動"
 
@@ -1185,12 +1195,12 @@ msgstr "正在重新啟動"
 msgid "Run Mode"
 msgstr "執行模式"
 
-#: src/components/NginxControl/NginxControl.vue:71
+#: src/components/NginxControl/NginxControl.vue:69
 msgid "Running"
 msgstr "執行中"
 
 #: src/components/ChatGPT/ChatGPT.vue:259
-#: src/views/certificate/CertificateEditor.vue:212
+#: src/views/certificate/CertificateEditor.vue:214
 #: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:268
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:111
 #: src/views/preference/Preference.vue:113
@@ -1231,13 +1241,13 @@ msgstr "選擇器"
 msgid "Send"
 msgstr "傳送"
 
-#: src/components/NginxControl/NginxControl.vue:29
+#: src/components/NginxControl/NginxControl.vue:31
 #: src/components/NginxControl/NginxControl.vue:45
 #: src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts:45
 #: src/components/StdDesign/StdDataDisplay/methods/sortable.ts:126
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
-#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:79
+#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:72 src/views/preference/Preference.vue:60
 #: src/views/system/Upgrade.vue:45
 msgid "Server error"
@@ -1247,12 +1257,12 @@ msgstr "伺服器錯誤"
 msgid "Server Info"
 msgstr "伺服器資訊"
 
-#: src/views/domain/cert/components/ObtainCert.vue:115
+#: src/views/domain/cert/components/ObtainCert.vue:102
 msgid "server_name not found in directives"
 msgstr "在指令中未找到 server_name"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:29
-#: src/views/domain/DomainAdd.vue:119
+#: src/views/domain/DomainAdd.vue:124
 msgid "server_name parameter is required"
 msgstr "必須提供 server_name 參數"
 
@@ -1287,7 +1297,7 @@ msgstr "網站列表"
 msgid "SSL Certificate Content"
 msgstr "SSL 認證內容"
 
-#: src/views/certificate/CertificateEditor.vue:179
+#: src/views/certificate/CertificateEditor.vue:180
 #, fuzzy
 msgid "SSL Certificate Key Content"
 msgstr "SSL 憑證金鑰內容"
@@ -1316,7 +1326,7 @@ msgstr "穩定"
 msgid "Status"
 msgstr "狀態"
 
-#: src/components/NginxControl/NginxControl.vue:86
+#: src/components/NginxControl/NginxControl.vue:84
 msgid "Stopped"
 msgstr "已停止"
 
@@ -1470,7 +1480,7 @@ msgstr "使用者名稱 (*)"
 msgid "Valid"
 msgstr ""
 
-#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:101
+#: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:105
 msgid "View"
 msgstr "檢視"
 
@@ -1481,7 +1491,7 @@ msgstr "憑證"
 
 #: src/constants/index.ts:18 src/views/config/InspectConfig.vue:36
 #: src/views/domain/cert/components/AutoCertStepOne.vue:23
-#: src/views/domain/DomainAdd.vue:114
+#: src/views/domain/DomainAdd.vue:119
 msgid "Warning"
 msgstr "警告"
 
@@ -1491,7 +1501,7 @@ msgid ""
 "ownership verification."
 msgstr ""
 
-#: src/views/domain/cert/components/ObtainCert.vue:147
+#: src/views/domain/cert/components/ObtainCert.vue:134
 msgid ""
 "We will remove the HTTPChallenge configuration from this file and reload the "
 "Nginx. Are you sure you want to continue?"
@@ -1525,6 +1535,14 @@ msgstr "您正在使用最新版本"
 msgid "You can check Nginx UI upgrade at this page."
 msgstr "您可以在此頁面檢查 Nginx UI 的升級。"
 
+#, fuzzy
+#~ msgid "Add Certificate"
+#~ msgstr "憑證狀態"
+
+#, fuzzy
+#~ msgid "Leave blank will not change anything."
+#~ msgstr "留空表示不修改"
+
 #, fuzzy
 #~ msgid "Renew certificate"
 #~ msgstr "取得憑證"

+ 2 - 2
app/src/routes/index.ts

@@ -119,8 +119,8 @@ export const routes: Route[] = [
             },
           },
           {
-            path: 'add',
-            name: () => $gettext('Add Certificate'),
+            path: 'import',
+            name: () => $gettext('Import Certificate'),
             component: () => import('@/views/certificate/CertificateEditor.vue'),
             meta: {
               hiddenInSidebar: true,

+ 25 - 3
app/src/views/certificate/Certificate.vue

@@ -3,6 +3,7 @@ import { useGettext } from 'vue3-gettext'
 import { Badge, Tag } from 'ant-design-vue'
 import { h, provide } from 'vue'
 import dayjs from 'dayjs'
+import { CloudUploadOutlined, SafetyCertificateOutlined } from '@ant-design/icons-vue'
 import { input } from '@/components/StdDesign/StdDataEntry'
 import type { customRender } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
 import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
@@ -11,6 +12,7 @@ import type { Column } from '@/components/StdDesign/types'
 import type { Cert } from '@/api/cert'
 import { AutoCertState } from '@/constants'
 import StdTable from '@/components/StdDesign/StdDataDisplay/StdTable.vue'
+import WildcardCertificate from '@/views/certificate/WildcardCertificate.vue'
 
 const { $gettext } = useGettext()
 
@@ -111,20 +113,40 @@ const no_server_name = computed(() => {
 })
 
 provide('no_server_name', no_server_name)
+
+const refWildcard = ref()
+const refTable = ref()
 </script>
 
 <template>
   <ACard :title="$gettext('Certificates')">
     <template #extra>
-      <a @click="$router.push('/certificates/add')">
-        {{ $gettext('Add') }}
-      </a>
+      <AButton
+        type="link"
+        @click="$router.push('/certificates/import')"
+      >
+        <CloudUploadOutlined />
+        {{ $gettext('Import') }}
+      </AButton>
+
+      <AButton
+        type="link"
+        @click="() => refWildcard.open()"
+      >
+        <SafetyCertificateOutlined />
+        {{ $gettext('Issue wildcard certificate') }}
+      </AButton>
     </template>
     <StdTable
+      ref="refTable"
       :api="cert"
       :columns="columns"
       @click-edit="id => $router.push(`/certificates/${id}`)"
     />
+    <WildcardCertificate
+      ref="refWildcard"
+      @issued="() => refTable.get_list()"
+    />
   </ACard>
 </template>
 

+ 3 - 1
app/src/views/certificate/CertificateEditor.vue

@@ -81,7 +81,7 @@ const isManaged = computed(() => {
 </script>
 
 <template>
-  <ACard :title="id > 0 ? $gettext('Modify Certificate') : $gettext('Add Certificate')">
+  <ACard :title="id > 0 ? $gettext('Modify Certificate') : $gettext('Import Certificate')">
     <div
       v-if="isManaged"
       class="mb-4"
@@ -174,6 +174,7 @@ const isManaged = computed(() => {
               v-model:content="data.ssl_certificate"
               default-height="300px"
               :readonly="!notShowInAutoCert"
+              :placeholder="$gettext('Leave blank will not change anything')"
             />
           </AFormItem>
           <AFormItem :label="$gettext('SSL Certificate Key Content')">
@@ -181,6 +182,7 @@ const isManaged = computed(() => {
               v-model:content="data.ssl_certificate_key"
               default-height="300px"
               :readonly="!notShowInAutoCert"
+              :placeholder="$gettext('Leave blank will not change anything')"
             />
           </AFormItem>
         </AForm>

+ 2 - 2
app/src/views/certificate/RenewCert.vue

@@ -18,7 +18,7 @@ const refObtainCertLive = ref()
 
 const data = inject('data') as Ref<Cert>
 
-const issue_cert = () => {
+const issueCert = () => {
   modalVisible.value = true
 
   refObtainCertLive.value.issue_cert(data.value.name, data.value.domains, () => {
@@ -38,7 +38,7 @@ provide('issuing_cert', issuing_cert)
       type="primary"
       ghost
       class="mb-6"
-      @click="issue_cert"
+      @click="issueCert"
     >
       {{ $gettext('Renew Certificate') }}
     </AButton>

+ 101 - 0
app/src/views/certificate/WildcardCertificate.vue

@@ -0,0 +1,101 @@
+<script setup lang="ts">
+import type { Ref } from 'vue'
+import { message } from 'ant-design-vue'
+import { useGettext } from 'vue3-gettext'
+import type { Cert } from '@/api/cert'
+import ObtainCertLive from '@/views/domain/cert/components/ObtainCertLive.vue'
+import DNSChallenge from '@/views/domain/cert/components/DNSChallenge.vue'
+
+const emit = defineEmits<{
+  issued: [void]
+}>()
+
+const { $gettext } = useGettext()
+const step = ref(0)
+const visible = ref(false)
+const data = ref({}) as Ref<Cert>
+const issuing_cert = ref(false)
+
+provide('data', data)
+provide('issuing_cert', issuing_cert)
+function open() {
+  visible.value = true
+  data.value = {
+    challenge_method: 'dns01',
+  } as Cert
+}
+
+defineExpose({
+  open,
+})
+
+const modalVisible = ref(false)
+const modalClosable = ref(true)
+
+const refObtainCertLive = ref()
+const domain = ref('')
+
+const computedDomain = computed(() => {
+  return `*.${domain.value}`
+})
+
+const issueCert = () => {
+  step.value++
+  modalVisible.value = true
+
+  refObtainCertLive.value.issue_cert(computedDomain.value, [computedDomain.value], () => {
+    message.success($gettext('Renew successfully'))
+    emit('issued')
+  })
+}
+</script>
+
+<template>
+  <div>
+    <AModal
+      v-model:open="visible"
+      :mask="false"
+      :title="$gettext('Issue Wildcard Certificate')"
+      destroy-on-close
+      :footer="null"
+      :mask-closable="modalClosable"
+      :closable="modalClosable"
+      force-render
+    >
+      <template v-if="step === 0">
+        <DNSChallenge />
+
+        <AForm layout="vertical">
+          <AFormItem :label="$gettext('Domain')">
+            <AInput
+              v-model:value="domain"
+              addon-before="*."
+            />
+          </AFormItem>
+        </AForm>
+        <div
+          v-if="step === 0"
+          class="flex justify-end"
+        >
+          <AButton
+            type="primary"
+            @click="issueCert"
+          >
+            {{ $gettext('Issue') }}
+          </AButton>
+        </div>
+      </template>
+
+      <ObtainCertLive
+        v-show="step === 1"
+        ref="refObtainCertLive"
+        v-model:modal-closable="modalClosable"
+        v-model:modal-visible="modalVisible"
+      />
+    </AModal>
+  </div>
+</template>
+
+<style scoped lang="less">
+
+</style>

+ 7 - 4
model/cert.go

@@ -7,8 +7,10 @@ import (
 )
 
 const (
-	AutoCertEnabled  = 1
-	AutoCertDisabled = -1
+	AutoCertEnabled           = 1
+	AutoCertDisabled          = -1
+	CertChallengeMethodHTTP01 = "http01"
+	CertChallengeMethodDNS01  = "dns01"
 )
 
 type CertDomains []string
@@ -36,7 +38,8 @@ func FirstCert(confName string) (c Cert, err error) {
 }
 
 func FirstOrCreateCert(confName string) (c Cert, err error) {
-	err = db.FirstOrCreate(&c, &Cert{Filename: confName}).Error
+	// Filename is used to check whether this site is enabled
+	err = db.FirstOrCreate(&c, &Cert{Name: confName, Filename: confName}).Error
 	return
 }
 
@@ -64,7 +67,7 @@ func GetAutoCertList() (c []*Cert) {
 	}
 
 	for _, v := range t {
-		if enabledConfigMap[v.Filename] == true {
+		if v.ChallengeMethod == CertChallengeMethodDNS01 || enabledConfigMap[v.Filename] == true {
 			c = append(c, v)
 		}
 	}