Browse Source

chore: update zh_CN translations

0xJacky 2 years ago
parent
commit
aa1258e0a5

+ 175 - 71
frontend/src/language/en/app.po

@@ -79,7 +79,7 @@ msgstr ""
 msgid "Arch"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:45
 #, fuzzy
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Are you sure you want to remove this directive?"
@@ -99,6 +99,14 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Are you sure you want to remove this directive?"
 
+#: src/components/ChatGPT/ChatGPT.vue:4 src/components/ChatGPT/ChatGPT.vue:5
+msgid "Ask ChatGPT for Help"
+msgstr ""
+
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "Assistant"
+msgstr ""
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:12
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:16
@@ -141,7 +149,7 @@ msgstr "Auto-renewal enabled for %{name}"
 
 #: src/views/config/Config.vue:17 src/views/config/Config.vue:18
 #: src/views/config/Config.vue:28 src/views/config/Config.vue:6
-#: src/views/config/ConfigEdit.vue:83 src/views/domain/DomainEdit.vue:263
+#: src/views/config/ConfigEdit.vue:80 src/views/domain/DomainEdit.vue:225
 #: src/views/nginx_log/NginxLog.vue:161
 msgid "Back"
 msgstr "Back"
@@ -155,6 +163,7 @@ msgstr "Back"
 msgid "Base information"
 msgstr "Base information"
 
+#: src/views/domain/components/RightSettings.vue:4
 #: src/views/preference/Preference.vue:5
 #, fuzzy
 msgid "Basic"
@@ -181,13 +190,14 @@ msgstr "Build with"
 msgid "CADir"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:17 src/components/ChatGPT/ChatGPT.vue:18
-#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:24
+#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:27 src/components/ChatGPT/ChatGPT.vue:29
 #: src/components/StdDataDisplay/StdBatchEdit.vue:7
 #: src/components/StdDataDisplay/StdCurd.vue:27
 #: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/views/domain/cert/components/ObtainCert.vue:191
-#: src/views/domain/DomainEdit.vue:176
+#: src/views/domain/components/Deploy.vue:26
+#: src/views/domain/components/RightSettings.vue:48
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:208
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:37
 msgid "Cancel"
@@ -248,8 +258,8 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:31 src/components/ChatGPT/ChatGPT.vue:32
-#: src/components/ChatGPT/ChatGPT.vue:38 src/components/ChatGPT/ChatGPT.vue:42
+#: src/components/ChatGPT/ChatGPT.vue:36 src/components/ChatGPT/ChatGPT.vue:37
+#: src/components/ChatGPT/ChatGPT.vue:43 src/components/ChatGPT/ChatGPT.vue:47
 msgid "Clear"
 msgstr ""
 
@@ -301,7 +311,7 @@ msgstr "Content"
 msgid "Core Upgrade"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:66
+#: src/views/dashboard/ServerAnalytic.vue:68
 msgid "CPU Status"
 msgstr "CPU Status"
 
@@ -310,7 +320,7 @@ msgstr "CPU Status"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:154
+#: src/views/domain/DomainAdd.vue:157
 msgid "Create Another"
 msgstr "Create Another"
 
@@ -380,6 +390,24 @@ msgstr ""
 msgid "Delete site: %{site_name}"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:12
+#: src/views/domain/components/Deploy.vue:13
+msgid "Deploy"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:63
+msgid "Deploy %{conf_name} to %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:40
+msgid "Deploy %{conf_name} to %{node_name} successfully"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:38
+#, fuzzy
+msgid "Deploy successfully"
+msgstr "Saved successfully"
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:14
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:17
@@ -420,11 +448,12 @@ msgstr "Disable auto-renewal failed for %{name}"
 msgid "Disabled"
 msgstr "Disabled"
 
-#: src/views/domain/DomainEdit.vue:163 src/views/domain/DomainList.vue:69
+#: src/views/domain/components/RightSettings.vue:35
+#: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgstr "Disabled successfully"
 
-#: src/views/dashboard/ServerAnalytic.vue:98
+#: src/views/dashboard/ServerAnalytic.vue:100
 msgid "Disk IO"
 msgstr "Disk IO"
 
@@ -443,16 +472,23 @@ msgstr ""
 msgid "DNS01"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:21
+#, fuzzy
+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] "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:187
 msgid "Do you want to disable auto-cert renewal?"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 #, fuzzy
 msgid "Do you want to disable this site?"
 msgstr "Are you sure you want to remove this directive?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 #, fuzzy
 msgid "Do you want to enable this site?"
 msgstr "Are you sure you want to remove this directive?"
@@ -487,15 +523,30 @@ msgstr ""
 msgid "Dry run mode enabled"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:2
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
-#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr ""
 
-#: src/views/domain/SiteDuplicate.vue:43
+#: src/views/domain/components/SiteDuplicate.vue:73
+#, fuzzy
+msgid "Duplicate %{conf_name} to %{node_name} successfully"
+msgstr "Saved successfully"
+
+#: src/views/domain/components/SiteDuplicate.vue:78
+#, fuzzy
+msgid "Duplicate failed"
+msgstr "Enable failed"
+
+#: src/views/domain/components/SiteDuplicate.vue:71
+#, fuzzy
+msgid "Duplicate successfully"
+msgstr "Saved successfully"
+
+#: src/views/domain/components/SiteDuplicate.vue:57
 #, fuzzy
-msgid "Duplicated successfully"
+msgid "Duplicate to local successfully"
 msgstr "Saved successfully"
 
 #: src/views/domain/DomainEdit.vue:5 src/views/domain/DomainEdit.vue:6
@@ -514,28 +565,44 @@ msgstr "Edit Site"
 msgid "Email (*)"
 msgstr "Email (*)"
 
+#: src/views/domain/components/Deploy.vue:53
+msgid "Enable %{conf_name} in %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:48
+msgid "Enable %{conf_name} in %{node_name} successfully"
+msgstr ""
+
 #: src/views/domain/cert/components/ObtainCert.vue:55
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Enable auto-renewal failed for %{name}"
 
-#: src/views/domain/DomainAdd.vue:49
+#: src/views/domain/DomainAdd.vue:52
 msgid "Enable failed"
 msgstr "Enable failed"
 
+#: src/views/domain/components/Deploy.vue:46
+#, fuzzy
+msgid "Enable successfully"
+msgstr "Enabled successfully"
+
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:3
 msgid "Enable TLS"
 msgstr "Enable TLS"
 
 #: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:44
-#: src/views/domain/DomainEdit.vue:29 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainEdit.vue:8 src/views/domain/DomainList.vue:10
-#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/components/Deploy.vue:3
+#: src/views/domain/components/Deploy.vue:4
+#: src/views/domain/components/RightSettings.vue:5
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainEdit.vue:8
+#: src/views/domain/DomainList.vue:10 src/views/domain/DomainList.vue:11
+#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgstr "Enabled"
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:154
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/components/RightSettings.vue:26
+#: src/views/domain/DomainAdd.vue:49 src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgstr "Enabled successfully"
 
@@ -577,11 +644,13 @@ msgstr "Expiration Date: %{date}"
 msgid "Export"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:166 src/views/domain/DomainList.vue:73
+#: src/views/domain/components/RightSettings.vue:38
+#: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
-#: src/views/domain/DomainEdit.vue:157 src/views/domain/DomainList.vue:63
+#: src/views/domain/components/RightSettings.vue:29
+#: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
@@ -589,7 +658,7 @@ msgstr "Failed to enable %{msg}"
 msgid "Failed to get certificate information"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:132
+#: src/views/domain/DomainEdit.vue:133
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 
@@ -613,7 +682,7 @@ msgstr ""
 msgid "Finished"
 msgstr "Finished"
 
-#: src/views/config/ConfigEdit.vue:86
+#: src/views/config/ConfigEdit.vue:83
 msgid "Format Code"
 msgstr ""
 
@@ -735,12 +804,14 @@ msgstr ""
 msgid "Link Start"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:154
+#: src/views/dashboard/ServerAnalytic.vue:161
 msgid "Load Averages:"
 msgstr "Load Averages:"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:5
 #: src/components/EnvIndicator/EnvIndicator.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:4
+#: src/components/NodeSelector/NodeSelector.vue:5
 #, fuzzy
 msgid "Local"
 msgstr "Location"
@@ -788,16 +859,16 @@ msgstr "Manage Sites"
 msgid "Manage Users"
 msgstr "Manage Users"
 
-#: src/views/dashboard/ServerAnalytic.vue:34
+#: src/views/dashboard/ServerAnalytic.vue:36
 msgid "Memory"
 msgstr "Memory"
 
-#: src/views/dashboard/ServerAnalytic.vue:31
+#: src/views/dashboard/ServerAnalytic.vue:33
 msgid "Memory and Storage"
 msgstr "Memory and Storage"
 
-#: src/components/ChatGPT/ChatGPT.vue:13 src/components/ChatGPT/ChatGPT.vue:14
-#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:20
+#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:19
+#: src/components/ChatGPT/ChatGPT.vue:23 src/components/ChatGPT/ChatGPT.vue:25
 #: src/components/StdDataDisplay/StdCurd.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:26
@@ -808,7 +879,7 @@ msgstr "Memory and Storage"
 msgid "Modify"
 msgstr "Modify Config"
 
-#: src/views/domain/DomainAdd.vue:151
+#: src/views/domain/DomainAdd.vue:154
 msgid "Modify Config"
 msgstr "Modify Config"
 
@@ -820,25 +891,25 @@ msgstr "Single Directive"
 
 #: src/views/cert/Cert.vue:16 src/views/cert/DNSCredential.vue:12
 #: src/views/config/config.ts:8 src/views/domain/cert/ChangeCert.vue:21
-#: src/views/domain/DomainEdit.vue:32 src/views/domain/DomainList.vue:15
-#: src/views/domain/SiteDuplicate.vue:5
-#: src/views/environment/Environment.vue:13
+#: src/views/domain/components/RightSettings.vue:8
+#: src/views/domain/components/SiteDuplicate.vue:5
+#: src/views/domain/DomainList.vue:15 src/views/environment/Environment.vue:13
 msgid "Name"
 msgstr "Name"
 
-#: src/views/dashboard/ServerAnalytic.vue:76
+#: src/views/dashboard/ServerAnalytic.vue:78
 msgid "Network"
 msgstr "Network"
 
-#: src/views/dashboard/ServerAnalytic.vue:50
+#: src/views/dashboard/ServerAnalytic.vue:52
 msgid "Network Statistics"
 msgstr "Network Statistics"
 
-#: src/views/dashboard/ServerAnalytic.vue:54
+#: src/views/dashboard/ServerAnalytic.vue:56
 msgid "Network Total Receive"
 msgstr "Network Total Receive"
 
-#: src/views/dashboard/ServerAnalytic.vue:58
+#: src/views/dashboard/ServerAnalytic.vue:60
 msgid "Network Total Send"
 msgstr "Network Total Send"
 
@@ -849,7 +920,7 @@ msgstr ""
 #: src/views/domain/cert/components/ObtainCert.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:13
 #: src/views/domain/cert/components/ObtainCert.vue:21
-#: src/views/domain/DomainAdd.vue:141
+#: src/views/domain/DomainAdd.vue:144
 msgid "Next"
 msgstr "Next"
 
@@ -857,7 +928,7 @@ msgstr "Next"
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:39
+#: src/views/domain/DomainEdit.vue:32
 #, fuzzy
 msgid "Nginx Configuration Parse Error"
 msgstr "Configuration Name"
@@ -887,7 +958,7 @@ msgstr "Saved successfully"
 msgid "Nginx restarted successfully"
 msgstr "Saved successfully"
 
-#: src/components/ChatGPT/ChatGPT.vue:38
+#: src/components/ChatGPT/ChatGPT.vue:43
 #: src/components/StdDataDisplay/StdTable.vue:53
 #: src/views/domain/DomainList.vue:27
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:22
@@ -917,24 +988,32 @@ msgstr "Certificate is valid"
 msgid "Obtaining certificate"
 msgstr ""
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:11
 #: src/views/dashboard/Environments.vue:15
 #: src/views/dashboard/Environments.vue:16
 #: src/views/environment/Environment.vue:48
 msgid "Offline"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:44
 #: src/components/StdDataDisplay/StdBatchEdit.vue:8
 #: src/components/StdDataDisplay/StdCurd.vue:28
 #: src/components/StdDataDisplay/StdTable.vue:54
 #: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:190
-#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:28
+#: src/views/domain/components/Deploy.vue:25
+#: src/views/domain/components/RightSettings.vue:47
+#: src/views/domain/DomainList.vue:28
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:207
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:36
 msgid "OK"
 msgstr ""
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:5
+#: src/components/NodeSelector/NodeSelector.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:9
 #: src/views/dashboard/Environments.vue:14
 #: src/views/dashboard/Environments.vue:15
 #: src/views/environment/Environment.vue:45
@@ -952,10 +1031,20 @@ msgstr ""
 msgid "OS"
 msgstr "OS:"
 
-#: src/views/dashboard/ServerAnalytic.vue:160
+#: src/views/dashboard/ServerAnalytic.vue:167
 msgid "OS:"
 msgstr "OS:"
 
+#: src/views/domain/components/Deploy.vue:5
+#: src/views/domain/components/Deploy.vue:6
+msgid "Overwrite"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:7
+#: src/views/domain/components/Deploy.vue:8
+msgid "Overwrite exist file"
+msgstr ""
+
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgstr "Params"
@@ -996,7 +1085,7 @@ msgid ""
 "select one of the credentials below to request the API of the DNS provider."
 msgstr ""
 
-#: src/views/domain/SiteDuplicate.vue:28
+#: src/views/domain/components/SiteDuplicate.vue:32
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
@@ -1014,6 +1103,10 @@ msgstr "Please input your password!"
 msgid "Please input your username!"
 msgstr "Please input your username!"
 
+#: src/views/domain/components/SiteDuplicate.vue:39
+msgid "Please select at least one node!"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:25 src/views/system/Upgrade.vue:26
 #: src/views/system/Upgrade.vue:30 src/views/system/Upgrade.vue:34
 #: src/views/system/Upgrade.vue:38 src/views/system/Upgrade.vue:48
@@ -1047,18 +1140,18 @@ msgstr "Project Team"
 msgid "Provider"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:109
-#: src/views/dashboard/ServerAnalytic.vue:23
+#: src/views/dashboard/ServerAnalytic.vue:111
+#: src/views/dashboard/ServerAnalytic.vue:30
 msgid "Reads"
 msgstr "Reads"
 
-#: src/views/dashboard/ServerAnalytic.vue:20
-#: src/views/dashboard/ServerAnalytic.vue:80
+#: src/views/dashboard/ServerAnalytic.vue:27
+#: src/views/dashboard/ServerAnalytic.vue:82
 msgid "Receive"
 msgstr "Receive"
 
-#: src/components/ChatGPT/ChatGPT.vue:34 src/components/ChatGPT/ChatGPT.vue:35
-#: src/components/ChatGPT/ChatGPT.vue:41 src/components/ChatGPT/ChatGPT.vue:45
+#: src/components/ChatGPT/ChatGPT.vue:39 src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:46 src/components/ChatGPT/ChatGPT.vue:50
 msgid "Regenerate response"
 msgstr ""
 
@@ -1080,8 +1173,8 @@ msgstr "Install"
 msgid "Release Note"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:20 src/components/ChatGPT/ChatGPT.vue:21
-#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:30 src/components/ChatGPT/ChatGPT.vue:32
 #: src/components/NginxControl/NginxControl.vue:12
 #: src/components/NginxControl/NginxControl.vue:13
 #: src/components/NginxControl/NginxControl.vue:17
@@ -1125,9 +1218,9 @@ msgstr "Advance Mode"
 msgid "Running"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:16 src/components/ChatGPT/ChatGPT.vue:17
-#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:23
-#: src/views/config/ConfigEdit.vue:89 src/views/domain/DomainEdit.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:22
+#: src/components/ChatGPT/ChatGPT.vue:26 src/components/ChatGPT/ChatGPT.vue:28
+#: src/views/config/ConfigEdit.vue:86 src/views/domain/DomainEdit.vue:228
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1143,7 +1236,7 @@ msgstr "Save"
 msgid "Save Directive"
 msgstr "Save Directive"
 
-#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:53
+#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:56
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:36
 msgid "Save error %{msg}"
 msgstr "Save error %{msg}"
@@ -1159,8 +1252,8 @@ msgstr "Saved successfully"
 msgid "Save Successfully"
 msgstr "Saved successfully"
 
-#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:146
+#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:46
+#: src/views/domain/DomainEdit.vue:147
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 msgid "Saved successfully"
 msgstr "Saved successfully"
@@ -1169,8 +1262,8 @@ msgstr "Saved successfully"
 msgid "Selector"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:21
-#: src/views/dashboard/ServerAnalytic.vue:87
+#: src/views/dashboard/ServerAnalytic.vue:28
+#: src/views/dashboard/ServerAnalytic.vue:89
 msgid "Send"
 msgstr "Send"
 
@@ -1197,7 +1290,7 @@ msgstr "server_name not found in directives"
 #: src/views/domain/cert/components/AutoCertStepOne.vue:10
 #: src/views/domain/cert/components/AutoCertStepOne.vue:5
 #: src/views/domain/cert/components/AutoCertStepOne.vue:6
-#: src/views/domain/DomainAdd.vue:116
+#: src/views/domain/DomainAdd.vue:119
 msgid "server_name parameter is required"
 msgstr "server_name parameter is required"
 
@@ -1256,7 +1349,7 @@ msgstr "Status"
 msgid "Stopped"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:43
+#: src/views/dashboard/ServerAnalytic.vue:45
 msgid "Storage"
 msgstr "Storage"
 
@@ -1264,7 +1357,7 @@ msgstr "Storage"
 msgid "Subject Name: %{name}"
 msgstr "Subject Name: %{name}"
 
-#: src/views/dashboard/ServerAnalytic.vue:38
+#: src/views/dashboard/ServerAnalytic.vue:40
 msgid "Swap"
 msgstr "Swap"
 
@@ -1277,6 +1370,10 @@ msgstr ""
 msgid "Table"
 msgstr "Enabled"
 
+#: src/views/domain/components/SiteDuplicate.vue:8
+msgid "Target"
+msgstr ""
+
 #: src/routes/index.ts:102 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgstr "Terminal"
@@ -1340,8 +1437,10 @@ msgid "Type"
 msgstr ""
 
 #: src/views/cert/Cert.vue:68 src/views/cert/DNSCredential.vue:25
-#: src/views/config/config.ts:28 src/views/domain/DomainList.vue:41
-#: src/views/environment/Environment.vue:55 src/views/user/User.vue:37
+#: src/views/config/config.ts:28
+#: src/views/domain/components/RightSettings.vue:11
+#: src/views/domain/DomainList.vue:41 src/views/environment/Environment.vue:55
+#: src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "Updated at"
 
@@ -1367,7 +1466,7 @@ msgstr "Saved successfully"
 msgid "Upgrading Nginx UI, please wait..."
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:150
+#: src/views/dashboard/ServerAnalytic.vue:157
 msgid "Uptime:"
 msgstr "Uptime:"
 
@@ -1375,6 +1474,11 @@ msgstr "Uptime:"
 msgid "URL"
 msgstr ""
 
+#: src/components/ChatGPT/ChatGPT.vue:16
+#, fuzzy
+msgid "User"
+msgstr "Username"
+
 #: src/views/other/Login.vue:11 src/views/user/User.vue:11
 msgid "Username"
 msgstr "Username"
@@ -1409,8 +1513,8 @@ msgid ""
 "Nginx. Are you sure you want to continue?"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:102
-#: src/views/dashboard/ServerAnalytic.vue:22
+#: src/views/dashboard/ServerAnalytic.vue:104
+#: src/views/dashboard/ServerAnalytic.vue:29
 msgid "Writes"
 msgstr "Writes"
 

+ 177 - 71
frontend/src/language/fr_FR/app.po

@@ -82,7 +82,7 @@ msgstr "Jeton d'API"
 msgid "Arch"
 msgstr "Arch"
 
-#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:45
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 
@@ -99,6 +99,15 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 
+#: src/components/ChatGPT/ChatGPT.vue:4 src/components/ChatGPT/ChatGPT.vue:5
+#, fuzzy
+msgid "Ask ChatGPT for Help"
+msgstr "Modèle ChatGPT"
+
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "Assistant"
+msgstr ""
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:12
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:16
@@ -144,7 +153,7 @@ msgstr "Renouvellement automatique activé pour %{name}"
 
 #: src/views/config/Config.vue:17 src/views/config/Config.vue:18
 #: src/views/config/Config.vue:28 src/views/config/Config.vue:6
-#: src/views/config/ConfigEdit.vue:83 src/views/domain/DomainEdit.vue:263
+#: src/views/config/ConfigEdit.vue:80 src/views/domain/DomainEdit.vue:225
 #: src/views/nginx_log/NginxLog.vue:161
 msgid "Back"
 msgstr "Retour"
@@ -157,6 +166,7 @@ msgstr "Retour au menu principal"
 msgid "Base information"
 msgstr "Information générale"
 
+#: src/views/domain/components/RightSettings.vue:4
 #: src/views/preference/Preference.vue:5
 msgid "Basic"
 msgstr "Basique"
@@ -182,13 +192,14 @@ msgstr "Build avec"
 msgid "CADir"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:17 src/components/ChatGPT/ChatGPT.vue:18
-#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:24
+#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:27 src/components/ChatGPT/ChatGPT.vue:29
 #: src/components/StdDataDisplay/StdBatchEdit.vue:7
 #: src/components/StdDataDisplay/StdCurd.vue:27
 #: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/views/domain/cert/components/ObtainCert.vue:191
-#: src/views/domain/DomainEdit.vue:176
+#: src/views/domain/components/Deploy.vue:26
+#: src/views/domain/components/RightSettings.vue:48
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:208
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:37
 msgid "Cancel"
@@ -246,8 +257,8 @@ msgstr "Utilisateur chinois : https://ghproxy.com/"
 msgid "Cleaning environment variables"
 msgstr "Nettoyage des variables d'environnement"
 
-#: src/components/ChatGPT/ChatGPT.vue:31 src/components/ChatGPT/ChatGPT.vue:32
-#: src/components/ChatGPT/ChatGPT.vue:38 src/components/ChatGPT/ChatGPT.vue:42
+#: src/components/ChatGPT/ChatGPT.vue:36 src/components/ChatGPT/ChatGPT.vue:37
+#: src/components/ChatGPT/ChatGPT.vue:43 src/components/ChatGPT/ChatGPT.vue:47
 msgid "Clear"
 msgstr "Effacer"
 
@@ -297,7 +308,7 @@ msgstr "Contenu"
 msgid "Core Upgrade"
 msgstr "Mise à jour du core"
 
-#: src/views/dashboard/ServerAnalytic.vue:66
+#: src/views/dashboard/ServerAnalytic.vue:68
 msgid "CPU Status"
 msgstr "État du processeur"
 
@@ -306,7 +317,7 @@ msgstr "État du processeur"
 msgid "CPU:"
 msgstr "CPU :"
 
-#: src/views/domain/DomainAdd.vue:154
+#: src/views/domain/DomainAdd.vue:157
 msgid "Create Another"
 msgstr "Créer un autre"
 
@@ -376,6 +387,24 @@ msgstr "Supprimer l'identifiant : %{id}"
 msgid "Delete site: %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 
+#: src/views/domain/components/Deploy.vue:12
+#: src/views/domain/components/Deploy.vue:13
+msgid "Deploy"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:63
+msgid "Deploy %{conf_name} to %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:40
+msgid "Deploy %{conf_name} to %{node_name} successfully"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:38
+#, fuzzy
+msgid "Deploy successfully"
+msgstr "Sauvegarde réussie"
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:14
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:17
@@ -416,11 +445,12 @@ msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
 msgid "Disabled"
 msgstr "Désactivé"
 
-#: src/views/domain/DomainEdit.vue:163 src/views/domain/DomainList.vue:69
+#: src/views/domain/components/RightSettings.vue:35
+#: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgstr "Désactivé avec succès"
 
-#: src/views/dashboard/ServerAnalytic.vue:98
+#: src/views/dashboard/ServerAnalytic.vue:100
 msgid "Disk IO"
 msgstr "E/S disque"
 
@@ -439,15 +469,22 @@ msgstr "Fournisseur DNS"
 msgid "DNS01"
 msgstr "DNS01"
 
+#: src/views/domain/components/Deploy.vue:21
+#, fuzzy
+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] "Voulez-vous supprimer ce serveur ?"
+msgstr[1] "Voulez-vous supprimer ce serveur ?"
+
 #: src/views/domain/cert/components/ObtainCert.vue:187
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "Voulez-vous désactiver le renouvellement automatique des certificats ?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to disable this site?"
 msgstr "Voulez-vous désactiver ce site ?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to enable this site?"
 msgstr "Voulez-vous activer ce site ?"
 
@@ -481,14 +518,30 @@ msgstr "Téléchargement de la dernière version"
 msgid "Dry run mode enabled"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:2
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
-#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr "Dupliquer"
 
-#: src/views/domain/SiteDuplicate.vue:43
-msgid "Duplicated successfully"
+#: src/views/domain/components/SiteDuplicate.vue:73
+#, fuzzy
+msgid "Duplicate %{conf_name} to %{node_name} successfully"
+msgstr "Dupliqué avec succès"
+
+#: src/views/domain/components/SiteDuplicate.vue:78
+#, fuzzy
+msgid "Duplicate failed"
+msgstr "Dupliquer"
+
+#: src/views/domain/components/SiteDuplicate.vue:71
+#, fuzzy
+msgid "Duplicate successfully"
+msgstr "Dupliqué avec succès"
+
+#: src/views/domain/components/SiteDuplicate.vue:57
+#, fuzzy
+msgid "Duplicate to local successfully"
 msgstr "Dupliqué avec succès"
 
 #: src/views/domain/DomainEdit.vue:5 src/views/domain/DomainEdit.vue:6
@@ -507,28 +560,44 @@ msgstr "Modifier le site"
 msgid "Email (*)"
 msgstr "Email (*)"
 
+#: src/views/domain/components/Deploy.vue:53
+msgid "Enable %{conf_name} in %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:48
+msgid "Enable %{conf_name} in %{node_name} successfully"
+msgstr ""
+
 #: src/views/domain/cert/components/ObtainCert.vue:55
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Échec de l'activation du renouvellement automatique pour %{name}"
 
-#: src/views/domain/DomainAdd.vue:49
+#: src/views/domain/DomainAdd.vue:52
 msgid "Enable failed"
 msgstr "Échec de l'activation"
 
+#: src/views/domain/components/Deploy.vue:46
+#, fuzzy
+msgid "Enable successfully"
+msgstr "Activé avec succès"
+
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:3
 msgid "Enable TLS"
 msgstr "Activer TLS"
 
 #: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:44
-#: src/views/domain/DomainEdit.vue:29 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainEdit.vue:8 src/views/domain/DomainList.vue:10
-#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/components/Deploy.vue:3
+#: src/views/domain/components/Deploy.vue:4
+#: src/views/domain/components/RightSettings.vue:5
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainEdit.vue:8
+#: src/views/domain/DomainList.vue:10 src/views/domain/DomainList.vue:11
+#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgstr "Activé"
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:154
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/components/RightSettings.vue:26
+#: src/views/domain/DomainAdd.vue:49 src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgstr "Activé avec succès"
 
@@ -570,11 +639,13 @@ msgstr "Date d'expiration : %{date}"
 msgid "Export"
 msgstr "Exporter"
 
-#: src/views/domain/DomainEdit.vue:166 src/views/domain/DomainList.vue:73
+#: src/views/domain/components/RightSettings.vue:38
+#: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
-#: src/views/domain/DomainEdit.vue:157 src/views/domain/DomainList.vue:63
+#: src/views/domain/components/RightSettings.vue:29
+#: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
@@ -582,7 +653,7 @@ msgstr "Impossible d'activer %{msg}"
 msgid "Failed to get certificate information"
 msgstr "Échec de l'obtention des informations sur le certificat"
 
-#: src/views/domain/DomainEdit.vue:132
+#: src/views/domain/DomainEdit.vue:133
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
@@ -608,7 +679,7 @@ msgstr "Filtrer"
 msgid "Finished"
 msgstr "Finie"
 
-#: src/views/config/ConfigEdit.vue:86
+#: src/views/config/ConfigEdit.vue:83
 msgid "Format Code"
 msgstr "Code de formatage"
 
@@ -725,12 +796,14 @@ msgstr "Clair"
 msgid "Link Start"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:154
+#: src/views/dashboard/ServerAnalytic.vue:161
 msgid "Load Averages:"
 msgstr "Charges moyennes :"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:5
 #: src/components/EnvIndicator/EnvIndicator.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:4
+#: src/components/NodeSelector/NodeSelector.vue:5
 #, fuzzy
 msgid "Local"
 msgstr "Localisation"
@@ -780,16 +853,16 @@ msgstr "Gérer les sites"
 msgid "Manage Users"
 msgstr "Gérer les utilisateurs"
 
-#: src/views/dashboard/ServerAnalytic.vue:34
+#: src/views/dashboard/ServerAnalytic.vue:36
 msgid "Memory"
 msgstr "Mémoire"
 
-#: src/views/dashboard/ServerAnalytic.vue:31
+#: src/views/dashboard/ServerAnalytic.vue:33
 msgid "Memory and Storage"
 msgstr "Mémoire et stockage"
 
-#: src/components/ChatGPT/ChatGPT.vue:13 src/components/ChatGPT/ChatGPT.vue:14
-#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:20
+#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:19
+#: src/components/ChatGPT/ChatGPT.vue:23 src/components/ChatGPT/ChatGPT.vue:25
 #: src/components/StdDataDisplay/StdCurd.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:26
@@ -799,7 +872,7 @@ msgstr "Mémoire et stockage"
 msgid "Modify"
 msgstr "Modifier"
 
-#: src/views/domain/DomainAdd.vue:151
+#: src/views/domain/DomainAdd.vue:154
 msgid "Modify Config"
 msgstr "Modifier la configuration"
 
@@ -810,25 +883,25 @@ msgstr "Directive multiligne"
 
 #: src/views/cert/Cert.vue:16 src/views/cert/DNSCredential.vue:12
 #: src/views/config/config.ts:8 src/views/domain/cert/ChangeCert.vue:21
-#: src/views/domain/DomainEdit.vue:32 src/views/domain/DomainList.vue:15
-#: src/views/domain/SiteDuplicate.vue:5
-#: src/views/environment/Environment.vue:13
+#: src/views/domain/components/RightSettings.vue:8
+#: src/views/domain/components/SiteDuplicate.vue:5
+#: src/views/domain/DomainList.vue:15 src/views/environment/Environment.vue:13
 msgid "Name"
 msgstr "Nom"
 
-#: src/views/dashboard/ServerAnalytic.vue:76
+#: src/views/dashboard/ServerAnalytic.vue:78
 msgid "Network"
 msgstr "Réseau"
 
-#: src/views/dashboard/ServerAnalytic.vue:50
+#: src/views/dashboard/ServerAnalytic.vue:52
 msgid "Network Statistics"
 msgstr "Statistiques du réseau"
 
-#: src/views/dashboard/ServerAnalytic.vue:54
+#: src/views/dashboard/ServerAnalytic.vue:56
 msgid "Network Total Receive"
 msgstr "Réception totale du réseau"
 
-#: src/views/dashboard/ServerAnalytic.vue:58
+#: src/views/dashboard/ServerAnalytic.vue:60
 msgid "Network Total Send"
 msgstr "Envoi total réseau"
 
@@ -839,7 +912,7 @@ msgstr "Nouvelle version publiée"
 #: src/views/domain/cert/components/ObtainCert.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:13
 #: src/views/domain/cert/components/ObtainCert.vue:21
-#: src/views/domain/DomainAdd.vue:141
+#: src/views/domain/DomainAdd.vue:144
 msgid "Next"
 msgstr "Suivant"
 
@@ -847,7 +920,7 @@ msgstr "Suivant"
 msgid "Nginx Access Log Path"
 msgstr "Chemin du journal d'accès Nginx"
 
-#: src/views/domain/DomainEdit.vue:39
+#: src/views/domain/DomainEdit.vue:32
 msgid "Nginx Configuration Parse Error"
 msgstr "Erreur d'analyse de configuration Nginx"
 
@@ -874,7 +947,7 @@ msgstr "Nginx a été rechargé avec succès"
 msgid "Nginx restarted successfully"
 msgstr "Nginx a redémarré avec succès"
 
-#: src/components/ChatGPT/ChatGPT.vue:38
+#: src/components/ChatGPT/ChatGPT.vue:43
 #: src/components/StdDataDisplay/StdTable.vue:53
 #: src/views/domain/DomainList.vue:27
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:22
@@ -903,24 +976,32 @@ msgstr "Obtenir un certificat"
 msgid "Obtaining certificate"
 msgstr "Obtention du certificat"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:11
 #: src/views/dashboard/Environments.vue:15
 #: src/views/dashboard/Environments.vue:16
 #: src/views/environment/Environment.vue:48
 msgid "Offline"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:44
 #: src/components/StdDataDisplay/StdBatchEdit.vue:8
 #: src/components/StdDataDisplay/StdCurd.vue:28
 #: src/components/StdDataDisplay/StdTable.vue:54
 #: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:190
-#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:28
+#: src/views/domain/components/Deploy.vue:25
+#: src/views/domain/components/RightSettings.vue:47
+#: src/views/domain/DomainList.vue:28
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:207
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:36
 msgid "OK"
 msgstr "OK"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:5
+#: src/components/NodeSelector/NodeSelector.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:9
 #: src/views/dashboard/Environments.vue:14
 #: src/views/dashboard/Environments.vue:15
 #: src/views/environment/Environment.vue:45
@@ -937,10 +1018,20 @@ msgstr "OpenAI"
 msgid "OS"
 msgstr "OS"
 
-#: src/views/dashboard/ServerAnalytic.vue:160
+#: src/views/dashboard/ServerAnalytic.vue:167
 msgid "OS:"
 msgstr "OS :"
 
+#: src/views/domain/components/Deploy.vue:5
+#: src/views/domain/components/Deploy.vue:6
+msgid "Overwrite"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:7
+#: src/views/domain/components/Deploy.vue:8
+msgid "Overwrite exist file"
+msgstr ""
+
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgstr "Paramètres"
@@ -991,7 +1082,7 @@ msgstr ""
 "des informations d'identification ci-dessous pour demander l'API du "
 "fournisseur DNS."
 
-#: src/views/domain/SiteDuplicate.vue:28
+#: src/views/domain/components/SiteDuplicate.vue:32
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
@@ -1011,6 +1102,10 @@ msgstr "Veuillez saisir votre mot de passe !"
 msgid "Please input your username!"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
 
+#: src/views/domain/components/SiteDuplicate.vue:39
+msgid "Please select at least one node!"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:25 src/views/system/Upgrade.vue:26
 #: src/views/system/Upgrade.vue:30 src/views/system/Upgrade.vue:34
 #: src/views/system/Upgrade.vue:38 src/views/system/Upgrade.vue:48
@@ -1044,20 +1139,20 @@ msgstr "Groupe de projet"
 msgid "Provider"
 msgstr "Fournisseur"
 
-#: src/views/dashboard/ServerAnalytic.vue:109
-#: src/views/dashboard/ServerAnalytic.vue:23
+#: src/views/dashboard/ServerAnalytic.vue:111
+#: src/views/dashboard/ServerAnalytic.vue:30
 #, fuzzy
 msgid "Reads"
 msgstr "Lectures"
 
-#: src/views/dashboard/ServerAnalytic.vue:20
-#: src/views/dashboard/ServerAnalytic.vue:80
+#: src/views/dashboard/ServerAnalytic.vue:27
+#: src/views/dashboard/ServerAnalytic.vue:82
 #, fuzzy
 msgid "Receive"
 msgstr "Recevoir"
 
-#: src/components/ChatGPT/ChatGPT.vue:34 src/components/ChatGPT/ChatGPT.vue:35
-#: src/components/ChatGPT/ChatGPT.vue:41 src/components/ChatGPT/ChatGPT.vue:45
+#: src/components/ChatGPT/ChatGPT.vue:39 src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:46 src/components/ChatGPT/ChatGPT.vue:50
 msgid "Regenerate response"
 msgstr "Régénérer la réponse"
 
@@ -1078,8 +1173,8 @@ msgstr "Réinstaller"
 msgid "Release Note"
 msgstr "Note de version"
 
-#: src/components/ChatGPT/ChatGPT.vue:20 src/components/ChatGPT/ChatGPT.vue:21
-#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:30 src/components/ChatGPT/ChatGPT.vue:32
 #: src/components/NginxControl/NginxControl.vue:12
 #: src/components/NginxControl/NginxControl.vue:13
 #: src/components/NginxControl/NginxControl.vue:17
@@ -1122,9 +1217,9 @@ msgstr "Mode d'exécution"
 msgid "Running"
 msgstr "En cours d'éxécution"
 
-#: src/components/ChatGPT/ChatGPT.vue:16 src/components/ChatGPT/ChatGPT.vue:17
-#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:23
-#: src/views/config/ConfigEdit.vue:89 src/views/domain/DomainEdit.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:22
+#: src/components/ChatGPT/ChatGPT.vue:26 src/components/ChatGPT/ChatGPT.vue:28
+#: src/views/config/ConfigEdit.vue:86 src/views/domain/DomainEdit.vue:228
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1140,7 +1235,7 @@ msgstr "Enregistrer"
 msgid "Save Directive"
 msgstr "Enregistrer la directive"
 
-#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:53
+#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:56
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:36
 msgid "Save error %{msg}"
 msgstr "Enregistrer l'erreur %{msg}"
@@ -1154,8 +1249,8 @@ msgstr "Sauvegarde réussie"
 msgid "Save Successfully"
 msgstr "Sauvegarde Réussie"
 
-#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:146
+#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:46
+#: src/views/domain/DomainEdit.vue:147
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 msgid "Saved successfully"
 msgstr "Enregistré avec succès"
@@ -1164,8 +1259,8 @@ msgstr "Enregistré avec succès"
 msgid "Selector"
 msgstr "Sélecteur"
 
-#: src/views/dashboard/ServerAnalytic.vue:21
-#: src/views/dashboard/ServerAnalytic.vue:87
+#: src/views/dashboard/ServerAnalytic.vue:28
+#: src/views/dashboard/ServerAnalytic.vue:89
 msgid "Send"
 msgstr "Envoyer"
 
@@ -1192,7 +1287,7 @@ msgstr "server_name introuvable dans les directives"
 #: src/views/domain/cert/components/AutoCertStepOne.vue:10
 #: src/views/domain/cert/components/AutoCertStepOne.vue:5
 #: src/views/domain/cert/components/AutoCertStepOne.vue:6
-#: src/views/domain/DomainAdd.vue:116
+#: src/views/domain/DomainAdd.vue:119
 msgid "server_name parameter is required"
 msgstr "Le paramètre server_name est obligatoire"
 
@@ -1246,7 +1341,7 @@ msgstr "Statut"
 msgid "Stopped"
 msgstr "Arrêté"
 
-#: src/views/dashboard/ServerAnalytic.vue:43
+#: src/views/dashboard/ServerAnalytic.vue:45
 msgid "Storage"
 msgstr "Stockage"
 
@@ -1254,7 +1349,7 @@ msgstr "Stockage"
 msgid "Subject Name: %{name}"
 msgstr "Nom du sujet : %{name}"
 
-#: src/views/dashboard/ServerAnalytic.vue:38
+#: src/views/dashboard/ServerAnalytic.vue:40
 #, fuzzy
 msgid "Swap"
 msgstr "Échanger"
@@ -1267,6 +1362,10 @@ msgstr "Système"
 msgid "Table"
 msgstr "Tableau"
 
+#: src/views/domain/components/SiteDuplicate.vue:8
+msgid "Target"
+msgstr ""
+
 #: src/routes/index.ts:102 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgstr "Terminal"
@@ -1337,8 +1436,10 @@ msgid "Type"
 msgstr "Type"
 
 #: src/views/cert/Cert.vue:68 src/views/cert/DNSCredential.vue:25
-#: src/views/config/config.ts:28 src/views/domain/DomainList.vue:41
-#: src/views/environment/Environment.vue:55 src/views/user/User.vue:37
+#: src/views/config/config.ts:28
+#: src/views/domain/components/RightSettings.vue:11
+#: src/views/domain/DomainList.vue:41 src/views/environment/Environment.vue:55
+#: src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "Mis à jour le"
 
@@ -1362,7 +1463,7 @@ msgstr "Mise à niveau réussie"
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Mise à jour de Nginx UI, veuillez patienter..."
 
-#: src/views/dashboard/ServerAnalytic.vue:150
+#: src/views/dashboard/ServerAnalytic.vue:157
 msgid "Uptime:"
 msgstr "Disponibilité :"
 
@@ -1370,6 +1471,11 @@ msgstr "Disponibilité :"
 msgid "URL"
 msgstr ""
 
+#: src/components/ChatGPT/ChatGPT.vue:16
+#, fuzzy
+msgid "User"
+msgstr "Nom d'utilisateur"
+
 #: src/views/other/Login.vue:11 src/views/user/User.vue:11
 msgid "Username"
 msgstr "Nom d'utilisateur"
@@ -1406,8 +1512,8 @@ msgstr ""
 "Nous allons supprimer la configuration HTTPChallenge de ce fichier et "
 "recharger le Nginx. Êtes-vous sûr de vouloir continuer?"
 
-#: src/views/dashboard/ServerAnalytic.vue:102
-#: src/views/dashboard/ServerAnalytic.vue:22
+#: src/views/dashboard/ServerAnalytic.vue:104
+#: src/views/dashboard/ServerAnalytic.vue:29
 msgid "Writes"
 msgstr "Écritures"
 

+ 167 - 75
frontend/src/language/messages.pot

@@ -80,7 +80,7 @@ msgstr ""
 msgid "Arch"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:45
 msgid "Are you sure you want to clear the record of chat?"
 msgstr ""
 
@@ -97,6 +97,15 @@ msgstr ""
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 
+#: src/components/ChatGPT/ChatGPT.vue:4
+#: src/components/ChatGPT/ChatGPT.vue:5
+msgid "Ask ChatGPT for Help"
+msgstr ""
+
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "Assistant"
+msgstr ""
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:12
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:16
@@ -142,8 +151,8 @@ msgstr ""
 #: src/views/config/Config.vue:18
 #: src/views/config/Config.vue:28
 #: src/views/config/Config.vue:6
-#: src/views/config/ConfigEdit.vue:83
-#: src/views/domain/DomainEdit.vue:263
+#: src/views/config/ConfigEdit.vue:80
+#: src/views/domain/DomainEdit.vue:225
 #: src/views/nginx_log/NginxLog.vue:161
 msgid "Back"
 msgstr ""
@@ -156,6 +165,7 @@ msgstr ""
 msgid "Base information"
 msgstr ""
 
+#: src/views/domain/components/RightSettings.vue:4
 #: src/views/preference/Preference.vue:5
 msgid "Basic"
 msgstr ""
@@ -181,15 +191,16 @@ msgstr ""
 msgid "CADir"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:17
-#: src/components/ChatGPT/ChatGPT.vue:18
 #: src/components/ChatGPT/ChatGPT.vue:22
-#: src/components/ChatGPT/ChatGPT.vue:24
+#: src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:29
 #: src/components/StdDataDisplay/StdBatchEdit.vue:7
 #: src/components/StdDataDisplay/StdCurd.vue:27
 #: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/views/domain/cert/components/ObtainCert.vue:191
-#: src/views/domain/DomainEdit.vue:176
+#: src/views/domain/components/Deploy.vue:26
+#: src/views/domain/components/RightSettings.vue:48
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:208
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:37
 msgid "Cancel"
@@ -251,10 +262,10 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:31
-#: src/components/ChatGPT/ChatGPT.vue:32
-#: src/components/ChatGPT/ChatGPT.vue:38
-#: src/components/ChatGPT/ChatGPT.vue:42
+#: src/components/ChatGPT/ChatGPT.vue:36
+#: src/components/ChatGPT/ChatGPT.vue:37
+#: src/components/ChatGPT/ChatGPT.vue:43
+#: src/components/ChatGPT/ChatGPT.vue:47
 msgid "Clear"
 msgstr ""
 
@@ -304,7 +315,7 @@ msgstr ""
 msgid "Core Upgrade"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:66
+#: src/views/dashboard/ServerAnalytic.vue:68
 msgid "CPU Status"
 msgstr ""
 
@@ -313,7 +324,7 @@ msgstr ""
 msgid "CPU:"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:154
+#: src/views/domain/DomainAdd.vue:157
 msgid "Create Another"
 msgstr ""
 
@@ -388,6 +399,23 @@ msgstr ""
 msgid "Delete site: %{site_name}"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:12
+#: src/views/domain/components/Deploy.vue:13
+msgid "Deploy"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:63
+msgid "Deploy %{conf_name} to %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:40
+msgid "Deploy %{conf_name} to %{node_name} successfully"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:38
+msgid "Deploy successfully"
+msgstr ""
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:14
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:17
@@ -433,12 +461,12 @@ msgstr ""
 msgid "Disabled"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:163
+#: src/views/domain/components/RightSettings.vue:35
 #: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:98
+#: src/views/dashboard/ServerAnalytic.vue:100
 msgid "Disk IO"
 msgstr ""
 
@@ -458,15 +486,21 @@ msgstr ""
 msgid "DNS01"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:21
+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] ""
+msgstr[1] ""
+
 #: src/views/domain/cert/components/ObtainCert.vue:187
 msgid "Do you want to disable auto-cert renewal?"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to disable this site?"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to enable this site?"
 msgstr ""
 
@@ -498,16 +532,28 @@ msgstr ""
 msgid "Dry run mode enabled"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:2
 #: src/views/domain/DomainList.vue:14
 #: src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16
 #: src/views/domain/DomainList.vue:23
-#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr ""
 
-#: src/views/domain/SiteDuplicate.vue:43
-msgid "Duplicated successfully"
+#: src/views/domain/components/SiteDuplicate.vue:73
+msgid "Duplicate %{conf_name} to %{node_name} successfully"
+msgstr ""
+
+#: src/views/domain/components/SiteDuplicate.vue:78
+msgid "Duplicate failed"
+msgstr ""
+
+#: src/views/domain/components/SiteDuplicate.vue:71
+msgid "Duplicate successfully"
+msgstr ""
+
+#: src/views/domain/components/SiteDuplicate.vue:57
+msgid "Duplicate to local successfully"
 msgstr ""
 
 #: src/views/domain/DomainEdit.vue:5
@@ -528,21 +574,35 @@ msgstr ""
 msgid "Email (*)"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:53
+msgid "Enable %{conf_name} in %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:48
+msgid "Enable %{conf_name} in %{node_name} successfully"
+msgstr ""
+
 #: src/views/domain/cert/components/ObtainCert.vue:55
 msgid "Enable auto-renewal failed for %{name}"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:49
+#: src/views/domain/DomainAdd.vue:52
 msgid "Enable failed"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:46
+msgid "Enable successfully"
+msgstr ""
+
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:3
 msgid "Enable TLS"
 msgstr ""
 
 #: src/views/cert/Cert.vue:44
 #: src/views/domain/cert/ChangeCert.vue:44
-#: src/views/domain/DomainEdit.vue:29
+#: src/views/domain/components/Deploy.vue:3
+#: src/views/domain/components/Deploy.vue:4
+#: src/views/domain/components/RightSettings.vue:5
 #: src/views/domain/DomainEdit.vue:7
 #: src/views/domain/DomainEdit.vue:8
 #: src/views/domain/DomainList.vue:10
@@ -553,8 +613,8 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:46
-#: src/views/domain/DomainEdit.vue:154
+#: src/views/domain/components/RightSettings.vue:26
+#: src/views/domain/DomainAdd.vue:49
 #: src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgstr ""
@@ -600,12 +660,12 @@ msgstr ""
 msgid "Export"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:166
+#: src/views/domain/components/RightSettings.vue:38
 #: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:157
+#: src/views/domain/components/RightSettings.vue:29
 #: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgstr ""
@@ -614,7 +674,7 @@ msgstr ""
 msgid "Failed to get certificate information"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:132
+#: src/views/domain/DomainEdit.vue:133
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 
@@ -640,7 +700,7 @@ msgstr ""
 msgid "Finished"
 msgstr ""
 
-#: src/views/config/ConfigEdit.vue:86
+#: src/views/config/ConfigEdit.vue:83
 msgid "Format Code"
 msgstr ""
 
@@ -760,12 +820,14 @@ msgstr ""
 msgid "Link Start"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:154
+#: src/views/dashboard/ServerAnalytic.vue:161
 msgid "Load Averages:"
 msgstr ""
 
 #: src/components/EnvIndicator/EnvIndicator.vue:5
 #: src/components/EnvIndicator/EnvIndicator.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:4
+#: src/components/NodeSelector/NodeSelector.vue:5
 msgid "Local"
 msgstr ""
 
@@ -810,18 +872,18 @@ msgstr ""
 msgid "Manage Users"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:34
+#: src/views/dashboard/ServerAnalytic.vue:36
 msgid "Memory"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:31
+#: src/views/dashboard/ServerAnalytic.vue:33
 msgid "Memory and Storage"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:13
-#: src/components/ChatGPT/ChatGPT.vue:14
 #: src/components/ChatGPT/ChatGPT.vue:18
-#: src/components/ChatGPT/ChatGPT.vue:20
+#: src/components/ChatGPT/ChatGPT.vue:19
+#: src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:25
 #: src/components/StdDataDisplay/StdCurd.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:26
@@ -831,7 +893,7 @@ msgstr ""
 msgid "Modify"
 msgstr ""
 
-#: src/views/domain/DomainAdd.vue:151
+#: src/views/domain/DomainAdd.vue:154
 msgid "Modify Config"
 msgstr ""
 
@@ -844,26 +906,26 @@ msgstr ""
 #: src/views/cert/DNSCredential.vue:12
 #: src/views/config/config.ts:8
 #: src/views/domain/cert/ChangeCert.vue:21
-#: src/views/domain/DomainEdit.vue:32
+#: src/views/domain/components/RightSettings.vue:8
+#: src/views/domain/components/SiteDuplicate.vue:5
 #: src/views/domain/DomainList.vue:15
-#: src/views/domain/SiteDuplicate.vue:5
 #: src/views/environment/Environment.vue:13
 msgid "Name"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:76
+#: src/views/dashboard/ServerAnalytic.vue:78
 msgid "Network"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:50
+#: src/views/dashboard/ServerAnalytic.vue:52
 msgid "Network Statistics"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:54
+#: src/views/dashboard/ServerAnalytic.vue:56
 msgid "Network Total Receive"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:58
+#: src/views/dashboard/ServerAnalytic.vue:60
 msgid "Network Total Send"
 msgstr ""
 
@@ -874,7 +936,7 @@ msgstr ""
 #: src/views/domain/cert/components/ObtainCert.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:13
 #: src/views/domain/cert/components/ObtainCert.vue:21
-#: src/views/domain/DomainAdd.vue:141
+#: src/views/domain/DomainAdd.vue:144
 msgid "Next"
 msgstr ""
 
@@ -882,7 +944,7 @@ msgstr ""
 msgid "Nginx Access Log Path"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:39
+#: src/views/domain/DomainEdit.vue:32
 msgid "Nginx Configuration Parse Error"
 msgstr ""
 
@@ -910,7 +972,7 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:38
+#: src/components/ChatGPT/ChatGPT.vue:43
 #: src/components/StdDataDisplay/StdTable.vue:53
 #: src/views/domain/DomainList.vue:27
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:22
@@ -940,25 +1002,32 @@ msgstr ""
 msgid "Obtaining certificate"
 msgstr ""
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:11
 #: src/views/dashboard/Environments.vue:15
 #: src/views/dashboard/Environments.vue:16
 #: src/views/environment/Environment.vue:48
 msgid "Offline"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:44
 #: src/components/StdDataDisplay/StdBatchEdit.vue:8
 #: src/components/StdDataDisplay/StdCurd.vue:28
 #: src/components/StdDataDisplay/StdTable.vue:54
 #: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:190
-#: src/views/domain/DomainEdit.vue:175
+#: src/views/domain/components/Deploy.vue:25
+#: src/views/domain/components/RightSettings.vue:47
 #: src/views/domain/DomainList.vue:28
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:207
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:36
 msgid "OK"
 msgstr ""
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:5
+#: src/components/NodeSelector/NodeSelector.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:9
 #: src/views/dashboard/Environments.vue:14
 #: src/views/dashboard/Environments.vue:15
 #: src/views/environment/Environment.vue:45
@@ -977,10 +1046,20 @@ msgstr ""
 msgid "OS"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:160
+#: src/views/dashboard/ServerAnalytic.vue:167
 msgid "OS:"
 msgstr ""
 
+#: src/views/domain/components/Deploy.vue:5
+#: src/views/domain/components/Deploy.vue:6
+msgid "Overwrite"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:7
+#: src/views/domain/components/Deploy.vue:8
+msgid "Overwrite exist file"
+msgstr ""
+
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgstr ""
@@ -1015,7 +1094,7 @@ msgstr ""
 msgid "Please first add credentials in Certification > DNS Credentials, and then select one of the credentials below to request the API of the DNS provider."
 msgstr ""
 
-#: src/views/domain/SiteDuplicate.vue:28
+#: src/views/domain/components/SiteDuplicate.vue:32
 msgid "Please input name, this will be used as the filename of the new configuration!"
 msgstr ""
 
@@ -1033,6 +1112,10 @@ msgstr ""
 msgid "Please input your username!"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:39
+msgid "Please select at least one node!"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:25
 #: src/views/system/Upgrade.vue:26
 #: src/views/system/Upgrade.vue:30
@@ -1071,20 +1154,20 @@ msgstr ""
 msgid "Provider"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:109
-#: src/views/dashboard/ServerAnalytic.vue:23
+#: src/views/dashboard/ServerAnalytic.vue:111
+#: src/views/dashboard/ServerAnalytic.vue:30
 msgid "Reads"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:20
-#: src/views/dashboard/ServerAnalytic.vue:80
+#: src/views/dashboard/ServerAnalytic.vue:27
+#: src/views/dashboard/ServerAnalytic.vue:82
 msgid "Receive"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:34
-#: src/components/ChatGPT/ChatGPT.vue:35
-#: src/components/ChatGPT/ChatGPT.vue:41
-#: src/components/ChatGPT/ChatGPT.vue:45
+#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:46
+#: src/components/ChatGPT/ChatGPT.vue:50
 msgid "Regenerate response"
 msgstr ""
 
@@ -1110,10 +1193,10 @@ msgstr ""
 msgid "Release Note"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:20
-#: src/components/ChatGPT/ChatGPT.vue:21
 #: src/components/ChatGPT/ChatGPT.vue:25
-#: src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:30
+#: src/components/ChatGPT/ChatGPT.vue:32
 #: src/components/NginxControl/NginxControl.vue:12
 #: src/components/NginxControl/NginxControl.vue:13
 #: src/components/NginxControl/NginxControl.vue:17
@@ -1156,12 +1239,12 @@ msgstr ""
 msgid "Running"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:16
-#: src/components/ChatGPT/ChatGPT.vue:17
 #: src/components/ChatGPT/ChatGPT.vue:21
-#: src/components/ChatGPT/ChatGPT.vue:23
-#: src/views/config/ConfigEdit.vue:89
-#: src/views/domain/DomainEdit.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:22
+#: src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:28
+#: src/views/config/ConfigEdit.vue:86
+#: src/views/domain/DomainEdit.vue:228
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1178,7 +1261,7 @@ msgid "Save Directive"
 msgstr ""
 
 #: src/views/config/ConfigEdit.vue:53
-#: src/views/domain/DomainAdd.vue:53
+#: src/views/domain/DomainAdd.vue:56
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:36
 msgid "Save error %{msg}"
 msgstr ""
@@ -1193,8 +1276,8 @@ msgid "Save Successfully"
 msgstr ""
 
 #: src/views/config/ConfigEdit.vue:51
-#: src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:146
+#: src/views/domain/DomainAdd.vue:46
+#: src/views/domain/DomainEdit.vue:147
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 msgid "Saved successfully"
 msgstr ""
@@ -1203,8 +1286,8 @@ msgstr ""
 msgid "Selector"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:21
-#: src/views/dashboard/ServerAnalytic.vue:87
+#: src/views/dashboard/ServerAnalytic.vue:28
+#: src/views/dashboard/ServerAnalytic.vue:89
 msgid "Send"
 msgstr ""
 
@@ -1233,7 +1316,7 @@ msgstr ""
 #: src/views/domain/cert/components/AutoCertStepOne.vue:10
 #: src/views/domain/cert/components/AutoCertStepOne.vue:5
 #: src/views/domain/cert/components/AutoCertStepOne.vue:6
-#: src/views/domain/DomainAdd.vue:116
+#: src/views/domain/DomainAdd.vue:119
 msgid "server_name parameter is required"
 msgstr ""
 
@@ -1292,7 +1375,7 @@ msgstr ""
 msgid "Stopped"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:43
+#: src/views/dashboard/ServerAnalytic.vue:45
 msgid "Storage"
 msgstr ""
 
@@ -1300,7 +1383,7 @@ msgstr ""
 msgid "Subject Name: %{name}"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:38
+#: src/views/dashboard/ServerAnalytic.vue:40
 msgid "Swap"
 msgstr ""
 
@@ -1312,6 +1395,10 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:8
+msgid "Target"
+msgstr ""
+
 #: src/routes/index.ts:102
 #: src/views/pty/Terminal.vue:2
 msgid "Terminal"
@@ -1364,6 +1451,7 @@ msgstr ""
 #: src/views/cert/Cert.vue:68
 #: src/views/cert/DNSCredential.vue:25
 #: src/views/config/config.ts:28
+#: src/views/domain/components/RightSettings.vue:11
 #: src/views/domain/DomainList.vue:41
 #: src/views/environment/Environment.vue:55
 #: src/views/user/User.vue:37
@@ -1395,7 +1483,7 @@ msgstr ""
 msgid "Upgrading Nginx UI, please wait..."
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:150
+#: src/views/dashboard/ServerAnalytic.vue:157
 msgid "Uptime:"
 msgstr ""
 
@@ -1403,6 +1491,10 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "User"
+msgstr ""
+
 #: src/views/other/Login.vue:11
 #: src/views/user/User.vue:11
 msgid "Username"
@@ -1436,8 +1528,8 @@ msgstr ""
 msgid "We will remove the HTTPChallenge configuration from this file and reload the Nginx. Are you sure you want to continue?"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:102
-#: src/views/dashboard/ServerAnalytic.vue:22
+#: src/views/dashboard/ServerAnalytic.vue:104
+#: src/views/dashboard/ServerAnalytic.vue:29
 msgid "Writes"
 msgstr ""
 

File diff suppressed because it is too large
+ 0 - 0
frontend/src/language/translations.json


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


+ 168 - 71
frontend/src/language/zh_CN/app.po

@@ -9,6 +9,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 "Generated-By: easygettext\n"
 "X-Generator: Poedit 3.2.2\n"
 
@@ -81,7 +82,7 @@ msgstr "API Token"
 msgid "Arch"
 msgstr "架构"
 
-#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:45
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "你确定你要清除聊天记录吗?"
 
@@ -98,6 +99,14 @@ msgstr "您确定要删除这条指令?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 
+#: src/components/ChatGPT/ChatGPT.vue:4 src/components/ChatGPT/ChatGPT.vue:5
+msgid "Ask ChatGPT for Help"
+msgstr "与ChatGPT聊天"
+
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "Assistant"
+msgstr "助手"
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:12
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:16
@@ -140,7 +149,7 @@ msgstr "成功启用 %{name} 自动续签"
 
 #: src/views/config/Config.vue:17 src/views/config/Config.vue:18
 #: src/views/config/Config.vue:28 src/views/config/Config.vue:6
-#: src/views/config/ConfigEdit.vue:83 src/views/domain/DomainEdit.vue:263
+#: src/views/config/ConfigEdit.vue:80 src/views/domain/DomainEdit.vue:225
 #: src/views/nginx_log/NginxLog.vue:161
 msgid "Back"
 msgstr "返回"
@@ -153,6 +162,7 @@ msgstr "返回首页"
 msgid "Base information"
 msgstr "基本信息"
 
+#: src/views/domain/components/RightSettings.vue:4
 #: src/views/preference/Preference.vue:5
 msgid "Basic"
 msgstr "基本"
@@ -177,13 +187,14 @@ msgstr "构建基于"
 msgid "CADir"
 msgstr "CADir"
 
-#: src/components/ChatGPT/ChatGPT.vue:17 src/components/ChatGPT/ChatGPT.vue:18
-#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:24
+#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:27 src/components/ChatGPT/ChatGPT.vue:29
 #: src/components/StdDataDisplay/StdBatchEdit.vue:7
 #: src/components/StdDataDisplay/StdCurd.vue:27
 #: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/views/domain/cert/components/ObtainCert.vue:191
-#: src/views/domain/DomainEdit.vue:176
+#: src/views/domain/components/Deploy.vue:26
+#: src/views/domain/components/RightSettings.vue:48
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:208
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:37
 msgid "Cancel"
@@ -241,8 +252,8 @@ msgstr "中国用户:https://ghproxy.com/"
 msgid "Cleaning environment variables"
 msgstr "正在清理环境变量"
 
-#: src/components/ChatGPT/ChatGPT.vue:31 src/components/ChatGPT/ChatGPT.vue:32
-#: src/components/ChatGPT/ChatGPT.vue:38 src/components/ChatGPT/ChatGPT.vue:42
+#: src/components/ChatGPT/ChatGPT.vue:36 src/components/ChatGPT/ChatGPT.vue:37
+#: src/components/ChatGPT/ChatGPT.vue:43 src/components/ChatGPT/ChatGPT.vue:47
 msgid "Clear"
 msgstr "清空"
 
@@ -292,7 +303,7 @@ msgstr "内容"
 msgid "Core Upgrade"
 msgstr "核心升级"
 
-#: src/views/dashboard/ServerAnalytic.vue:66
+#: src/views/dashboard/ServerAnalytic.vue:68
 msgid "CPU Status"
 msgstr "CPU 状态"
 
@@ -301,7 +312,7 @@ msgstr "CPU 状态"
 msgid "CPU:"
 msgstr "CPU:"
 
-#: src/views/domain/DomainAdd.vue:154
+#: src/views/domain/DomainAdd.vue:157
 msgid "Create Another"
 msgstr "再创建一个"
 
@@ -371,6 +382,23 @@ msgstr "删除 ID: %{id}"
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
+#: src/views/domain/components/Deploy.vue:12
+#: src/views/domain/components/Deploy.vue:13
+msgid "Deploy"
+msgstr "部署"
+
+#: src/views/domain/components/Deploy.vue:63
+msgid "Deploy %{conf_name} to %{node_name} failed"
+msgstr "部署%{conf_name}到%{node_name}失败"
+
+#: src/views/domain/components/Deploy.vue:40
+msgid "Deploy %{conf_name} to %{node_name} successfully"
+msgstr "成功地将%{conf_name}部署到%{node_name}。"
+
+#: src/views/domain/components/Deploy.vue:38
+msgid "Deploy successfully"
+msgstr "部署成功"
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:14
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:17
@@ -411,11 +439,12 @@ msgstr "关闭 %{name} 自动续签失败"
 msgid "Disabled"
 msgstr "禁用"
 
-#: src/views/domain/DomainEdit.vue:163 src/views/domain/DomainList.vue:69
+#: src/views/domain/components/RightSettings.vue:35
+#: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgstr "禁用成功"
 
-#: src/views/dashboard/ServerAnalytic.vue:98
+#: src/views/dashboard/ServerAnalytic.vue:100
 msgid "Disk IO"
 msgstr "磁盘 IO"
 
@@ -434,15 +463,20 @@ msgstr "DNS供应商"
 msgid "DNS01"
 msgstr "DNS01"
 
+#: src/views/domain/components/Deploy.vue:21
+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:187
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "你想禁用自动更新证书吗?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to disable this site?"
 msgstr "你想停用这个网站吗?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to enable this site?"
 msgstr "你想启用这个网站吗?"
 
@@ -474,16 +508,28 @@ msgstr "下载最新版本"
 msgid "Dry run mode enabled"
 msgstr "试运行模式已启动"
 
+#: src/views/domain/components/SiteDuplicate.vue:2
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
-#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr "复制"
 
-#: src/views/domain/SiteDuplicate.vue:43
-msgid "Duplicated successfully"
+#: src/views/domain/components/SiteDuplicate.vue:73
+msgid "Duplicate %{conf_name} to %{node_name} successfully"
+msgstr "成功地将%{conf_name}复制到%{node_name}。"
+
+#: src/views/domain/components/SiteDuplicate.vue:78
+msgid "Duplicate failed"
+msgstr "复制失败"
+
+#: src/views/domain/components/SiteDuplicate.vue:71
+msgid "Duplicate successfully"
 msgstr "复制成功"
 
+#: src/views/domain/components/SiteDuplicate.vue:57
+msgid "Duplicate to local successfully"
+msgstr "成功复制到本地"
+
 #: src/views/domain/DomainEdit.vue:5 src/views/domain/DomainEdit.vue:6
 msgid "Edit %{n}"
 msgstr "编辑 %{n}"
@@ -500,28 +546,43 @@ msgstr "编辑站点"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 
+#: src/views/domain/components/Deploy.vue:53
+msgid "Enable %{conf_name} in %{node_name} failed"
+msgstr "在%{node_name}中启用%{conf_name}失败"
+
+#: src/views/domain/components/Deploy.vue:48
+msgid "Enable %{conf_name} in %{node_name} successfully"
+msgstr "成功启用%{node_name}中的%{conf_name}。"
+
 #: src/views/domain/cert/components/ObtainCert.vue:55
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "启用 %{name} 自动续签失败"
 
-#: src/views/domain/DomainAdd.vue:49
+#: src/views/domain/DomainAdd.vue:52
 msgid "Enable failed"
 msgstr "启用失败"
 
+#: src/views/domain/components/Deploy.vue:46
+msgid "Enable successfully"
+msgstr "启用成功"
+
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:3
 msgid "Enable TLS"
 msgstr "启用 TLS"
 
 #: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:44
-#: src/views/domain/DomainEdit.vue:29 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainEdit.vue:8 src/views/domain/DomainList.vue:10
-#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/components/Deploy.vue:3
+#: src/views/domain/components/Deploy.vue:4
+#: src/views/domain/components/RightSettings.vue:5
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainEdit.vue:8
+#: src/views/domain/DomainList.vue:10 src/views/domain/DomainList.vue:11
+#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgstr "启用"
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:154
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/components/RightSettings.vue:26
+#: src/views/domain/DomainAdd.vue:49 src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgstr "启用成功"
 
@@ -562,11 +623,13 @@ msgstr "过期时间: %{date}"
 msgid "Export"
 msgstr "导出"
 
-#: src/views/domain/DomainEdit.vue:166 src/views/domain/DomainList.vue:73
+#: src/views/domain/components/RightSettings.vue:38
+#: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 
-#: src/views/domain/DomainEdit.vue:157 src/views/domain/DomainList.vue:63
+#: src/views/domain/components/RightSettings.vue:29
+#: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 
@@ -574,7 +637,7 @@ msgstr "启用失败 %{msg}"
 msgid "Failed to get certificate information"
 msgstr "获取证书信息失败"
 
-#: src/views/domain/DomainEdit.vue:132
+#: src/views/domain/DomainEdit.vue:133
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "保存失败,在配置中检测到语法错误。"
 
@@ -598,7 +661,7 @@ msgstr "过滤"
 msgid "Finished"
 msgstr "完成"
 
-#: src/views/config/ConfigEdit.vue:86
+#: src/views/config/ConfigEdit.vue:83
 msgid "Format Code"
 msgstr "代码格式化"
 
@@ -715,12 +778,14 @@ msgstr "浅色"
 msgid "Link Start"
 msgstr "链接"
 
-#: src/views/dashboard/ServerAnalytic.vue:154
+#: src/views/dashboard/ServerAnalytic.vue:161
 msgid "Load Averages:"
 msgstr "系统负载:"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:5
 #: src/components/EnvIndicator/EnvIndicator.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:4
+#: src/components/NodeSelector/NodeSelector.vue:5
 msgid "Local"
 msgstr "本地"
 
@@ -766,16 +831,16 @@ msgstr "网站管理"
 msgid "Manage Users"
 msgstr "用户管理"
 
-#: src/views/dashboard/ServerAnalytic.vue:34
+#: src/views/dashboard/ServerAnalytic.vue:36
 msgid "Memory"
 msgstr "内存"
 
-#: src/views/dashboard/ServerAnalytic.vue:31
+#: src/views/dashboard/ServerAnalytic.vue:33
 msgid "Memory and Storage"
 msgstr "内存与存储"
 
-#: src/components/ChatGPT/ChatGPT.vue:13 src/components/ChatGPT/ChatGPT.vue:14
-#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:20
+#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:19
+#: src/components/ChatGPT/ChatGPT.vue:23 src/components/ChatGPT/ChatGPT.vue:25
 #: src/components/StdDataDisplay/StdCurd.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:26
@@ -785,7 +850,7 @@ msgstr "内存与存储"
 msgid "Modify"
 msgstr "修改"
 
-#: src/views/domain/DomainAdd.vue:151
+#: src/views/domain/DomainAdd.vue:154
 msgid "Modify Config"
 msgstr "修改配置文件"
 
@@ -796,25 +861,25 @@ msgstr "单行指令"
 
 #: src/views/cert/Cert.vue:16 src/views/cert/DNSCredential.vue:12
 #: src/views/config/config.ts:8 src/views/domain/cert/ChangeCert.vue:21
-#: src/views/domain/DomainEdit.vue:32 src/views/domain/DomainList.vue:15
-#: src/views/domain/SiteDuplicate.vue:5
-#: src/views/environment/Environment.vue:13
+#: src/views/domain/components/RightSettings.vue:8
+#: src/views/domain/components/SiteDuplicate.vue:5
+#: src/views/domain/DomainList.vue:15 src/views/environment/Environment.vue:13
 msgid "Name"
 msgstr "名称"
 
-#: src/views/dashboard/ServerAnalytic.vue:76
+#: src/views/dashboard/ServerAnalytic.vue:78
 msgid "Network"
 msgstr "网络"
 
-#: src/views/dashboard/ServerAnalytic.vue:50
+#: src/views/dashboard/ServerAnalytic.vue:52
 msgid "Network Statistics"
 msgstr "流量统计"
 
-#: src/views/dashboard/ServerAnalytic.vue:54
+#: src/views/dashboard/ServerAnalytic.vue:56
 msgid "Network Total Receive"
 msgstr "下载流量"
 
-#: src/views/dashboard/ServerAnalytic.vue:58
+#: src/views/dashboard/ServerAnalytic.vue:60
 msgid "Network Total Send"
 msgstr "上传流量"
 
@@ -825,7 +890,7 @@ msgstr "新版本发布"
 #: src/views/domain/cert/components/ObtainCert.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:13
 #: src/views/domain/cert/components/ObtainCert.vue:21
-#: src/views/domain/DomainAdd.vue:141
+#: src/views/domain/DomainAdd.vue:144
 msgid "Next"
 msgstr "下一步"
 
@@ -833,7 +898,7 @@ msgstr "下一步"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 访问日志路径"
 
-#: src/views/domain/DomainEdit.vue:39
+#: src/views/domain/DomainEdit.vue:32
 msgid "Nginx Configuration Parse Error"
 msgstr "Nginx 配置解析错误"
 
@@ -860,7 +925,7 @@ msgstr "Nginx 重载成功"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重启成功"
 
-#: src/components/ChatGPT/ChatGPT.vue:38
+#: src/components/ChatGPT/ChatGPT.vue:43
 #: src/components/StdDataDisplay/StdTable.vue:53
 #: src/views/domain/DomainList.vue:27
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:22
@@ -889,24 +954,32 @@ msgstr "获取证书"
 msgid "Obtaining certificate"
 msgstr "正在获取证书"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:11
 #: src/views/dashboard/Environments.vue:15
 #: src/views/dashboard/Environments.vue:16
 #: src/views/environment/Environment.vue:48
 msgid "Offline"
 msgstr "离线"
 
-#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:44
 #: src/components/StdDataDisplay/StdBatchEdit.vue:8
 #: src/components/StdDataDisplay/StdCurd.vue:28
 #: src/components/StdDataDisplay/StdTable.vue:54
 #: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:190
-#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:28
+#: src/views/domain/components/Deploy.vue:25
+#: src/views/domain/components/RightSettings.vue:47
+#: src/views/domain/DomainList.vue:28
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:207
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:36
 msgid "OK"
 msgstr "确定"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:5
+#: src/components/NodeSelector/NodeSelector.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:9
 #: src/views/dashboard/Environments.vue:14
 #: src/views/dashboard/Environments.vue:15
 #: src/views/environment/Environment.vue:45
@@ -923,10 +996,20 @@ msgstr "OpenAI"
 msgid "OS"
 msgstr "OS"
 
-#: src/views/dashboard/ServerAnalytic.vue:160
+#: src/views/dashboard/ServerAnalytic.vue:167
 msgid "OS:"
 msgstr "OS:"
 
+#: src/views/domain/components/Deploy.vue:5
+#: src/views/domain/components/Deploy.vue:6
+msgid "Overwrite"
+msgstr "覆盖"
+
+#: src/views/domain/components/Deploy.vue:7
+#: src/views/domain/components/Deploy.vue:8
+msgid "Overwrite exist file"
+msgstr "覆盖现有文件"
+
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgstr "参数"
@@ -972,7 +1055,7 @@ msgstr ""
 "请首先在 “证书”>”DNS凭证 \"中添加凭证,然后在下方选择一个凭证,请求DNS提供商"
 "的API。"
 
-#: src/views/domain/SiteDuplicate.vue:28
+#: src/views/domain/components/SiteDuplicate.vue:32
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
@@ -990,6 +1073,10 @@ msgstr "请输入您的密码!"
 msgid "Please input your username!"
 msgstr "请输入您的用户名!"
 
+#: src/views/domain/components/SiteDuplicate.vue:39
+msgid "Please select at least one node!"
+msgstr "请至少选择一个节点!"
+
 #: src/views/system/Upgrade.vue:25 src/views/system/Upgrade.vue:26
 #: src/views/system/Upgrade.vue:30 src/views/system/Upgrade.vue:34
 #: src/views/system/Upgrade.vue:38 src/views/system/Upgrade.vue:48
@@ -1022,18 +1109,18 @@ msgstr "项目团队"
 msgid "Provider"
 msgstr "提供商"
 
-#: src/views/dashboard/ServerAnalytic.vue:109
-#: src/views/dashboard/ServerAnalytic.vue:23
+#: src/views/dashboard/ServerAnalytic.vue:111
+#: src/views/dashboard/ServerAnalytic.vue:30
 msgid "Reads"
 msgstr "读"
 
-#: src/views/dashboard/ServerAnalytic.vue:20
-#: src/views/dashboard/ServerAnalytic.vue:80
+#: src/views/dashboard/ServerAnalytic.vue:27
+#: src/views/dashboard/ServerAnalytic.vue:82
 msgid "Receive"
 msgstr "下载"
 
-#: src/components/ChatGPT/ChatGPT.vue:34 src/components/ChatGPT/ChatGPT.vue:35
-#: src/components/ChatGPT/ChatGPT.vue:41 src/components/ChatGPT/ChatGPT.vue:45
+#: src/components/ChatGPT/ChatGPT.vue:39 src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:46 src/components/ChatGPT/ChatGPT.vue:50
 msgid "Regenerate response"
 msgstr "重新生成响应"
 
@@ -1054,8 +1141,8 @@ msgstr "重新安装"
 msgid "Release Note"
 msgstr "发行日志"
 
-#: src/components/ChatGPT/ChatGPT.vue:20 src/components/ChatGPT/ChatGPT.vue:21
-#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:30 src/components/ChatGPT/ChatGPT.vue:32
 #: src/components/NginxControl/NginxControl.vue:12
 #: src/components/NginxControl/NginxControl.vue:13
 #: src/components/NginxControl/NginxControl.vue:17
@@ -1098,9 +1185,9 @@ msgstr "运行模式"
 msgid "Running"
 msgstr "运行中"
 
-#: src/components/ChatGPT/ChatGPT.vue:16 src/components/ChatGPT/ChatGPT.vue:17
-#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:23
-#: src/views/config/ConfigEdit.vue:89 src/views/domain/DomainEdit.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:22
+#: src/components/ChatGPT/ChatGPT.vue:26 src/components/ChatGPT/ChatGPT.vue:28
+#: src/views/config/ConfigEdit.vue:86 src/views/domain/DomainEdit.vue:228
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1116,7 +1203,7 @@ msgstr "保存"
 msgid "Save Directive"
 msgstr "保存指令"
 
-#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:53
+#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:56
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:36
 msgid "Save error %{msg}"
 msgstr "保存错误 %{msg}"
@@ -1130,8 +1217,8 @@ msgstr "保存成功"
 msgid "Save Successfully"
 msgstr "保存成功"
 
-#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:146
+#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:46
+#: src/views/domain/DomainEdit.vue:147
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 msgid "Saved successfully"
 msgstr "保存成功"
@@ -1140,8 +1227,8 @@ msgstr "保存成功"
 msgid "Selector"
 msgstr "选择器"
 
-#: src/views/dashboard/ServerAnalytic.vue:21
-#: src/views/dashboard/ServerAnalytic.vue:87
+#: src/views/dashboard/ServerAnalytic.vue:28
+#: src/views/dashboard/ServerAnalytic.vue:89
 msgid "Send"
 msgstr "上传"
 
@@ -1168,7 +1255,7 @@ msgstr "未在指令集合中找到 server_name"
 #: src/views/domain/cert/components/AutoCertStepOne.vue:10
 #: src/views/domain/cert/components/AutoCertStepOne.vue:5
 #: src/views/domain/cert/components/AutoCertStepOne.vue:6
-#: src/views/domain/DomainAdd.vue:116
+#: src/views/domain/DomainAdd.vue:119
 msgid "server_name parameter is required"
 msgstr "必须为 server_name 指令指明参数"
 
@@ -1221,7 +1308,7 @@ msgstr "状态"
 msgid "Stopped"
 msgstr "已停止"
 
-#: src/views/dashboard/ServerAnalytic.vue:43
+#: src/views/dashboard/ServerAnalytic.vue:45
 msgid "Storage"
 msgstr "存储"
 
@@ -1229,7 +1316,7 @@ msgstr "存储"
 msgid "Subject Name: %{name}"
 msgstr "主体名称: %{name}"
 
-#: src/views/dashboard/ServerAnalytic.vue:38
+#: src/views/dashboard/ServerAnalytic.vue:40
 msgid "Swap"
 msgstr "Swap"
 
@@ -1241,6 +1328,10 @@ msgstr "系统"
 msgid "Table"
 msgstr "列表"
 
+#: src/views/domain/components/SiteDuplicate.vue:8
+msgid "Target"
+msgstr "目标"
+
 #: src/routes/index.ts:102 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgstr "终端"
@@ -1301,8 +1392,10 @@ msgid "Type"
 msgstr "类型"
 
 #: src/views/cert/Cert.vue:68 src/views/cert/DNSCredential.vue:25
-#: src/views/config/config.ts:28 src/views/domain/DomainList.vue:41
-#: src/views/environment/Environment.vue:55 src/views/user/User.vue:37
+#: src/views/config/config.ts:28
+#: src/views/domain/components/RightSettings.vue:11
+#: src/views/domain/DomainList.vue:41 src/views/environment/Environment.vue:55
+#: src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "修改时间"
 
@@ -1326,7 +1419,7 @@ msgstr "升级成功"
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "正在升级Nginx UI,请等待..."
 
-#: src/views/dashboard/ServerAnalytic.vue:150
+#: src/views/dashboard/ServerAnalytic.vue:157
 msgid "Uptime:"
 msgstr "运行时间:"
 
@@ -1334,6 +1427,10 @@ msgstr "运行时间:"
 msgid "URL"
 msgstr "URL"
 
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "User"
+msgstr "用户"
+
 #: src/views/other/Login.vue:11 src/views/user/User.vue:11
 msgid "Username"
 msgstr "用户名"
@@ -1369,8 +1466,8 @@ msgid ""
 msgstr ""
 "我们将从这个文件中删除HTTPChallenge的配置,并重新加载Nginx。你确定要继续吗?"
 
-#: src/views/dashboard/ServerAnalytic.vue:102
-#: src/views/dashboard/ServerAnalytic.vue:22
+#: src/views/dashboard/ServerAnalytic.vue:104
+#: src/views/dashboard/ServerAnalytic.vue:29
 msgid "Writes"
 msgstr "写"
 

+ 177 - 71
frontend/src/language/zh_TW/app.po

@@ -82,7 +82,7 @@ msgstr "API 令牌"
 msgid "Arch"
 msgstr "架搆"
 
-#: src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:45
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "您確定要清除聊天記錄嗎?"
 
@@ -99,6 +99,15 @@ msgstr "您確定要刪除這條指令?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 
+#: src/components/ChatGPT/ChatGPT.vue:4 src/components/ChatGPT/ChatGPT.vue:5
+#, fuzzy
+msgid "Ask ChatGPT for Help"
+msgstr "ChatGPT模型"
+
+#: src/components/ChatGPT/ChatGPT.vue:16
+msgid "Assistant"
+msgstr ""
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:12
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:16
@@ -141,7 +150,7 @@ msgstr "已啟用 %{name} 自動續簽"
 
 #: src/views/config/Config.vue:17 src/views/config/Config.vue:18
 #: src/views/config/Config.vue:28 src/views/config/Config.vue:6
-#: src/views/config/ConfigEdit.vue:83 src/views/domain/DomainEdit.vue:263
+#: src/views/config/ConfigEdit.vue:80 src/views/domain/DomainEdit.vue:225
 #: src/views/nginx_log/NginxLog.vue:161
 msgid "Back"
 msgstr "返回"
@@ -154,6 +163,7 @@ msgstr "回到首頁"
 msgid "Base information"
 msgstr "基本訊息"
 
+#: src/views/domain/components/RightSettings.vue:4
 #: src/views/preference/Preference.vue:5
 msgid "Basic"
 msgstr "基本"
@@ -178,13 +188,14 @@ msgstr "構建基於"
 msgid "CADir"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:17 src/components/ChatGPT/ChatGPT.vue:18
-#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:24
+#: src/components/ChatGPT/ChatGPT.vue:22 src/components/ChatGPT/ChatGPT.vue:23
+#: src/components/ChatGPT/ChatGPT.vue:27 src/components/ChatGPT/ChatGPT.vue:29
 #: src/components/StdDataDisplay/StdBatchEdit.vue:7
 #: src/components/StdDataDisplay/StdCurd.vue:27
 #: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/views/domain/cert/components/ObtainCert.vue:191
-#: src/views/domain/DomainEdit.vue:176
+#: src/views/domain/components/Deploy.vue:26
+#: src/views/domain/components/RightSettings.vue:48
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:208
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:37
 msgid "Cancel"
@@ -242,8 +253,8 @@ msgstr "中國用戶:https://ghproxy.com/"
 msgid "Cleaning environment variables"
 msgstr "清理環境變量"
 
-#: src/components/ChatGPT/ChatGPT.vue:31 src/components/ChatGPT/ChatGPT.vue:32
-#: src/components/ChatGPT/ChatGPT.vue:38 src/components/ChatGPT/ChatGPT.vue:42
+#: src/components/ChatGPT/ChatGPT.vue:36 src/components/ChatGPT/ChatGPT.vue:37
+#: src/components/ChatGPT/ChatGPT.vue:43 src/components/ChatGPT/ChatGPT.vue:47
 msgid "Clear"
 msgstr "清除"
 
@@ -293,7 +304,7 @@ msgstr "內容"
 msgid "Core Upgrade"
 msgstr "核心升級"
 
-#: src/views/dashboard/ServerAnalytic.vue:66
+#: src/views/dashboard/ServerAnalytic.vue:68
 msgid "CPU Status"
 msgstr "中央處理器狀態"
 
@@ -302,7 +313,7 @@ msgstr "中央處理器狀態"
 msgid "CPU:"
 msgstr "中央處理器:"
 
-#: src/views/domain/DomainAdd.vue:154
+#: src/views/domain/DomainAdd.vue:157
 msgid "Create Another"
 msgstr "再創建一個"
 
@@ -372,6 +383,24 @@ msgstr "刪除 ID: %{id}"
 msgid "Delete site: %{site_name}"
 msgstr "刪除站點:%{site_name}"
 
+#: src/views/domain/components/Deploy.vue:12
+#: src/views/domain/components/Deploy.vue:13
+msgid "Deploy"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:63
+msgid "Deploy %{conf_name} to %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:40
+msgid "Deploy %{conf_name} to %{node_name} successfully"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:38
+#, fuzzy
+msgid "Deploy successfully"
+msgstr "保存成功"
+
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:13
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:14
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:17
@@ -412,11 +441,12 @@ msgstr "關閉 %{name} 自動續簽失敗"
 msgid "Disabled"
 msgstr "禁用"
 
-#: src/views/domain/DomainEdit.vue:163 src/views/domain/DomainList.vue:69
+#: src/views/domain/components/RightSettings.vue:35
+#: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgstr "禁用成功"
 
-#: src/views/dashboard/ServerAnalytic.vue:98
+#: src/views/dashboard/ServerAnalytic.vue:100
 msgid "Disk IO"
 msgstr "磁碟 IO"
 
@@ -435,15 +465,22 @@ msgstr "DNS 供應商"
 msgid "DNS01"
 msgstr "DNS01"
 
+#: src/views/domain/components/Deploy.vue:21
+#, fuzzy
+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] "您要刪除此服務器嗎?"
+msgstr[1] "您要刪除此服務器嗎?"
+
 #: src/views/domain/cert/components/ObtainCert.vue:187
 msgid "Do you want to disable auto-cert renewal?"
 msgstr "您要禁用自動證書續訂嗎?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to disable this site?"
 msgstr "你想禁用這個網站嗎?"
 
-#: src/views/domain/DomainEdit.vue:172
+#: src/views/domain/components/RightSettings.vue:44
 msgid "Do you want to enable this site?"
 msgstr "您要啟用此站點嗎?"
 
@@ -475,14 +512,30 @@ msgstr "正在下載最新版本"
 msgid "Dry run mode enabled"
 msgstr ""
 
+#: src/views/domain/components/SiteDuplicate.vue:2
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
-#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr "複製"
 
-#: src/views/domain/SiteDuplicate.vue:43
-msgid "Duplicated successfully"
+#: src/views/domain/components/SiteDuplicate.vue:73
+#, fuzzy
+msgid "Duplicate %{conf_name} to %{node_name} successfully"
+msgstr "複製成功"
+
+#: src/views/domain/components/SiteDuplicate.vue:78
+#, fuzzy
+msgid "Duplicate failed"
+msgstr "複製"
+
+#: src/views/domain/components/SiteDuplicate.vue:71
+#, fuzzy
+msgid "Duplicate successfully"
+msgstr "複製成功"
+
+#: src/views/domain/components/SiteDuplicate.vue:57
+#, fuzzy
+msgid "Duplicate to local successfully"
 msgstr "複製成功"
 
 #: src/views/domain/DomainEdit.vue:5 src/views/domain/DomainEdit.vue:6
@@ -501,28 +554,44 @@ msgstr "編輯站點"
 msgid "Email (*)"
 msgstr "郵箱 (*)"
 
+#: src/views/domain/components/Deploy.vue:53
+msgid "Enable %{conf_name} in %{node_name} failed"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:48
+msgid "Enable %{conf_name} in %{node_name} successfully"
+msgstr ""
+
 #: src/views/domain/cert/components/ObtainCert.vue:55
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "啟用 %{name} 自動續簽失敗"
 
-#: src/views/domain/DomainAdd.vue:49
+#: src/views/domain/DomainAdd.vue:52
 msgid "Enable failed"
 msgstr "啟用失敗"
 
+#: src/views/domain/components/Deploy.vue:46
+#, fuzzy
+msgid "Enable successfully"
+msgstr "啟用成功"
+
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:3
 msgid "Enable TLS"
 msgstr "啟用 TLS"
 
 #: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:44
-#: src/views/domain/DomainEdit.vue:29 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainEdit.vue:8 src/views/domain/DomainList.vue:10
-#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/components/Deploy.vue:3
+#: src/views/domain/components/Deploy.vue:4
+#: src/views/domain/components/RightSettings.vue:5
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainEdit.vue:8
+#: src/views/domain/DomainList.vue:10 src/views/domain/DomainList.vue:11
+#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgstr "啟用"
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:154
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/components/RightSettings.vue:26
+#: src/views/domain/DomainAdd.vue:49 src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgstr "啟用成功"
 
@@ -564,11 +633,13 @@ msgstr "過期時間: %{date}"
 msgid "Export"
 msgstr "導出"
 
-#: src/views/domain/DomainEdit.vue:166 src/views/domain/DomainList.vue:73
+#: src/views/domain/components/RightSettings.vue:38
+#: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgstr "禁用失敗 %{msg}"
 
-#: src/views/domain/DomainEdit.vue:157 src/views/domain/DomainList.vue:63
+#: src/views/domain/components/RightSettings.vue:29
+#: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgstr "啟用失敗 %{msg}"
 
@@ -576,7 +647,7 @@ msgstr "啟用失敗 %{msg}"
 msgid "Failed to get certificate information"
 msgstr "獲取證書信息失敗"
 
-#: src/views/domain/DomainEdit.vue:132
+#: src/views/domain/DomainEdit.vue:133
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "保存失敗,在配置中檢測到語法錯誤。"
 
@@ -600,7 +671,7 @@ msgstr "篩選"
 msgid "Finished"
 msgstr "完成"
 
-#: src/views/config/ConfigEdit.vue:86
+#: src/views/config/ConfigEdit.vue:83
 msgid "Format Code"
 msgstr "格式化代碼"
 
@@ -717,12 +788,14 @@ msgstr "淺色"
 msgid "Link Start"
 msgstr ""
 
-#: src/views/dashboard/ServerAnalytic.vue:154
+#: src/views/dashboard/ServerAnalytic.vue:161
 msgid "Load Averages:"
 msgstr "系統負載:"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:5
 #: src/components/EnvIndicator/EnvIndicator.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:4
+#: src/components/NodeSelector/NodeSelector.vue:5
 #, fuzzy
 msgid "Local"
 msgstr "Location"
@@ -769,16 +842,16 @@ msgstr "網站管理"
 msgid "Manage Users"
 msgstr "使用者管理"
 
-#: src/views/dashboard/ServerAnalytic.vue:34
+#: src/views/dashboard/ServerAnalytic.vue:36
 msgid "Memory"
 msgstr "記憶體"
 
-#: src/views/dashboard/ServerAnalytic.vue:31
+#: src/views/dashboard/ServerAnalytic.vue:33
 msgid "Memory and Storage"
 msgstr "記憶體和存儲"
 
-#: src/components/ChatGPT/ChatGPT.vue:13 src/components/ChatGPT/ChatGPT.vue:14
-#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:20
+#: src/components/ChatGPT/ChatGPT.vue:18 src/components/ChatGPT/ChatGPT.vue:19
+#: src/components/ChatGPT/ChatGPT.vue:23 src/components/ChatGPT/ChatGPT.vue:25
 #: src/components/StdDataDisplay/StdCurd.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:25
 #: src/components/StdDataDisplay/StdTable.vue:26
@@ -788,7 +861,7 @@ msgstr "記憶體和存儲"
 msgid "Modify"
 msgstr "修改"
 
-#: src/views/domain/DomainAdd.vue:151
+#: src/views/domain/DomainAdd.vue:154
 msgid "Modify Config"
 msgstr "修改配置"
 
@@ -799,25 +872,25 @@ msgstr "多行指令"
 
 #: src/views/cert/Cert.vue:16 src/views/cert/DNSCredential.vue:12
 #: src/views/config/config.ts:8 src/views/domain/cert/ChangeCert.vue:21
-#: src/views/domain/DomainEdit.vue:32 src/views/domain/DomainList.vue:15
-#: src/views/domain/SiteDuplicate.vue:5
-#: src/views/environment/Environment.vue:13
+#: src/views/domain/components/RightSettings.vue:8
+#: src/views/domain/components/SiteDuplicate.vue:5
+#: src/views/domain/DomainList.vue:15 src/views/environment/Environment.vue:13
 msgid "Name"
 msgstr "名稱"
 
-#: src/views/dashboard/ServerAnalytic.vue:76
+#: src/views/dashboard/ServerAnalytic.vue:78
 msgid "Network"
 msgstr "網路"
 
-#: src/views/dashboard/ServerAnalytic.vue:50
+#: src/views/dashboard/ServerAnalytic.vue:52
 msgid "Network Statistics"
 msgstr "網路統計"
 
-#: src/views/dashboard/ServerAnalytic.vue:54
+#: src/views/dashboard/ServerAnalytic.vue:56
 msgid "Network Total Receive"
 msgstr "下載流量"
 
-#: src/views/dashboard/ServerAnalytic.vue:58
+#: src/views/dashboard/ServerAnalytic.vue:60
 msgid "Network Total Send"
 msgstr "上傳流量"
 
@@ -828,7 +901,7 @@ msgstr "新版本發布"
 #: src/views/domain/cert/components/ObtainCert.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:13
 #: src/views/domain/cert/components/ObtainCert.vue:21
-#: src/views/domain/DomainAdd.vue:141
+#: src/views/domain/DomainAdd.vue:144
 msgid "Next"
 msgstr "下一步"
 
@@ -836,7 +909,7 @@ msgstr "下一步"
 msgid "Nginx Access Log Path"
 msgstr "Nginx 訪問日誌路徑"
 
-#: src/views/domain/DomainEdit.vue:39
+#: src/views/domain/DomainEdit.vue:32
 msgid "Nginx Configuration Parse Error"
 msgstr "Nginx 配置解析錯誤"
 
@@ -863,7 +936,7 @@ msgstr "Nginx 重載成功"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重啟成功"
 
-#: src/components/ChatGPT/ChatGPT.vue:38
+#: src/components/ChatGPT/ChatGPT.vue:43
 #: src/components/StdDataDisplay/StdTable.vue:53
 #: src/views/domain/DomainList.vue:27
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:22
@@ -892,24 +965,32 @@ msgstr "取得證書"
 msgid "Obtaining certificate"
 msgstr "正在獲取證書"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:11
 #: src/views/dashboard/Environments.vue:15
 #: src/views/dashboard/Environments.vue:16
 #: src/views/environment/Environment.vue:48
 msgid "Offline"
 msgstr ""
 
-#: src/components/ChatGPT/ChatGPT.vue:39
+#: src/components/ChatGPT/ChatGPT.vue:44
 #: src/components/StdDataDisplay/StdBatchEdit.vue:8
 #: src/components/StdDataDisplay/StdCurd.vue:28
 #: src/components/StdDataDisplay/StdTable.vue:54
 #: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/views/domain/cert/components/ObtainCert.vue:190
-#: src/views/domain/DomainEdit.vue:175 src/views/domain/DomainList.vue:28
+#: src/views/domain/components/Deploy.vue:25
+#: src/views/domain/components/RightSettings.vue:47
+#: src/views/domain/DomainList.vue:28
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:207
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:36
 msgid "OK"
 msgstr "確定"
 
+#: src/components/NodeSelector/NodeSelector.vue:10
+#: src/components/NodeSelector/NodeSelector.vue:5
+#: src/components/NodeSelector/NodeSelector.vue:6
+#: src/components/NodeSelector/NodeSelector.vue:9
 #: src/views/dashboard/Environments.vue:14
 #: src/views/dashboard/Environments.vue:15
 #: src/views/environment/Environment.vue:45
@@ -926,10 +1007,20 @@ msgstr "OpenAI"
 msgid "OS"
 msgstr "作業系統"
 
-#: src/views/dashboard/ServerAnalytic.vue:160
+#: src/views/dashboard/ServerAnalytic.vue:167
 msgid "OS:"
 msgstr "作業系統:"
 
+#: src/views/domain/components/Deploy.vue:5
+#: src/views/domain/components/Deploy.vue:6
+msgid "Overwrite"
+msgstr ""
+
+#: src/views/domain/components/Deploy.vue:7
+#: src/views/domain/components/Deploy.vue:8
+msgid "Overwrite exist file"
+msgstr ""
+
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgstr "參數"
@@ -975,7 +1066,7 @@ msgstr ""
 "請先在 Certification > DNS Credentials 中添加憑據,然後選擇以下憑據之一以請"
 "求 DNS 提供商的 API。"
 
-#: src/views/domain/SiteDuplicate.vue:28
+#: src/views/domain/components/SiteDuplicate.vue:32
 msgid ""
 "Please input name, this will be used as the filename of the new "
 "configuration!"
@@ -993,6 +1084,10 @@ msgstr "請輸入您的密碼!"
 msgid "Please input your username!"
 msgstr "請輸入您的使用者名稱!"
 
+#: src/views/domain/components/SiteDuplicate.vue:39
+msgid "Please select at least one node!"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:25 src/views/system/Upgrade.vue:26
 #: src/views/system/Upgrade.vue:30 src/views/system/Upgrade.vue:34
 #: src/views/system/Upgrade.vue:38 src/views/system/Upgrade.vue:48
@@ -1025,18 +1120,18 @@ msgstr "專案團隊"
 msgid "Provider"
 msgstr "供應者"
 
-#: src/views/dashboard/ServerAnalytic.vue:109
-#: src/views/dashboard/ServerAnalytic.vue:23
+#: src/views/dashboard/ServerAnalytic.vue:111
+#: src/views/dashboard/ServerAnalytic.vue:30
 msgid "Reads"
 msgstr "讀"
 
-#: src/views/dashboard/ServerAnalytic.vue:20
-#: src/views/dashboard/ServerAnalytic.vue:80
+#: src/views/dashboard/ServerAnalytic.vue:27
+#: src/views/dashboard/ServerAnalytic.vue:82
 msgid "Receive"
 msgstr "下載"
 
-#: src/components/ChatGPT/ChatGPT.vue:34 src/components/ChatGPT/ChatGPT.vue:35
-#: src/components/ChatGPT/ChatGPT.vue:41 src/components/ChatGPT/ChatGPT.vue:45
+#: src/components/ChatGPT/ChatGPT.vue:39 src/components/ChatGPT/ChatGPT.vue:40
+#: src/components/ChatGPT/ChatGPT.vue:46 src/components/ChatGPT/ChatGPT.vue:50
 msgid "Regenerate response"
 msgstr "重新生成響應"
 
@@ -1057,8 +1152,8 @@ msgstr "安裝"
 msgid "Release Note"
 msgstr "發行公告"
 
-#: src/components/ChatGPT/ChatGPT.vue:20 src/components/ChatGPT/ChatGPT.vue:21
-#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:27
+#: src/components/ChatGPT/ChatGPT.vue:25 src/components/ChatGPT/ChatGPT.vue:26
+#: src/components/ChatGPT/ChatGPT.vue:30 src/components/ChatGPT/ChatGPT.vue:32
 #: src/components/NginxControl/NginxControl.vue:12
 #: src/components/NginxControl/NginxControl.vue:13
 #: src/components/NginxControl/NginxControl.vue:17
@@ -1101,9 +1196,9 @@ msgstr "高階模式"
 msgid "Running"
 msgstr "運行中"
 
-#: src/components/ChatGPT/ChatGPT.vue:16 src/components/ChatGPT/ChatGPT.vue:17
-#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:23
-#: src/views/config/ConfigEdit.vue:89 src/views/domain/DomainEdit.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:21 src/components/ChatGPT/ChatGPT.vue:22
+#: src/components/ChatGPT/ChatGPT.vue:26 src/components/ChatGPT/ChatGPT.vue:28
+#: src/views/config/ConfigEdit.vue:86 src/views/domain/DomainEdit.vue:228
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1119,7 +1214,7 @@ msgstr "儲存"
 msgid "Save Directive"
 msgstr "儲存指令"
 
-#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:53
+#: src/views/config/ConfigEdit.vue:53 src/views/domain/DomainAdd.vue:56
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:36
 msgid "Save error %{msg}"
 msgstr "儲存錯誤 %{msg}"
@@ -1133,8 +1228,8 @@ msgstr "保存成功"
 msgid "Save Successfully"
 msgstr "保存成功"
 
-#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:146
+#: src/views/config/ConfigEdit.vue:51 src/views/domain/DomainAdd.vue:46
+#: src/views/domain/DomainEdit.vue:147
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 msgid "Saved successfully"
 msgstr "儲存成功"
@@ -1143,8 +1238,8 @@ msgstr "儲存成功"
 msgid "Selector"
 msgstr "選擇器"
 
-#: src/views/dashboard/ServerAnalytic.vue:21
-#: src/views/dashboard/ServerAnalytic.vue:87
+#: src/views/dashboard/ServerAnalytic.vue:28
+#: src/views/dashboard/ServerAnalytic.vue:89
 msgid "Send"
 msgstr "上傳"
 
@@ -1171,7 +1266,7 @@ msgstr "未在指令集合中找到 server_name"
 #: src/views/domain/cert/components/AutoCertStepOne.vue:10
 #: src/views/domain/cert/components/AutoCertStepOne.vue:5
 #: src/views/domain/cert/components/AutoCertStepOne.vue:6
-#: src/views/domain/DomainAdd.vue:116
+#: src/views/domain/DomainAdd.vue:119
 msgid "server_name parameter is required"
 msgstr "必須為 server_name 指令指明參數"
 
@@ -1225,7 +1320,7 @@ msgstr "狀態"
 msgid "Stopped"
 msgstr "已停止"
 
-#: src/views/dashboard/ServerAnalytic.vue:43
+#: src/views/dashboard/ServerAnalytic.vue:45
 msgid "Storage"
 msgstr "儲存"
 
@@ -1233,7 +1328,7 @@ msgstr "儲存"
 msgid "Subject Name: %{name}"
 msgstr "主體名稱: %{name}"
 
-#: src/views/dashboard/ServerAnalytic.vue:38
+#: src/views/dashboard/ServerAnalytic.vue:40
 msgid "Swap"
 msgstr "交換空間"
 
@@ -1245,6 +1340,10 @@ msgstr "系統"
 msgid "Table"
 msgstr "表格"
 
+#: src/views/domain/components/SiteDuplicate.vue:8
+msgid "Target"
+msgstr ""
+
 #: src/routes/index.ts:102 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgstr "終端"
@@ -1307,8 +1406,10 @@ msgid "Type"
 msgstr "類型"
 
 #: src/views/cert/Cert.vue:68 src/views/cert/DNSCredential.vue:25
-#: src/views/config/config.ts:28 src/views/domain/DomainList.vue:41
-#: src/views/environment/Environment.vue:55 src/views/user/User.vue:37
+#: src/views/config/config.ts:28
+#: src/views/domain/components/RightSettings.vue:11
+#: src/views/domain/DomainList.vue:41 src/views/environment/Environment.vue:55
+#: src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "修改時間"
 
@@ -1332,7 +1433,7 @@ msgstr "升級成功"
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "正在升級 Nginx UI,請稍候..."
 
-#: src/views/dashboard/ServerAnalytic.vue:150
+#: src/views/dashboard/ServerAnalytic.vue:157
 msgid "Uptime:"
 msgstr "執行時間:"
 
@@ -1340,6 +1441,11 @@ msgstr "執行時間:"
 msgid "URL"
 msgstr ""
 
+#: src/components/ChatGPT/ChatGPT.vue:16
+#, fuzzy
+msgid "User"
+msgstr "使用者名稱"
+
 #: src/views/other/Login.vue:11 src/views/user/User.vue:11
 msgid "Username"
 msgstr "使用者名稱"
@@ -1376,8 +1482,8 @@ msgstr ""
 "我們將從該文件中刪除 HTTPChallenge 配置並重新加載 Nginx 配置文件。你確定你要"
 "繼續嗎?"
 
-#: src/views/dashboard/ServerAnalytic.vue:102
-#: src/views/dashboard/ServerAnalytic.vue:22
+#: src/views/dashboard/ServerAnalytic.vue:104
+#: src/views/dashboard/ServerAnalytic.vue:29
 msgid "Writes"
 msgstr "寫"
 

+ 1 - 1
frontend/src/version.json

@@ -1 +1 @@
-{"version":"1.9.9","build_id":116,"total_build":186}
+{"version":"1.9.9","build_id":119,"total_build":189}

+ 1 - 1
frontend/version.json

@@ -1 +1 @@
-{"version":"1.9.9","build_id":116,"total_build":186}
+{"version":"1.9.9","build_id":119,"total_build":189}

+ 1 - 1
frontend/vite.config.ts

@@ -58,7 +58,7 @@ export default defineConfig({
         preprocessorOptions: {
             less: {
                 modifyVars: {
-                    'border-radius-base': '4px'
+                    'border-radius-base': '5px'
                 },
                 javascriptEnabled: true
             }

Some files were not shown because too many files changed in this diff