Browse Source

fix: sites not getting enabled on deploy #541

Jacky 7 months ago
parent
commit
745e98d1a9

+ 1 - 1
app/package.json

@@ -40,7 +40,7 @@
     "vue-router": "^4.4.5",
     "vue3-ace-editor": "2.2.4",
     "vue3-apexcharts": "1.5.3",
-    "vue3-gettext": "3.0.0-beta.5",
+    "vue3-gettext": "3.0.0-beta.6",
     "vue3-otp-input": "^0.5.21",
     "vuedraggable": "^4.1.0"
   },

+ 5 - 6
app/pnpm-lock.yaml

@@ -96,8 +96,8 @@ importers:
         specifier: 1.5.3
         version: 1.5.3(apexcharts@3.53.0)(vue@3.5.5(typescript@5.5.4))
       vue3-gettext:
-        specifier: 3.0.0-beta.5
-        version: 3.0.0-beta.5(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))
+        specifier: 3.0.0-beta.6
+        version: 3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4))
       vue3-otp-input:
         specifier: ^0.5.21
         version: 0.5.21(vue@3.5.5(typescript@5.5.4))
@@ -3076,8 +3076,8 @@ packages:
       apexcharts: '> 3.0.0'
       vue: '> 3.0.0'
 
-  vue3-gettext@3.0.0-beta.5:
-    resolution: {integrity: sha512-Dn1qZrFgtaKg/9mMMypvQn+lyyHPAAylQBN4kPGqqr8oAMOJGyKg+rCLCcoyuLGLDvPGBgtawOTQ/0dFmGbDrw==}
+  vue3-gettext@3.0.0-beta.6:
+    resolution: {integrity: sha512-wal9FJEcCrUm807ksxP1fE1xpyk6mGC6bI7laX55wmN1ZJ2pFKnAjia1gRzgJNf/pR5D0qUezx4PGBf6DHoTkA==}
     engines: {node: '>= 18.0.0'}
     hasBin: true
     peerDependencies:
@@ -6349,7 +6349,7 @@ snapshots:
       apexcharts: 3.53.0
       vue: 3.5.5(typescript@5.5.4)
 
-  vue3-gettext@3.0.0-beta.5(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4)):
+  vue3-gettext@3.0.0-beta.6(@vue/compiler-sfc@3.5.5)(typescript@5.5.4)(vue@3.5.5(typescript@5.5.4)):
     dependencies:
       '@vue/compiler-sfc': 3.5.5
       chalk: 4.1.2
@@ -6360,7 +6360,6 @@ snapshots:
       parse5: 6.0.1
       parse5-htmlparser2-tree-adapter: 6.0.1
       pofile: 1.1.4
-      tslib: 2.7.0
       vue: 3.5.5(typescript@5.5.4)
     transitivePeerDependencies:
       - typescript

+ 13 - 10
app/src/components/NodeSelector/NodeSelector.vue

@@ -4,12 +4,11 @@ import type { Environment } from '@/api/environment'
 import environment from '@/api/environment'
 
 const props = defineProps<{
-  target?: number[]
-  map?: Record<number, string>
   hiddenLocal?: boolean
 }>()
 
-const emit = defineEmits(['update:target', 'update:map'])
+const target = defineModel<number[]>('target')
+const map = defineModel<Record<number, string>>('map')
 
 const data = ref([]) as Ref<Environment[]>
 const data_map = ref({}) as Ref<Record<number, Environment>>
@@ -33,16 +32,20 @@ onMounted(async () => {
 
 const value = computed({
   get() {
-    return props.target
+    return target.value
   },
-  set(v) {
-    if (typeof props.map === 'object') {
-      v?.forEach(id => {
-        if (id !== 0)
-          emit('update:map', { ...props.map, [id]: data_map.value[id].name })
+  set(v: number[]) {
+    console.log(v)
+    if (typeof map.value === 'object') {
+      const _map = {}
+
+      v?.filter(id => id !== 0).forEach(id => {
+        _map[id] = data_map.value[id].name
       })
+
+      map.value = _map
     }
-    emit('update:target', v)
+    target.value = v.filter(id => id !== 0)
   },
 })
 

+ 1 - 1
app/src/language/LINGUAS

@@ -1 +1 @@
-es fr_FR ko_KR ru_RU vi_VN zh_CN zh_TW
+en zh_CN zh_TW fr_FR es ru_RU vi_VN ko_KR

+ 70 - 70
app/src/language/en/app.po

@@ -42,8 +42,8 @@ msgstr "Username"
 msgid "Action"
 msgstr "Action"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -52,8 +52,8 @@ msgstr "Action"
 msgid "Add"
 msgstr ""
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 #, fuzzy
 msgid "Add Configuration"
 msgstr "Edit Configuration"
@@ -172,7 +172,7 @@ msgstr ""
 msgid "Attempts"
 msgstr ""
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr ""
 
@@ -194,8 +194,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "Back"
@@ -205,7 +205,7 @@ msgstr "Back"
 msgid "Back Home"
 msgstr "Back"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr ""
 
@@ -225,9 +225,9 @@ msgstr ""
 msgid "Base information"
 msgstr "Base information"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 msgid "Basic"
@@ -261,7 +261,7 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -315,7 +315,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "Certificate is valid"
 msgstr[1] "Certificate is valid"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "Changed Path"
 msgstr "Certificate is valid"
@@ -369,7 +369,7 @@ msgstr ""
 msgid "Configuration Name"
 msgstr "Configuration Name"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "Configurations"
 
@@ -420,12 +420,12 @@ msgstr "Created at"
 msgid "Create Another"
 msgstr "Create Another"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 #, fuzzy
 msgid "Create File"
 msgstr "Created at"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 #, fuzzy
 msgid "Create Folder"
 msgstr "Create Another"
@@ -475,8 +475,8 @@ msgid ""
 "indicator."
 msgstr ""
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "Dashboard"
 
@@ -513,7 +513,7 @@ msgstr ""
 msgid "Deleted successfully"
 msgstr "Disabled successfully"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -713,7 +713,7 @@ msgstr "Saved successfully"
 msgid "Edit %{n}"
 msgstr "Edit %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "Edit Configuration"
 
@@ -902,16 +902,16 @@ msgstr "Finished"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 #, fuzzy
 msgid "Format error %{msg}"
 msgstr "Save error %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 #, fuzzy
 msgid "Format successfully"
 msgstr "Saved successfully"
@@ -997,7 +997,7 @@ msgstr ""
 msgid "Import Certificate"
 msgstr "Certificate Status"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr ""
 
@@ -1040,12 +1040,12 @@ msgstr ""
 msgid "Invalid"
 msgstr "Invalid E-mail!"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 msgid "Invalid filename"
 msgstr "Invalid E-mail!"
@@ -1122,7 +1122,7 @@ msgstr "License"
 msgid "Link Start"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr ""
 
@@ -1141,7 +1141,7 @@ msgid "Load successfully"
 msgstr "Saved successfully"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 #, fuzzy
 msgid "Local"
 msgstr "Location"
@@ -1159,11 +1159,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "Login"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "Login"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "Login successful"
 
@@ -1171,7 +1171,7 @@ msgstr "Login successful"
 msgid "Logout successful"
 msgstr "Logout successful"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr ""
 
@@ -1194,8 +1194,8 @@ msgstr ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort (default: 9180) before getting the certificate."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "Manage Configs"
 
@@ -1240,9 +1240,9 @@ msgid "Model"
 msgstr "Advance Mode"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 msgid "Modify"
 msgstr "Modify Config"
@@ -1256,7 +1256,7 @@ msgstr "Certificate Status"
 msgid "Modify Config"
 msgstr "Modify Config"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "Modify Mode"
 msgstr "Modify Config"
@@ -1271,7 +1271,7 @@ msgstr "Single Directive"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1304,7 +1304,7 @@ msgstr "Network Total Send"
 msgid "New name"
 msgstr "Username"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "New Path"
 msgstr "Path"
@@ -1319,7 +1319,7 @@ msgstr ""
 msgid "Next"
 msgstr "Next"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr ""
 
@@ -1419,13 +1419,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr ""
@@ -1454,14 +1454,14 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr ""
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr ""
 
@@ -1478,13 +1478,13 @@ msgstr "OS:"
 msgid "OS:"
 msgstr "OS:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1494,7 +1494,7 @@ msgstr ""
 msgid "Params"
 msgstr "Params"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Password"
 
@@ -1502,7 +1502,7 @@ msgstr "Password"
 msgid "Password (*)"
 msgstr "Password (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1530,7 +1530,7 @@ msgid ""
 "provider."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr ""
 
@@ -1541,7 +1541,7 @@ msgid ""
 msgstr ""
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 #, fuzzy
 msgid "Please input a filename"
 msgstr "Please input your username!"
@@ -1562,11 +1562,11 @@ msgstr ""
 msgid "Please input your E-mail!"
 msgstr "Please input your E-mail!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "Please input your password!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "Please input your username!"
 
@@ -1586,7 +1586,7 @@ msgstr ""
 msgid "Pre-release"
 msgstr ""
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr ""
 
@@ -1710,7 +1710,7 @@ msgid "Removed successfully"
 msgstr "Saved successfully"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 #, fuzzy
 msgid "Rename"
@@ -1802,9 +1802,9 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "Save"
 
@@ -1812,20 +1812,20 @@ msgstr "Save"
 msgid "Save Directive"
 msgstr "Save Directive"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "Save error %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 #, fuzzy
 msgid "Save successfully"
 msgstr "Saved successfully"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1858,13 +1858,13 @@ msgstr "Send"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "Server error"
@@ -1941,7 +1941,7 @@ msgstr "Certificate Status"
 msgid "SSL Certificate Path"
 msgstr "Certificate Status"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 #, fuzzy
 msgid "SSO Login"
 msgstr "Login"
@@ -2025,7 +2025,7 @@ msgstr "Certificate is valid"
 #: src/components/Notification/config.ts:12
 #, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr "Saved successfully"
 
@@ -2203,7 +2203,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr ""
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
@@ -2213,7 +2213,7 @@ msgid ""
 "password algorithm."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr ""
 
@@ -2229,7 +2229,7 @@ msgstr ""
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2286,11 +2286,11 @@ msgstr ""
 msgid "User"
 msgstr "Username"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr ""
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "Username"
 
@@ -2318,11 +2318,11 @@ msgstr ""
 msgid "View all notifications"
 msgstr "Certificate is valid"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "View Mode"
 msgstr "Basic Mode"

+ 71 - 70
app/src/language/es/app.po

@@ -48,8 +48,8 @@ msgstr "Usuario ACME"
 msgid "Action"
 msgstr "Acción"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -58,8 +58,8 @@ msgstr "Acción"
 msgid "Add"
 msgstr "Agregar"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr "Agregar configuración"
 
@@ -165,7 +165,7 @@ msgstr "Asistente"
 msgid "Attempts"
 msgstr "Intentos"
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr "Autenticación"
 
@@ -187,8 +187,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "Renovación automática habilitada por %{name}"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "Volver"
@@ -197,7 +197,7 @@ msgstr "Volver"
 msgid "Back Home"
 msgstr "Volver al Inicio"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr "Volver a la lista"
 
@@ -217,9 +217,9 @@ msgstr "Bloqueado hasta"
 msgid "Base information"
 msgstr "Información general"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr "Básico"
@@ -251,7 +251,7 @@ msgstr "Directorio CA"
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -299,7 +299,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "Cambiar Certificado"
 msgstr[1] "Cambiar Certificados"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "Changed Path"
 msgstr "Ruta cambiada"
 
@@ -349,7 +349,7 @@ msgstr "El archivo de configuración se probó exitosamente"
 msgid "Configuration Name"
 msgstr "Nombre de la configuración"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "Configuraciones"
 
@@ -399,11 +399,11 @@ msgstr "Crear"
 msgid "Create Another"
 msgstr "Crear otro"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 msgid "Create File"
 msgstr "Crear Archivo"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 msgid "Create Folder"
 msgstr "Crear carpeta"
 
@@ -455,8 +455,8 @@ msgstr ""
 "Personalice el nombre del servidor local para que se muestre en el indicador "
 "de entorno."
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "Panel"
 
@@ -492,7 +492,7 @@ msgstr "Eliminar stream: %{site_name}"
 msgid "Deleted successfully"
 msgstr "Borrado exitoso"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -679,7 +679,7 @@ msgstr "Duplicado con éxito a local"
 msgid "Edit %{n}"
 msgstr "Editar %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "Editar Configuración"
 
@@ -859,15 +859,15 @@ msgstr "Terminado"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Para usuario chino: https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "Código de formato"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr "Error de formato %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr "Formateado correctamente"
 
@@ -956,7 +956,7 @@ msgstr "Importar"
 msgid "Import Certificate"
 msgstr "Importar Certificado"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr "Nombre de usuario o contraseña incorrectos"
 
@@ -997,12 +997,12 @@ msgstr "Intervalo"
 msgid "Invalid"
 msgstr "Inválido"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr "Código 2FA o de recuperación inválido"
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr "Nombre de archivo inválido"
 
@@ -1073,7 +1073,7 @@ msgstr "Licencia"
 msgid "Link Start"
 msgstr "Iniciar conexión"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr "Lista"
 
@@ -1090,7 +1090,7 @@ msgid "Load successfully"
 msgstr "Cargado con éxito"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 msgid "Local"
 msgstr "Local"
 
@@ -1106,11 +1106,11 @@ msgstr "Ubicaciones"
 msgid "Log"
 msgstr "Registro"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "Acceso"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "Acceso exitoso"
 
@@ -1118,7 +1118,7 @@ msgstr "Acceso exitoso"
 msgid "Logout successful"
 msgstr "Cierre de sesión exitoso"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr "Rotación de logs"
 
@@ -1147,8 +1147,8 @@ msgstr ""
 "Asegúrese de haber configurado un proxy reverso para el directorio .well-"
 "known en HTTPChallengePort antes de obtener el certificado."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "Administrar configuraciones"
 
@@ -1190,9 +1190,9 @@ msgid "Model"
 msgstr "Modelo"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr "Modificar"
 
@@ -1204,7 +1204,7 @@ msgstr "Modificar Certificado"
 msgid "Modify Config"
 msgstr "Modificar configuración"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "Modify Mode"
 msgstr "Modo Modificar"
 
@@ -1217,7 +1217,7 @@ msgstr "Directiva multilínea"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1249,7 +1249,7 @@ msgstr "Total enviado por la red"
 msgid "New name"
 msgstr "Nuevo nombre"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "New Path"
 msgstr "Nueva ruta"
 
@@ -1263,7 +1263,7 @@ msgstr "Se liberó una nueva versión"
 msgid "Next"
 msgstr "Siguiente"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr "Nginx"
 
@@ -1359,13 +1359,13 @@ msgstr ""
 "OCSP Must Staple puede causar errores para algunos usuarios en el primer "
 "acceso usando Firefox."
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "Desconectado"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr "Ok"
@@ -1394,14 +1394,14 @@ msgstr "OK"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "En línea"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "OpenAI"
 
@@ -1417,13 +1417,13 @@ msgstr "SO"
 msgid "OS:"
 msgstr "SO:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "Sobrescribir"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1433,7 +1433,7 @@ msgstr "Sobrescribir archivo existente"
 msgid "Params"
 msgstr "Parámetros"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Contraseña"
 
@@ -1441,7 +1441,7 @@ msgstr "Contraseña"
 msgid "Password (*)"
 msgstr "Contraseña (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1471,7 +1471,7 @@ msgstr ""
 "Por favor, complete las credenciales de autenticación API proporcionadas por "
 "su proveedor de DNS."
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr "Por favor, complete los campos requeridos"
 
@@ -1485,7 +1485,7 @@ msgstr ""
 "del proveedor de DNS."
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 msgid "Please input a filename"
 msgstr "Por favor, ingrese un nombre de archivo"
 
@@ -1506,11 +1506,11 @@ msgstr ""
 msgid "Please input your E-mail!"
 msgstr "¡Por favor ingrese su correo electrónico!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "¡Por favor ingrese su contraseña!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "¡Por favor ingrese su nombre de usuario!"
 
@@ -1532,7 +1532,7 @@ msgstr "¡Seleccione al menos un nodo!"
 msgid "Pre-release"
 msgstr "Prelanzamiento"
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "Configuración"
 
@@ -1649,7 +1649,7 @@ msgid "Removed successfully"
 msgstr "Eliminado con éxito"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 msgid "Rename"
 msgstr "Renombrar"
@@ -1732,9 +1732,9 @@ msgstr "Corriendo"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "Guardar"
 
@@ -1742,19 +1742,19 @@ msgstr "Guardar"
 msgid "Save Directive"
 msgstr "Guardar Directiva"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "Error al guardar %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr "Guardado con éxito"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1789,13 +1789,13 @@ msgstr "Enviado"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "Error del servidor"
@@ -1868,7 +1868,7 @@ msgstr "Ruta de la llave del certificado SSL"
 msgid "SSL Certificate Path"
 msgstr "Ruta del certificado SSL"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr "Acceso SSO"
 
@@ -1946,8 +1946,9 @@ msgid "Sync Certificate Success"
 msgstr "Sincronización del Certificado exitosa"
 
 #: src/components/Notification/config.ts:12
+#, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr ""
 "Sincronización de la configuración %{cert_name} a %{env_name} falló, por "
@@ -2141,7 +2142,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr "El token no es válido"
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 "Demasiados intentos fallidos de inicio de sesión, por favor intente "
@@ -2155,7 +2156,7 @@ msgstr ""
 "TOTP es un método de autenticación de dos factores que utiliza un algoritmo "
 "de contraseña de un solo uso basado en el tiempo."
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr "Basura"
 
@@ -2171,7 +2172,7 @@ msgstr "Tipo"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2224,11 +2225,11 @@ msgstr "Usar código de recuperación"
 msgid "User"
 msgstr "Usuario"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr "El usuario está bloqueado"
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "Nombre de usuario"
 
@@ -2255,11 +2256,11 @@ msgstr "Ver"
 msgid "View all notifications"
 msgstr "Ver todas las notificaciones"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr "Ver detalles"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "View Mode"
 msgstr "Modo de vista"
 

+ 70 - 70
app/src/language/fr_FR/app.po

@@ -44,8 +44,8 @@ msgstr "Nom d'utilisateur"
 msgid "Action"
 msgstr "Action"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -54,8 +54,8 @@ msgstr "Action"
 msgid "Add"
 msgstr "Ajouter"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 #, fuzzy
 msgid "Add Configuration"
 msgstr "Modifier la configuration"
@@ -174,7 +174,7 @@ msgstr ""
 msgid "Attempts"
 msgstr ""
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 #, fuzzy
 msgid "Auth"
 msgstr "Autheur"
@@ -197,8 +197,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "Renouvellement automatique activé pour %{name}"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "Retour"
@@ -207,7 +207,7 @@ msgstr "Retour"
 msgid "Back Home"
 msgstr "Retour au menu principal"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr ""
 
@@ -227,9 +227,9 @@ msgstr ""
 msgid "Base information"
 msgstr "Information générale"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr "Basique"
@@ -263,7 +263,7 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -316,7 +316,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "Changer de certificat"
 msgstr[1] "Changer de certificat"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "Changed Path"
 msgstr "Changer de certificat"
@@ -369,7 +369,7 @@ msgstr "Le fichier de configuration est testé avec succès"
 msgid "Configuration Name"
 msgstr "Nom de la configuration"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "Configurations"
 
@@ -420,12 +420,12 @@ msgstr "Créé le"
 msgid "Create Another"
 msgstr "Créer un autre"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 #, fuzzy
 msgid "Create File"
 msgstr "Créé le"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 #, fuzzy
 msgid "Create Folder"
 msgstr "Créer un autre"
@@ -475,8 +475,8 @@ msgid ""
 "indicator."
 msgstr ""
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "Dashboard"
 
@@ -514,7 +514,7 @@ msgstr "Supprimer le site : %{site_name}"
 msgid "Deleted successfully"
 msgstr "Désactivé avec succès"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -713,7 +713,7 @@ msgstr "Dupliqué avec succès"
 msgid "Edit %{n}"
 msgstr "Modifier %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "Modifier la configuration"
 
@@ -906,15 +906,15 @@ msgstr "Finie"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Utilisateur chinois : https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "Code de formatage"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr "Erreur de format %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr "Formaté avec succès"
 
@@ -999,7 +999,7 @@ msgstr "Exporter"
 msgid "Import Certificate"
 msgstr "État du certificat"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 #, fuzzy
 msgid "Incorrect username or password"
 msgstr "Le pseudo ou mot de passe est incorect"
@@ -1041,12 +1041,12 @@ msgstr ""
 msgid "Invalid"
 msgstr ""
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr ""
 
@@ -1122,7 +1122,7 @@ msgstr "Licence"
 msgid "Link Start"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr ""
 
@@ -1141,7 +1141,7 @@ msgid "Load successfully"
 msgstr "Enregistré avec succès"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 #, fuzzy
 msgid "Local"
 msgstr "Localisation"
@@ -1161,11 +1161,11 @@ msgstr "Localisations"
 msgid "Log"
 msgstr "Connexion"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "Connexion"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "Connexion réussie"
 
@@ -1173,7 +1173,7 @@ msgstr "Connexion réussie"
 msgid "Logout successful"
 msgstr "Déconnexion réussie"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr ""
 
@@ -1196,8 +1196,8 @@ msgstr ""
 "Assurez vous d'avoir configuré un reverse proxy pour le répertoire .well-"
 "known vers HTTPChallengePort avant d'obtenir le certificat."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "Gérer les configurations"
 
@@ -1242,9 +1242,9 @@ msgid "Model"
 msgstr "Mode d'exécution"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr "Modifier"
 
@@ -1257,7 +1257,7 @@ msgstr "État du certificat"
 msgid "Modify Config"
 msgstr "Modifier la configuration"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "Modify Mode"
 msgstr "Modifier"
@@ -1271,7 +1271,7 @@ msgstr "Directive multiligne"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1304,7 +1304,7 @@ msgstr "Envoi total réseau"
 msgid "New name"
 msgstr "Nom d'utilisateur"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "New Path"
 msgstr "Chemin"
@@ -1319,7 +1319,7 @@ msgstr "Nouvelle version publiée"
 msgid "Next"
 msgstr "Suivant"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 #, fuzzy
 msgid "Nginx"
 msgstr "Journal Nginx"
@@ -1417,13 +1417,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr ""
@@ -1452,14 +1452,14 @@ msgstr "OK"
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr ""
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "OpenAI"
 
@@ -1475,13 +1475,13 @@ msgstr "OS"
 msgid "OS:"
 msgstr "OS :"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1491,7 +1491,7 @@ msgstr ""
 msgid "Params"
 msgstr "Paramètres"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -1499,7 +1499,7 @@ msgstr "Mot de passe"
 msgid "Password (*)"
 msgstr "Mot de passe (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1527,7 +1527,7 @@ msgid ""
 "provider."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr ""
 
@@ -1543,7 +1543,7 @@ msgstr ""
 "fournisseur DNS."
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 #, fuzzy
 msgid "Please input a filename"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
@@ -1566,11 +1566,11 @@ msgstr ""
 msgid "Please input your E-mail!"
 msgstr "Veuillez saisir votre e-mail !"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "Veuillez saisir votre mot de passe !"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "Veuillez saisir votre nom d'utilisateur !"
 
@@ -1590,7 +1590,7 @@ msgstr ""
 msgid "Pre-release"
 msgstr ""
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "Préférence"
 
@@ -1717,7 +1717,7 @@ msgid "Removed successfully"
 msgstr "Enregistré avec succès"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 #, fuzzy
 msgid "Rename"
@@ -1809,9 +1809,9 @@ msgstr "En cours d'éxécution"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "Enregistrer"
 
@@ -1819,19 +1819,19 @@ msgstr "Enregistrer"
 msgid "Save Directive"
 msgstr "Enregistrer la directive"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "Enregistrer l'erreur %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr "Sauvegarde réussie"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1864,13 +1864,13 @@ msgstr "Envoyer"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "Erreur du serveur"
@@ -1946,7 +1946,7 @@ msgstr "Chemin de la clé du certificat SSL"
 msgid "SSL Certificate Path"
 msgstr "Chemin du certificat SSL"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 #, fuzzy
 msgid "SSO Login"
 msgstr "Connexion"
@@ -2031,7 +2031,7 @@ msgstr "Changer de certificat"
 #: src/components/Notification/config.ts:12
 #, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr "Dupliqué avec succès"
 
@@ -2217,7 +2217,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr ""
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
@@ -2227,7 +2227,7 @@ msgid ""
 "password algorithm."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr ""
 
@@ -2243,7 +2243,7 @@ msgstr "Type"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2298,11 +2298,11 @@ msgstr ""
 msgid "User"
 msgstr "Nom d'utilisateur"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr ""
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
@@ -2331,11 +2331,11 @@ msgstr "Voir"
 msgid "View all notifications"
 msgstr "Certification"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "View Mode"
 msgstr "Mode simple"

+ 70 - 70
app/src/language/ko_KR/app.po

@@ -46,8 +46,8 @@ msgstr "ACME 사용자"
 msgid "Action"
 msgstr "작업"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -56,8 +56,8 @@ msgstr "작업"
 msgid "Add"
 msgstr "추가"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr "구성 추가"
 
@@ -163,7 +163,7 @@ msgstr "조수"
 msgid "Attempts"
 msgstr "시도 횟수"
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr "인증"
 
@@ -185,8 +185,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "%{name}에 대한 자동 갱신 활성화됨"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "뒤로"
@@ -195,7 +195,7 @@ msgstr "뒤로"
 msgid "Back Home"
 msgstr "홈으로"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr "목록으로 돌아가기"
 
@@ -215,9 +215,9 @@ msgstr "차단될 시간"
 msgid "Base information"
 msgstr "기본 정보"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr "기본"
@@ -249,7 +249,7 @@ msgstr "CA 디렉토리"
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -298,7 +298,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "인증서 변경"
 msgstr[1] "인증서 변경"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "Changed Path"
 msgstr "인증서 변경"
@@ -349,7 +349,7 @@ msgstr "구성 파일 테스트 성공"
 msgid "Configuration Name"
 msgstr "구성 이름"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "구성들"
 
@@ -399,12 +399,12 @@ msgstr "생성"
 msgid "Create Another"
 msgstr "다른 것 생성하기"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 #, fuzzy
 msgid "Create File"
 msgstr "생성"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 #, fuzzy
 msgid "Create Folder"
 msgstr "다른 것 생성하기"
@@ -454,8 +454,8 @@ msgid ""
 "indicator."
 msgstr ""
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "대시보드"
 
@@ -491,7 +491,7 @@ msgstr "스트림 삭제: %{stream_name}"
 msgid "Deleted successfully"
 msgstr "성공적으로 삭제됨"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -678,7 +678,7 @@ msgstr "로컬로 성공적으로 복제됨"
 msgid "Edit %{n}"
 msgstr "%{n} 편집"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "구성 편집"
 
@@ -864,16 +864,16 @@ msgstr "완료됨"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "중국 사용자를 위해: https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "코드 형식"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 #, fuzzy
 msgid "Format error %{msg}"
 msgstr "형식 오류 %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 #, fuzzy
 msgid "Format successfully"
 msgstr "성공적으로 형식 지정됨"
@@ -959,7 +959,7 @@ msgstr "가져오기"
 msgid "Import Certificate"
 msgstr "인증서 상태"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 #, fuzzy
 msgid "Incorrect username or password"
 msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
@@ -1003,12 +1003,12 @@ msgstr "간격"
 msgid "Invalid"
 msgstr "유효함"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 msgid "Invalid filename"
 msgstr "Invalid E-mail!"
@@ -1085,7 +1085,7 @@ msgstr "라이센스"
 msgid "Link Start"
 msgstr "링크 시작"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr ""
 
@@ -1104,7 +1104,7 @@ msgid "Load successfully"
 msgstr "성공적으로 저장됨"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 #, fuzzy
 msgid "Local"
 msgstr "지역"
@@ -1122,11 +1122,11 @@ msgstr "위치들"
 msgid "Log"
 msgstr "로그인"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "로그인"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "로그인 성공"
 
@@ -1134,7 +1134,7 @@ msgstr "로그인 성공"
 msgid "Logout successful"
 msgstr "로그아웃 성공"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr "로그관리"
 
@@ -1162,8 +1162,8 @@ msgstr ""
 "인증서를 획득하기 전에 .well-known 디렉토리에 대한역방향 프록시를 "
 "HTTPChallengePort(기본값: 9180)로 구성했는지 확인하세요."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "구성 관리"
 
@@ -1208,9 +1208,9 @@ msgid "Model"
 msgstr "실행 모드"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 msgid "Modify"
 msgstr "설정 수정"
@@ -1224,7 +1224,7 @@ msgstr "인증서 상태"
 msgid "Modify Config"
 msgstr "설정 수정"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "Modify Mode"
 msgstr "설정 수정"
@@ -1239,7 +1239,7 @@ msgstr "단일 지시문"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1272,7 +1272,7 @@ msgstr "네트워크 총 송신"
 msgid "New name"
 msgstr "이름 변경"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "New Path"
 msgstr "경로"
@@ -1287,7 +1287,7 @@ msgstr "새 버전 출시"
 msgid "Next"
 msgstr "다음"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr "Nginx"
 
@@ -1387,13 +1387,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "오프라인"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr ""
@@ -1422,14 +1422,14 @@ msgstr "확인"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "검증이 완료되면, 레코드는 제거됩니다."
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "온라인"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "오픈AI"
 
@@ -1446,13 +1446,13 @@ msgstr "OS"
 msgid "OS:"
 msgstr "OS:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "덮어쓰기"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1462,7 +1462,7 @@ msgstr "기존 파일 덮어쓰기"
 msgid "Params"
 msgstr "파라미터"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "비밀번호"
 
@@ -1470,7 +1470,7 @@ msgstr "비밀번호"
 msgid "Password (*)"
 msgstr "비밀번호 (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1498,7 +1498,7 @@ msgid ""
 "provider."
 msgstr "DNS 제공자가 제공한 API 인증 자격 증명을 입력해주세요."
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr ""
 
@@ -1511,7 +1511,7 @@ msgstr ""
 "하려면 아래 자격 증명 중 하나를 선택해주세요."
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 #, fuzzy
 msgid "Please input a filename"
 msgstr "사용자 이름을 입력해주세요!"
@@ -1532,11 +1532,11 @@ msgstr "이름을 입력해주세요, 이것은 새 구성의 파일 이름으
 msgid "Please input your E-mail!"
 msgstr "이메일을 입력해주세요!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "비밀번호를 입력해주세요!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "사용자 이름을 입력해주세요!"
 
@@ -1556,7 +1556,7 @@ msgstr "적어도 하나의 노드를 선택해주세요!"
 msgid "Pre-release"
 msgstr "사전 출시"
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "환경설정"
 
@@ -1682,7 +1682,7 @@ msgid "Removed successfully"
 msgstr "성공적으로 제거됨"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 #, fuzzy
 msgid "Rename"
@@ -1775,9 +1775,9 @@ msgstr "실행 중"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "저장"
 
@@ -1785,20 +1785,20 @@ msgstr "저장"
 msgid "Save Directive"
 msgstr "지시문 저장"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "저장 오류 %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 #, fuzzy
 msgid "Save successfully"
 msgstr "성공적으로 저장됨"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1831,13 +1831,13 @@ msgstr "보내기"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "서버 오류"
@@ -1913,7 +1913,7 @@ msgstr "SSL 인증서 키 경로"
 msgid "SSL Certificate Path"
 msgstr "SSL 인증서 경로"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 #, fuzzy
 msgid "SSO Login"
 msgstr "SSO 로그인"
@@ -1997,7 +1997,7 @@ msgstr "인증서 갱신 성공"
 #: src/components/Notification/config.ts:12
 #, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
@@ -2180,7 +2180,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr "토큰이 유효하지 않습니다"
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
@@ -2190,7 +2190,7 @@ msgid ""
 "password algorithm."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr ""
 
@@ -2206,7 +2206,7 @@ msgstr "유형"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2263,11 +2263,11 @@ msgstr ""
 msgid "User"
 msgstr "사용자 이름"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr ""
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "사용자 이름"
 
@@ -2296,12 +2296,12 @@ msgstr "보기"
 msgid "View all notifications"
 msgstr "Certificate is valid"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #, fuzzy
 msgid "View Details"
 msgstr "세부 사항"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "View Mode"
 msgstr "기본 모드"

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

@@ -38,8 +38,8 @@ msgstr ""
 msgid "Action"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -49,8 +49,8 @@ msgid "Add"
 msgstr ""
 
 #: src/routes/index.ts:112
-#: src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr ""
 
@@ -159,7 +159,7 @@ msgstr ""
 msgid "Attempts"
 msgstr ""
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr ""
 
@@ -181,9 +181,9 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr ""
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205
-#: src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99
+#: src/views/config/ConfigEditor.vue:213
+#: src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181
 #: src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168
 #: src/views/stream/StreamEdit.vue:245
@@ -194,7 +194,7 @@ msgstr ""
 msgid "Back Home"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr ""
 
@@ -214,9 +214,9 @@ msgstr ""
 msgid "Base information"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr ""
@@ -249,7 +249,7 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -297,7 +297,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "Changed Path"
 msgstr ""
 
@@ -348,7 +348,7 @@ msgstr ""
 msgid "Configuration Name"
 msgstr ""
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr ""
 
@@ -398,12 +398,12 @@ msgstr ""
 msgid "Create Another"
 msgstr ""
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 msgid "Create File"
 msgstr ""
 
 #: src/views/config/components/Mkdir.vue:48
-#: src/views/config/ConfigList.vue:116
+#: src/views/config/ConfigList.vue:124
 msgid "Create Folder"
 msgstr ""
 
@@ -450,9 +450,9 @@ msgid "Customize the name of local server to be displayed in the environment ind
 msgstr ""
 
 #: src/routes/index.ts:39
-#: src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86
-#: src/views/config/ConfigList.vue:57
+#: src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94
+#: src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr ""
 
@@ -488,7 +488,7 @@ msgstr ""
 msgid "Deleted successfully"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -681,7 +681,7 @@ msgid "Edit %{n}"
 msgstr ""
 
 #: src/routes/index.ts:122
-#: src/views/config/ConfigEditor.vue:196
+#: src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr ""
 
@@ -868,15 +868,15 @@ msgstr ""
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr ""
 
@@ -954,7 +954,7 @@ msgstr ""
 msgid "Import Certificate"
 msgstr ""
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr ""
 
@@ -997,12 +997,12 @@ msgstr ""
 msgid "Invalid"
 msgstr ""
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr ""
 
@@ -1073,7 +1073,7 @@ msgstr ""
 msgid "Link Start"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr ""
 
@@ -1090,7 +1090,7 @@ msgid "Load successfully"
 msgstr ""
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 msgid "Local"
 msgstr ""
 
@@ -1107,12 +1107,12 @@ msgid "Log"
 msgstr ""
 
 #: src/routes/index.ts:305
-#: src/views/other/Login.vue:192
+#: src/views/other/Login.vue:207
 msgid "Login"
 msgstr ""
 
-#: src/views/other/Login.vue:125
-#: src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130
+#: src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr ""
 
@@ -1120,7 +1120,7 @@ msgstr ""
 msgid "Logout successful"
 msgstr ""
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr ""
 
@@ -1133,9 +1133,9 @@ msgid "Make sure you have configured a reverse proxy for .well-known directory t
 msgstr ""
 
 #: src/routes/index.ts:102
-#: src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91
-#: src/views/config/ConfigList.vue:62
+#: src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99
+#: src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr ""
 
@@ -1180,9 +1180,9 @@ msgid "Model"
 msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr ""
 
@@ -1195,7 +1195,7 @@ msgstr ""
 msgid "Modify Config"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "Modify Mode"
 msgstr ""
 
@@ -1209,7 +1209,7 @@ msgstr ""
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65
 #: src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1242,7 +1242,7 @@ msgstr ""
 msgid "New name"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "New Path"
 msgstr ""
 
@@ -1256,7 +1256,7 @@ msgstr ""
 msgid "Next"
 msgstr ""
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr ""
 
@@ -1351,13 +1351,13 @@ msgstr ""
 msgid "OCSP Must Staple may cause errors for some users on first access using Firefox."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr ""
@@ -1386,14 +1386,14 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr ""
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr ""
 
@@ -1409,13 +1409,13 @@ msgstr ""
 msgid "OS:"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1425,7 +1425,7 @@ msgstr ""
 msgid "Params"
 msgstr ""
 
-#: src/views/other/Login.vue:169
+#: src/views/other/Login.vue:174
 #: src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr ""
@@ -1434,7 +1434,7 @@ msgstr ""
 msgid "Password (*)"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1460,7 +1460,7 @@ msgstr ""
 msgid "Please fill in the API authentication credentials provided by your DNS provider."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr ""
 
@@ -1469,7 +1469,7 @@ msgid "Please first add credentials in Certification > DNS Credentials, and then
 msgstr ""
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 msgid "Please input a filename"
 msgstr ""
 
@@ -1487,12 +1487,12 @@ msgid "Please input your E-mail!"
 msgstr ""
 
 #: src/views/other/Install.vue:44
-#: src/views/other/Login.vue:43
+#: src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr ""
 
 #: src/views/other/Install.vue:38
-#: src/views/other/Login.vue:37
+#: src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr ""
 
@@ -1513,7 +1513,7 @@ msgid "Pre-release"
 msgstr ""
 
 #: src/routes/index.ts:260
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr ""
 
@@ -1630,7 +1630,7 @@ msgid "Removed successfully"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 msgid "Rename"
 msgstr ""
@@ -1707,10 +1707,10 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214
+#: src/views/config/ConfigEditor.vue:222
 #: src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145
+#: src/views/preference/Preference.vue:151
 #: src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr ""
@@ -1719,20 +1719,20 @@ msgstr ""
 msgid "Save Directive"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:163
+#: src/views/config/ConfigEditor.vue:171
 #: src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr ""
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr ""
 
-#: src/views/config/ConfigEditor.vue:159
+#: src/views/config/ConfigEditor.vue:167
 #: src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
@@ -1766,7 +1766,7 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100
+#: src/views/config/ConfigEditor.vue:108
 #: src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15
@@ -1774,7 +1774,7 @@ msgstr ""
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78
+#: src/views/preference/Preference.vue:83
 #: src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
@@ -1845,7 +1845,7 @@ msgstr ""
 msgid "SSL Certificate Path"
 msgstr ""
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr ""
 
@@ -1920,7 +1920,7 @@ msgid "Sync Certificate Success"
 msgstr ""
 
 #: src/components/Notification/config.ts:12
-msgid "Sync config %{cert_name} to %{env_name} failed, please upgrade the remote Nginx UI to the latest version"
+msgid "Sync config %{config_name} to %{env_name} failed, please upgrade the remote Nginx UI to the latest version"
 msgstr ""
 
 #: src/components/Notification/config.ts:16
@@ -2066,7 +2066,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr ""
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
@@ -2074,7 +2074,7 @@ msgstr ""
 msgid "TOTP is a two-factor authentication method that uses a time-based one-time password algorithm."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr ""
 
@@ -2091,7 +2091,7 @@ msgstr ""
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/config/configColumns.ts:31
-#: src/views/config/ConfigEditor.vue:267
+#: src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41
 #: src/views/environment/envColumns.tsx:124
@@ -2149,11 +2149,11 @@ msgstr ""
 msgid "User"
 msgstr ""
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr ""
 
-#: src/views/other/Login.vue:159
+#: src/views/other/Login.vue:164
 #: src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr ""
@@ -2181,11 +2181,11 @@ msgstr ""
 msgid "View all notifications"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "View Mode"
 msgstr ""
 

+ 71 - 70
app/src/language/ru_RU/app.po

@@ -46,8 +46,8 @@ msgstr "Пользователь ACME"
 msgid "Action"
 msgstr "Действие"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -56,8 +56,8 @@ msgstr "Действие"
 msgid "Add"
 msgstr "Добавить"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr "Добавить конфигурацию"
 
@@ -165,7 +165,7 @@ msgstr "Ассистент"
 msgid "Attempts"
 msgstr "Попытки"
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr "Авторизация"
 
@@ -187,8 +187,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "Автообновление включено для %{name}"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "Назад"
@@ -197,7 +197,7 @@ msgstr "Назад"
 msgid "Back Home"
 msgstr "Вернуться на главную"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr "Возврат к списку"
 
@@ -217,9 +217,9 @@ msgstr "Заблокирован до"
 msgid "Base information"
 msgstr "Основная информация"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 msgid "Basic"
@@ -252,7 +252,7 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -300,7 +300,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "Сертификат изменен"
 msgstr[1] "Сертификаты изменены"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "Changed Path"
 msgstr "Путь изменён"
 
@@ -350,7 +350,7 @@ msgstr "Проверка конфигурации успешна"
 msgid "Configuration Name"
 msgstr "Название конфигурации"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "Конфигурации"
 
@@ -400,11 +400,11 @@ msgstr "Создать"
 msgid "Create Another"
 msgstr "Создать еще"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 msgid "Create File"
 msgstr "Создать файл"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 msgid "Create Folder"
 msgstr "Создать папку"
 
@@ -453,8 +453,8 @@ msgid ""
 "indicator."
 msgstr "Настройте имя локального сервера для отображения в индикаторе среды."
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "Доска"
 
@@ -490,7 +490,7 @@ msgstr "Удалить поток: %{stream_name}"
 msgid "Deleted successfully"
 msgstr "Удалено успешно"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -679,7 +679,7 @@ msgstr "Успешно дублировано на локальный"
 msgid "Edit %{n}"
 msgstr "Редактировать %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "Редактировать Конфигурацию"
 
@@ -858,15 +858,15 @@ msgstr "Готово"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Для китайских пользователей: https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "Форматировать код"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr "Ошибка формата %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr "Форматирование успешно"
 
@@ -955,7 +955,7 @@ msgstr "Импорт"
 msgid "Import Certificate"
 msgstr "Импортировать сертификат"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr "Неверное имя пользователя или пароль"
 
@@ -996,12 +996,12 @@ msgstr "Интервал"
 msgid "Invalid"
 msgstr "Недействительно"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr "Неверный 2FA или код восстановления"
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr "Неверное имя файла"
 
@@ -1072,7 +1072,7 @@ msgstr "Лицензия"
 msgid "Link Start"
 msgstr "Начало ссылки"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr "Список"
 
@@ -1089,7 +1089,7 @@ msgid "Load successfully"
 msgstr "Загружено успешно"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 msgid "Local"
 msgstr "Локальный"
 
@@ -1105,11 +1105,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "Журнал"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "Логин"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "Авторизация успешна"
 
@@ -1117,7 +1117,7 @@ msgstr "Авторизация успешна"
 msgid "Logout successful"
 msgstr "Выход выполнен успешно"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr "Прокрутка"
 
@@ -1145,8 +1145,8 @@ msgstr ""
 "Убедитесь, что вы настроили обратный прокси для каталога .well-known на "
 "HTTPChallengePort перед получением сертификата."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "Конфигурации"
 
@@ -1188,9 +1188,9 @@ msgid "Model"
 msgstr "Модель"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr "Изменить"
 
@@ -1202,7 +1202,7 @@ msgstr "Изменить сертификат"
 msgid "Modify Config"
 msgstr "Изменить конфигурацию"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "Modify Mode"
 msgstr "Изменить режим"
 
@@ -1215,7 +1215,7 @@ msgstr "Многострочная директива"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1247,7 +1247,7 @@ msgstr "Всего отправлено"
 msgid "New name"
 msgstr "Новое имя"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "New Path"
 msgstr "Новый путь"
 
@@ -1261,7 +1261,7 @@ msgstr "Вышла новая версия"
 msgid "Next"
 msgstr "Дальше"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr "Nginx"
 
@@ -1357,13 +1357,13 @@ msgstr ""
 "OCSP Must Staple может вызвать ошибки у некоторых пользователей при первом "
 "доступе через Firefox."
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "Оффлайн"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr "Ок"
@@ -1392,14 +1392,14 @@ msgstr "ОК"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "После завершения проверки записи будут удалены."
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "Онлайн"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "OpenAI"
 
@@ -1415,13 +1415,13 @@ msgstr "ОС"
 msgid "OS:"
 msgstr "OS:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "Перезаписать"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1431,7 +1431,7 @@ msgstr "Перезаписать существующий файл"
 msgid "Params"
 msgstr "Параметры"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Пароль"
 
@@ -1439,7 +1439,7 @@ msgstr "Пароль"
 msgid "Password (*)"
 msgstr "Пароль (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1469,7 +1469,7 @@ msgstr ""
 "Пожалуйста, заполните учетные данные API, предоставленные вашим DNS-"
 "провайдером."
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr "Пожалуйста, заполните обязательные поля"
 
@@ -1483,7 +1483,7 @@ msgstr ""
 "API провайдера DNS."
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 msgid "Please input a filename"
 msgstr "Пожалуйста, введите имя файла"
 
@@ -1504,11 +1504,11 @@ msgstr ""
 msgid "Please input your E-mail!"
 msgstr "Введите ваш E-mail!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "Введите ваш пароль!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "Введите ваше имя пользователя!"
 
@@ -1530,7 +1530,7 @@ msgstr "Пожалуйста, выберите хотя бы один узел!"
 msgid "Pre-release"
 msgstr "Предварительный выпуск"
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "Настройки"
 
@@ -1647,7 +1647,7 @@ msgid "Removed successfully"
 msgstr "Успешно удалено"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 msgid "Rename"
 msgstr "Переименовать"
@@ -1731,9 +1731,9 @@ msgstr "Выполняется"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "Сохранить"
 
@@ -1741,19 +1741,19 @@ msgstr "Сохранить"
 msgid "Save Directive"
 msgstr "Сохранить директиву"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "Ошибка сохранения %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr "Сохранено успешно"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1788,13 +1788,13 @@ msgstr "Отправлено"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "Ошибка сервера"
@@ -1867,7 +1867,7 @@ msgstr "Путь к ключу SSL-сертификата"
 msgid "SSL Certificate Path"
 msgstr "Путь к SSL сертификату"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr "SSO Вход"
 
@@ -1945,8 +1945,9 @@ msgid "Sync Certificate Success"
 msgstr "Сертификат успешно синхронизирован"
 
 #: src/components/Notification/config.ts:12
+#, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr ""
 "Синхронизация конфигурации %{cert_name} с %{env_name} не удалась, "
@@ -2138,7 +2139,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr "Токен недействителен"
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr "Слишком много неудачных попыток входа, попробуйте позже"
 
@@ -2150,7 +2151,7 @@ msgstr ""
 "TOTP — это метод двухфакторной аутентификации, который использует алгоритм "
 "одноразового пароля на основе времени."
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr "Корзина"
 
@@ -2166,7 +2167,7 @@ msgstr "Тип"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2219,11 +2220,11 @@ msgstr "Использовать код восстановления"
 msgid "User"
 msgstr "Пользователь"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr "Пользователь заблокирован"
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "Имя пользователя"
 
@@ -2250,11 +2251,11 @@ msgstr "Просмотр"
 msgid "View all notifications"
 msgstr "Просмотреть все уведомления"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr "Подробно"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "View Mode"
 msgstr "Простой режим"

+ 70 - 70
app/src/language/vi_VN/app.po

@@ -42,8 +42,8 @@ msgstr "Người dùng"
 msgid "Action"
 msgstr "Hành động"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -52,8 +52,8 @@ msgstr "Hành động"
 msgid "Add"
 msgstr "Thêm"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 #, fuzzy
 msgid "Add Configuration"
 msgstr "Sửa cấu hình"
@@ -172,7 +172,7 @@ msgstr "Trợ lý"
 msgid "Attempts"
 msgstr ""
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 #, fuzzy
 msgid "Auth"
 msgstr "Tác giả"
@@ -195,8 +195,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "Đã bật tự động gia hạn SSL cho %{name}"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "Quay lại"
@@ -206,7 +206,7 @@ msgstr "Quay lại"
 msgid "Back Home"
 msgstr "Quay lại"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr ""
 
@@ -226,9 +226,9 @@ msgstr ""
 msgid "Base information"
 msgstr "Thông tin"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 msgid "Basic"
@@ -263,7 +263,7 @@ msgstr ""
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -317,7 +317,7 @@ msgid_plural "Changed Certificates"
 msgstr[0] "Thay đổi chứng chỉ"
 msgstr[1] "Thay đổi chứng chỉ"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "Changed Path"
 msgstr "Thay đổi chứng chỉ"
@@ -371,7 +371,7 @@ msgstr "Tệp cấu hình được kiểm tra thành công"
 msgid "Configuration Name"
 msgstr "Tên cấu hình"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "Cấu hình"
 
@@ -422,12 +422,12 @@ msgstr "Ngày tạo"
 msgid "Create Another"
 msgstr "Tạo thêm"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 #, fuzzy
 msgid "Create File"
 msgstr "Ngày tạo"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 #, fuzzy
 msgid "Create Folder"
 msgstr "Tạo thêm"
@@ -477,8 +477,8 @@ msgid ""
 "indicator."
 msgstr ""
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "Bảng điều khiển"
 
@@ -516,7 +516,7 @@ msgstr "Xoá trang web: %{site_name}"
 msgid "Deleted successfully"
 msgstr "Đã xoá thành công"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -718,7 +718,7 @@ msgstr "Đã sao chép thành công vào máy cục bộ"
 msgid "Edit %{n}"
 msgstr "Sửa %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "Sửa cấu hình"
 
@@ -909,16 +909,16 @@ msgstr "Đã hoàn thành"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Người dùng Trung Quốc: https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "Định dạng code"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 #, fuzzy
 msgid "Format error %{msg}"
 msgstr "Lưu lỗi %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 #, fuzzy
 msgid "Format successfully"
 msgstr "Định dạng thành công"
@@ -1005,7 +1005,7 @@ msgstr "Xuất"
 msgid "Import Certificate"
 msgstr "Chứng chỉ"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 #, fuzzy
 msgid "Incorrect username or password"
 msgstr "Tên người dùng hoặc mật khẩu không chính xác"
@@ -1049,12 +1049,12 @@ msgstr ""
 msgid "Invalid"
 msgstr "Hợp lệ"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr ""
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 #, fuzzy
 msgid "Invalid filename"
 msgstr "E-mail không chính xác!"
@@ -1132,7 +1132,7 @@ msgstr "Giấy phép"
 msgid "Link Start"
 msgstr "Liên kết bắt đầu"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr ""
 
@@ -1151,7 +1151,7 @@ msgid "Load successfully"
 msgstr "Lưu thành công"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 #, fuzzy
 msgid "Local"
 msgstr "Location"
@@ -1169,11 +1169,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "Log"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "Đăng nhập"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "Đăng nhập thành công"
 
@@ -1181,7 +1181,7 @@ msgstr "Đăng nhập thành công"
 msgid "Logout successful"
 msgstr "Đã đăng xuất"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr ""
 
@@ -1204,8 +1204,8 @@ msgstr ""
 "Đảm bảo rằng bạn đã định cấu hình proxy ngược (reverse proxy) thư mục .well-"
 "known tới HTTPChallengePort (default: 9180) trước khi ký chứng chỉ SSL."
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "Quản lý cấu hình"
 
@@ -1249,9 +1249,9 @@ msgid "Model"
 msgstr "Run Mode"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 msgid "Modify"
 msgstr "Sửa"
@@ -1265,7 +1265,7 @@ msgstr "Sửa chứng chỉ"
 msgid "Modify Config"
 msgstr "Sửa cấu hình"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "Modify Mode"
 msgstr "Sửa"
@@ -1280,7 +1280,7 @@ msgstr "Single Directive"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1313,7 +1313,7 @@ msgstr "Tổng lưu lượng mạng đã gửi"
 msgid "New name"
 msgstr "Username"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 #, fuzzy
 msgid "New Path"
 msgstr "Đường dẫn"
@@ -1328,7 +1328,7 @@ msgstr "Đã có phiên bản mới"
 msgid "Next"
 msgstr "Tiếp theo"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr ""
 
@@ -1428,13 +1428,13 @@ msgid ""
 "Firefox."
 msgstr ""
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "Ngoại tuyến"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr ""
@@ -1463,14 +1463,14 @@ msgstr ""
 msgid "Once the verification is complete, the records will be removed."
 msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "Trực tuyến"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr ""
 
@@ -1487,13 +1487,13 @@ msgstr "Hệ điều hành"
 msgid "OS:"
 msgstr "Hệ điều hành:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "Ghi đè"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1503,7 +1503,7 @@ msgstr "Ghi đè tập tin đã tồn tại"
 msgid "Params"
 msgstr "Tham số"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "Mật khẩu"
 
@@ -1511,7 +1511,7 @@ msgstr "Mật khẩu"
 msgid "Password (*)"
 msgstr "Mật khẩu (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1540,7 +1540,7 @@ msgid ""
 msgstr ""
 "Vui lòng điền thông tin xác thực API do nhà cung cấp DNS của bạn cung cấp"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr ""
 
@@ -1553,7 +1553,7 @@ msgstr ""
 "thực DNS, sau đó chọn nhà cung cấp DNS"
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 #, fuzzy
 msgid "Please input a filename"
 msgstr "Vui lòng nhập username!"
@@ -1575,11 +1575,11 @@ msgstr ""
 msgid "Please input your E-mail!"
 msgstr "Vui lòng nhập E-mail của bạn!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "Vui lòng nhập mật khẩu!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "Vui lòng nhập username!"
 
@@ -1599,7 +1599,7 @@ msgstr ""
 msgid "Pre-release"
 msgstr ""
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "Cài đặt"
 
@@ -1725,7 +1725,7 @@ msgid "Removed successfully"
 msgstr "Xoá thành công"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 #, fuzzy
 msgid "Rename"
@@ -1818,9 +1818,9 @@ msgstr "Running"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "Lưu"
 
@@ -1828,20 +1828,20 @@ msgstr "Lưu"
 msgid "Save Directive"
 msgstr "Lưu Directive"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "Đã xảy ra lỗi khi lưu %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 #, fuzzy
 msgid "Save successfully"
 msgstr "Lưu thành công"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1874,13 +1874,13 @@ msgstr "Gửi"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "Lỗi máy chủ"
@@ -1954,7 +1954,7 @@ msgstr ""
 msgid "SSL Certificate Path"
 msgstr ""
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr ""
 
@@ -2037,7 +2037,7 @@ msgstr "Gia hạn chứng chỉ SSL thành công"
 #: src/components/Notification/config.ts:12
 #, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
@@ -2216,7 +2216,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr ""
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr ""
 
@@ -2226,7 +2226,7 @@ msgid ""
 "password algorithm."
 msgstr ""
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr ""
 
@@ -2242,7 +2242,7 @@ msgstr "Loại"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2299,11 +2299,11 @@ msgstr ""
 msgid "User"
 msgstr "Người dùng"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr ""
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "Username"
 
@@ -2332,12 +2332,12 @@ msgstr "Xem"
 msgid "View all notifications"
 msgstr "Xem tất cả thông báo"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #, fuzzy
 msgid "View Details"
 msgstr "Chi tiết"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 #, fuzzy
 msgid "View Mode"
 msgstr "Cơ bản"

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


+ 74 - 74
app/src/language/zh_CN/app.po

@@ -11,7 +11,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "Generated-By: easygettext\n"
-"X-Generator: Poedit 3.4.4\n"
+"X-Generator: Poedit 3.5\n"
 
 #: src/views/user/userColumns.tsx:32
 msgid "2FA"
@@ -45,8 +45,8 @@ msgstr "ACME 用户"
 msgid "Action"
 msgstr "操作"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -55,8 +55,8 @@ msgstr "操作"
 msgid "Add"
 msgstr "添加"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr "添加配置"
 
@@ -162,7 +162,7 @@ msgstr "助手"
 msgid "Attempts"
 msgstr "尝试次数"
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr "认证"
 
@@ -184,8 +184,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "成功启用 %{name} 自动续签"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "返回"
@@ -194,7 +194,7 @@ msgstr "返回"
 msgid "Back Home"
 msgstr "返回首页"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr "返回列表"
 
@@ -214,9 +214,9 @@ msgstr "禁用至"
 msgid "Base information"
 msgstr "基本信息"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr "基本"
@@ -248,7 +248,7 @@ msgstr "CADir"
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -294,7 +294,7 @@ msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgstr[0] "变更证书"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "Changed Path"
 msgstr "变更后的路径"
 
@@ -344,7 +344,7 @@ msgstr "配置文件测试成功"
 msgid "Configuration Name"
 msgstr "配置名称"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "配置"
 
@@ -394,11 +394,11 @@ msgstr "创建"
 msgid "Create Another"
 msgstr "再创建一个"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 msgid "Create File"
 msgstr "创建文件"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 msgid "Create Folder"
 msgstr "创建文件夹"
 
@@ -446,8 +446,8 @@ msgid ""
 "indicator."
 msgstr "自定义显示在环境指示器中的本地服务器名称。"
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "仪表盘"
 
@@ -483,7 +483,7 @@ msgstr "删除 Stream: %{stream_name}"
 msgid "Deleted successfully"
 msgstr "删除成功"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -494,12 +494,12 @@ msgstr "部署"
 #: src/views/domain/components/Deploy.vue:60
 #: src/views/stream/components/Deploy.vue:60
 msgid "Deploy %{conf_name} to %{node_name} failed"
-msgstr "部署%{conf_name}到%{node_name}失败"
+msgstr "部署 %{conf_name}  %{node_name} 失败"
 
 #: src/views/domain/components/Deploy.vue:37
 #: src/views/stream/components/Deploy.vue:37
 msgid "Deploy %{conf_name} to %{node_name} successfully"
-msgstr "成功地将%{conf_name}部署到%{node_name}"
+msgstr "部署 %{conf_name} 到 %{node_name} 成功"
 
 #: src/views/domain/components/Deploy.vue:35
 #: src/views/stream/components/Deploy.vue:35
@@ -667,7 +667,7 @@ msgstr "成功复制到本地"
 msgid "Edit %{n}"
 msgstr "编辑 %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "编辑配置"
 
@@ -846,15 +846,15 @@ msgstr "完成"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "中国用户:https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "代码格式化"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr "保存错误 %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr "格式化成功"
 
@@ -938,7 +938,7 @@ msgstr "导入"
 msgid "Import Certificate"
 msgstr "导入证书"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr "用户名或密码错误"
 
@@ -979,12 +979,12 @@ msgstr "间隔"
 msgid "Invalid"
 msgstr "无效的"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr "无效的二步验证码或恢复密码"
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr "文件名无效"
 
@@ -1055,7 +1055,7 @@ msgstr "开源许可"
 msgid "Link Start"
 msgstr "链接"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr "列表"
 
@@ -1072,7 +1072,7 @@ msgid "Load successfully"
 msgstr "加载成功"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 msgid "Local"
 msgstr "本地"
 
@@ -1088,11 +1088,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "日志"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "登录"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "登录成功"
 
@@ -1100,7 +1100,7 @@ msgstr "登录成功"
 msgid "Logout successful"
 msgstr "登出成功"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr "Logrotate"
 
@@ -1126,8 +1126,8 @@ msgstr ""
 "在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 "
 "HTTPChallengePort。"
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "配置管理"
 
@@ -1169,9 +1169,9 @@ msgid "Model"
 msgstr "模型"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr "修改"
 
@@ -1183,7 +1183,7 @@ msgstr "修改证书"
 msgid "Modify Config"
 msgstr "修改配置文件"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "Modify Mode"
 msgstr "修改模式"
 
@@ -1196,7 +1196,7 @@ msgstr "多行指令"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1228,7 +1228,7 @@ msgstr "上传流量"
 msgid "New name"
 msgstr "新名称"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "New Path"
 msgstr "新路径"
 
@@ -1242,7 +1242,7 @@ msgstr "新版本发布"
 msgid "Next"
 msgstr "下一步"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr "Nginx"
 
@@ -1336,13 +1336,13 @@ msgid ""
 "Firefox."
 msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能会导致错误。"
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "离线"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr "确定"
@@ -1371,14 +1371,14 @@ msgstr "确定"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "一旦验证完成,这些记录将被删除。"
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "在线"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "OpenAI"
 
@@ -1394,13 +1394,13 @@ msgstr "OS"
 msgid "OS:"
 msgstr "OS:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "覆盖"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1410,7 +1410,7 @@ msgstr "覆盖现有文件"
 msgid "Params"
 msgstr "参数"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "密码"
 
@@ -1418,7 +1418,7 @@ msgstr "密码"
 msgid "Password (*)"
 msgstr "密码 (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1446,7 +1446,7 @@ msgid ""
 "provider."
 msgstr "请填写 DNS 提供商提供的 API 验证凭据。"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr "请填写必填字段"
 
@@ -1459,7 +1459,7 @@ msgstr ""
 "商的 API。"
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 msgid "Please input a filename"
 msgstr "请输入文件名"
 
@@ -1478,11 +1478,11 @@ msgstr "请输入名称,这将被用作新配置的文件名!"
 msgid "Please input your E-mail!"
 msgstr "请输入您的邮箱!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "请输入您的密码!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "请输入您的用户名!"
 
@@ -1502,7 +1502,7 @@ msgstr "请至少选择一个节点!"
 msgid "Pre-release"
 msgstr "预发布"
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "偏好设置"
 
@@ -1619,7 +1619,7 @@ msgid "Removed successfully"
 msgstr "删除成功"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 msgid "Rename"
 msgstr "重命名"
@@ -1702,9 +1702,9 @@ msgstr "运行中"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "保存"
 
@@ -1712,19 +1712,19 @@ msgstr "保存"
 msgid "Save Directive"
 msgstr "保存指令"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "保存错误 %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr "保存成功"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1757,13 +1757,13 @@ msgstr "上传"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "服务器错误"
@@ -1834,7 +1834,7 @@ msgstr "SSL证书密钥路径"
 msgid "SSL Certificate Path"
 msgstr "SSL证书路径"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr "SSO 登录"
 
@@ -1911,10 +1911,10 @@ msgstr "同步证书成功"
 
 #: src/components/Notification/config.ts:12
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
 msgstr ""
-"同步配置 %{cert_name} 到 %{env_name} 失败,请将远程 Nginx UI 升级到最新版本"
+"同步配置 %{config_name} 到 %{env_name} 失败,请将远程 Nginx UI 升级到最新版本"
 
 #: src/components/Notification/config.ts:16
 msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
@@ -2085,7 +2085,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr "Token 无效"
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr "登录失败次数过多,请稍后再试"
 
@@ -2095,7 +2095,7 @@ msgid ""
 "password algorithm."
 msgstr "TOTP 是一种使用基于时间的一次性密码算法的双因素身份验证方法。"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr "回收站"
 
@@ -2111,7 +2111,7 @@ msgstr "类型"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2164,11 +2164,11 @@ msgstr "使用恢复代码"
 msgid "User"
 msgstr "用户"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr "用户被禁止"
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "用户名"
 
@@ -2195,11 +2195,11 @@ msgstr "查看"
 msgid "View all notifications"
 msgstr "查看全部通知"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr "查看详情"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "View Mode"
 msgstr "预览模式"
 

+ 96 - 86
app/src/language/zh_TW/app.po

@@ -49,8 +49,8 @@ msgstr "ACME 用戶"
 msgid "Action"
 msgstr "操作"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:202
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:203
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:162
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
@@ -59,8 +59,8 @@ msgstr "操作"
 msgid "Add"
 msgstr "新增"
 
-#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:135
-#: src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:112 src/views/config/ConfigEditor.vue:143
+#: src/views/config/ConfigEditor.vue:204
 msgid "Add Configuration"
 msgstr "添加配置"
 
@@ -166,7 +166,7 @@ msgstr "助理"
 msgid "Attempts"
 msgstr "嘗試次數"
 
-#: src/views/preference/Preference.vue:116
+#: src/views/preference/Preference.vue:122
 msgid "Auth"
 msgstr "身份驗證"
 
@@ -188,8 +188,8 @@ msgid "Auto-renewal enabled for %{name}"
 msgstr "已啟用 %{name} 的自動續簽"
 
 #: src/views/certificate/CertificateEditor.vue:247
-#: src/views/config/ConfigEditor.vue:205 src/views/config/ConfigList.vue:173
-#: src/views/config/ConfigList.vue:99 src/views/domain/DomainEdit.vue:253
+#: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:107
+#: src/views/config/ConfigList.vue:181 src/views/domain/DomainEdit.vue:253
 #: src/views/nginx_log/NginxLog.vue:168 src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgstr "返回"
@@ -198,7 +198,7 @@ msgstr "返回"
 msgid "Back Home"
 msgstr "返回首頁"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:215
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:216
 msgid "Back to list"
 msgstr "返回列表"
 
@@ -218,9 +218,9 @@ msgstr "禁止至"
 msgid "Base information"
 msgstr "基本資訊"
 
-#: src/views/config/ConfigEditor.vue:233
+#: src/views/config/ConfigEditor.vue:241
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:110
+#: src/views/preference/Preference.vue:116
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgstr "基本"
@@ -252,7 +252,7 @@ msgstr "CADir"
 
 #: src/components/ChatGPT/ChatGPT.vue:252
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:55
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:252
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:153
 #: src/views/domain/cert/components/ObtainCert.vue:137
 #: src/views/domain/components/Deploy.vue:21
@@ -298,7 +298,7 @@ msgid "Changed Certificate"
 msgid_plural "Changed Certificates"
 msgstr[0] "變更後憑證"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "Changed Path"
 msgstr "變更後路徑"
 
@@ -348,7 +348,7 @@ msgstr "設定檔案測試成功"
 msgid "Configuration Name"
 msgstr "設定名稱"
 
-#: src/views/config/ConfigList.vue:91
+#: src/views/config/ConfigList.vue:99
 msgid "Configurations"
 msgstr "設定"
 
@@ -398,11 +398,11 @@ msgstr "創建"
 msgid "Create Another"
 msgstr "再建立一個"
 
-#: src/views/config/ConfigList.vue:109
+#: src/views/config/ConfigList.vue:117
 msgid "Create File"
 msgstr "創建檔案"
 
-#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:116
+#: src/views/config/components/Mkdir.vue:48 src/views/config/ConfigList.vue:124
 msgid "Create Folder"
 msgstr "創建資料夾"
 
@@ -450,8 +450,8 @@ msgid ""
 "indicator."
 msgstr "自訂本地伺服器名稱以顯示在環境指示器中。"
 
-#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:125
-#: src/views/config/ConfigEditor.vue:86 src/views/config/ConfigList.vue:57
+#: src/routes/index.ts:39 src/views/config/ConfigEditor.vue:133
+#: src/views/config/ConfigEditor.vue:94 src/views/config/ConfigList.vue:65
 msgid "Dashboard"
 msgstr "儀表板"
 
@@ -487,7 +487,7 @@ msgstr "刪除 Stream:%{stream_name}"
 msgid "Deleted successfully"
 msgstr "刪除成功"
 
-#: src/views/config/ConfigEditor.vue:276
+#: src/views/config/ConfigEditor.vue:284
 #: src/views/domain/components/Deploy.vue:104
 #: src/views/domain/components/RightSettings.vue:93
 #: src/views/stream/components/Deploy.vue:103
@@ -671,7 +671,7 @@ msgstr "成功複製至本機"
 msgid "Edit %{n}"
 msgstr "編輯 %{n}"
 
-#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:196
+#: src/routes/index.ts:122 src/views/config/ConfigEditor.vue:204
 msgid "Edit Configuration"
 msgstr "編輯設定"
 
@@ -850,15 +850,15 @@ msgstr "完成"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "中國使用者:https://mirror.ghproxy.com/"
 
-#: src/views/config/ConfigEditor.vue:208
+#: src/views/config/ConfigEditor.vue:216
 msgid "Format Code"
 msgstr "格式化程式碼"
 
-#: src/views/config/ConfigEditor.vue:175
+#: src/views/config/ConfigEditor.vue:183
 msgid "Format error %{msg}"
 msgstr "格式錯誤 %{msg}"
 
-#: src/views/config/ConfigEditor.vue:173
+#: src/views/config/ConfigEditor.vue:181
 msgid "Format successfully"
 msgstr "成功格式化"
 
@@ -918,8 +918,9 @@ msgstr "如果留空,將使用默認的 CA Dir。"
 msgid ""
 "If the number of login failed attempts from a ip reach the max attempts in "
 "ban threshold minutes, the ip will be banned for a period of time."
-msgstr "如果來自某個 IP 的登錄失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP "
-"將被禁止一段時間。"
+msgstr ""
+"如果來自某個 IP 的登錄失敗次數在禁止閾值分鐘內達到最大嘗試次數,該 IP 將被禁"
+"止一段時間。"
 
 #: src/views/preference/components/TOTP.vue:108
 msgid ""
@@ -941,7 +942,7 @@ msgstr "導入"
 msgid "Import Certificate"
 msgstr "導入憑證"
 
-#: src/views/other/Login.vue:71
+#: src/views/other/Login.vue:76
 msgid "Incorrect username or password"
 msgstr "使用者名稱或密碼不正確"
 
@@ -982,12 +983,12 @@ msgstr "間隔"
 msgid "Invalid"
 msgstr "無效"
 
-#: src/views/other/Login.vue:81
+#: src/views/other/Login.vue:86
 msgid "Invalid 2FA or recovery code"
 msgstr "無效的多重因素驗證或恢復碼"
 
 #: src/views/config/components/Rename.vue:65
-#: src/views/config/ConfigEditor.vue:242
+#: src/views/config/ConfigEditor.vue:250
 msgid "Invalid filename"
 msgstr "無效的檔案名"
 
@@ -1058,7 +1059,7 @@ msgstr "開源授權"
 msgid "Link Start"
 msgstr "連結開始"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:192
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:193
 msgid "List"
 msgstr "列表"
 
@@ -1075,7 +1076,7 @@ msgid "Load successfully"
 msgstr "加載成功"
 
 #: src/components/EnvIndicator/EnvIndicator.vue:39
-#: src/components/NodeSelector/NodeSelector.vue:68
+#: src/components/NodeSelector/NodeSelector.vue:71
 msgid "Local"
 msgstr "本機"
 
@@ -1091,11 +1092,11 @@ msgstr "Locations"
 msgid "Log"
 msgstr "日誌"
 
-#: src/routes/index.ts:305 src/views/other/Login.vue:192
+#: src/routes/index.ts:305 src/views/other/Login.vue:207
 msgid "Login"
 msgstr "登入"
 
-#: src/views/other/Login.vue:125 src/views/other/Login.vue:60
+#: src/views/other/Login.vue:130 src/views/other/Login.vue:63
 msgid "Login successful"
 msgstr "登入成功"
 
@@ -1103,7 +1104,7 @@ msgstr "登入成功"
 msgid "Logout successful"
 msgstr "登出成功"
 
-#: src/views/preference/Preference.vue:134
+#: src/views/preference/Preference.vue:140
 msgid "Logrotate"
 msgstr "Logrotate"
 
@@ -1116,10 +1117,10 @@ msgid ""
 "of Nginx UI will execute the logrotate command at the interval you set in "
 "minutes."
 msgstr ""
-"預設情況下,對於在主機上安裝 Nginx UI 的用戶,大多數主流 Linux "
-"發行版都啟用了 logrotate,因此您無需修改此頁面的參數。對於使用 Docker "
-"容器安裝 Nginx UI 的用戶,您可以手動啟用此選項。Nginx UI 的 crontab "
-"任務調度器將按照您設定的分鐘間隔執行 logrotate 命令。"
+"預設情況下,對於在主機上安裝 Nginx UI 的用戶,大多數主流 Linux 發行版都啟用"
+"了 logrotate,因此您無需修改此頁面的參數。對於使用 Docker 容器安裝 Nginx UI "
+"的用戶,您可以手動啟用此選項。Nginx UI 的 crontab 任務調度器將按照您設定的分"
+"鐘間隔執行 logrotate 命令。"
 
 #: src/views/domain/cert/components/AutoCertStepOne.vue:54
 msgid ""
@@ -1128,8 +1129,8 @@ msgid ""
 msgstr ""
 "在取得憑證前,請確保您已將 .well-known 目錄反向代理到 HTTPChallengePort。"
 
-#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:130
-#: src/views/config/ConfigEditor.vue:91 src/views/config/ConfigList.vue:62
+#: src/routes/index.ts:102 src/views/config/ConfigEditor.vue:138
+#: src/views/config/ConfigEditor.vue:99 src/views/config/ConfigList.vue:70
 msgid "Manage Configs"
 msgstr "管理設定"
 
@@ -1171,9 +1172,9 @@ msgid "Model"
 msgstr "模型"
 
 #: src/components/ChatGPT/ChatGPT.vue:248
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:531
-#: src/views/config/ConfigList.vue:151
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgstr "修改"
 
@@ -1185,7 +1186,7 @@ msgstr "修改憑證"
 msgid "Modify Config"
 msgstr "修改設定"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "Modify Mode"
 msgstr "修改模式"
 
@@ -1198,7 +1199,7 @@ msgstr "多行指令"
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:65 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:248
+#: src/views/config/ConfigEditor.vue:256
 #: src/views/domain/components/RightSettings.vue:83
 #: src/views/domain/components/SiteDuplicate.vue:129
 #: src/views/domain/DomainList.vue:13
@@ -1230,7 +1231,7 @@ msgstr "上傳流量"
 msgid "New name"
 msgstr "新名稱"
 
-#: src/views/config/ConfigEditor.vue:260
+#: src/views/config/ConfigEditor.vue:268
 msgid "New Path"
 msgstr "新路徑"
 
@@ -1244,7 +1245,7 @@ msgstr "新版本發布"
 msgid "Next"
 msgstr "下一步"
 
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:128
 msgid "Nginx"
 msgstr "Nginx"
 
@@ -1338,13 +1339,13 @@ msgid ""
 "Firefox."
 msgstr "OCSP 必須裝訂可能會導致某些用戶在首次使用 Firefox 訪問時出現錯誤。"
 
-#: src/components/NodeSelector/NodeSelector.vue:91
+#: src/components/NodeSelector/NodeSelector.vue:94
 #: src/views/dashboard/Environments.vue:107
 #: src/views/environment/envColumns.tsx:90
 msgid "Offline"
 msgstr "離線"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:253
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:254
 #: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:154
 msgid "Ok"
 msgstr "確定"
@@ -1373,14 +1374,14 @@ msgstr "確定"
 msgid "Once the verification is complete, the records will be removed."
 msgstr "驗證完成後,記錄將被刪除。"
 
-#: src/components/NodeSelector/NodeSelector.vue:71
-#: src/components/NodeSelector/NodeSelector.vue:85
+#: src/components/NodeSelector/NodeSelector.vue:74
+#: src/components/NodeSelector/NodeSelector.vue:88
 #: src/views/dashboard/Environments.vue:100
 #: src/views/environment/envColumns.tsx:86
 msgid "Online"
 msgstr "線上"
 
-#: src/views/preference/Preference.vue:128
+#: src/views/preference/Preference.vue:134
 msgid "OpenAI"
 msgstr "OpenAI"
 
@@ -1396,13 +1397,13 @@ msgstr "作業系統"
 msgid "OS:"
 msgstr "作業系統:"
 
-#: src/views/config/ConfigEditor.vue:285
+#: src/views/config/ConfigEditor.vue:293
 #: src/views/domain/components/Deploy.vue:88
 #: src/views/stream/components/Deploy.vue:87
 msgid "Overwrite"
 msgstr "覆蓋"
 
-#: src/views/config/ConfigEditor.vue:289
+#: src/views/config/ConfigEditor.vue:297
 #: src/views/domain/components/Deploy.vue:92
 #: src/views/stream/components/Deploy.vue:91
 msgid "Overwrite exist file"
@@ -1412,7 +1413,7 @@ msgstr "覆蓋現有檔案"
 msgid "Params"
 msgstr "參數"
 
-#: src/views/other/Login.vue:169 src/views/user/userColumns.tsx:18
+#: src/views/other/Login.vue:174 src/views/user/userColumns.tsx:18
 msgid "Password"
 msgstr "密碼"
 
@@ -1420,7 +1421,7 @@ msgstr "密碼"
 msgid "Password (*)"
 msgstr "密碼 (*)"
 
-#: src/views/config/ConfigEditor.vue:254
+#: src/views/config/ConfigEditor.vue:262
 #: src/views/domain/ngx_conf/LocationEditor.vue:118
 #: src/views/domain/ngx_conf/LocationEditor.vue:90
 msgid "Path"
@@ -1448,7 +1449,7 @@ msgid ""
 "provider."
 msgstr "請填寫您的 DNS 提供商提供的 API 認證憑據。"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:132
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:133
 msgid "Please fill in the required fields"
 msgstr "請填寫必填欄位"
 
@@ -1456,11 +1457,12 @@ msgstr "請填寫必填欄位"
 msgid ""
 "Please first add credentials in Certification > DNS Credentials, and then "
 "select one of the credentialsbelow to request the API of the DNS provider."
-msgstr "請先在「憑證」 > 「DNS 認證」中新增認證,然後選擇以下認證之一以請求 DNS "
-"供應商的 API。"
+msgstr ""
+"請先在「憑證」 > 「DNS 認證」中新增認證,然後選擇以下認證之一以請求 DNS 供應"
+"商的 API。"
 
 #: src/views/config/components/Rename.vue:64
-#: src/views/config/ConfigEditor.vue:241
+#: src/views/config/ConfigEditor.vue:249
 msgid "Please input a filename"
 msgstr "請輸入檔案名稱"
 
@@ -1479,11 +1481,11 @@ msgstr "請輸入名稱,這將作為新設定的檔名!"
 msgid "Please input your E-mail!"
 msgstr "請輸入您的電子郵件!"
 
-#: src/views/other/Install.vue:44 src/views/other/Login.vue:43
+#: src/views/other/Install.vue:44 src/views/other/Login.vue:44
 msgid "Please input your password!"
 msgstr "請輸入您的密碼!"
 
-#: src/views/other/Install.vue:38 src/views/other/Login.vue:37
+#: src/views/other/Install.vue:38 src/views/other/Login.vue:38
 msgid "Please input your username!"
 msgstr "請輸入您的使用者名稱!"
 
@@ -1503,7 +1505,7 @@ msgstr "請至少選擇一個節點!"
 msgid "Pre-release"
 msgstr "預先發布"
 
-#: src/routes/index.ts:260 src/views/preference/Preference.vue:105
+#: src/routes/index.ts:260 src/views/preference/Preference.vue:111
 msgid "Preference"
 msgstr "偏好設定"
 
@@ -1620,7 +1622,7 @@ msgid "Removed successfully"
 msgstr "移除成功"
 
 #: src/views/config/components/Rename.vue:55
-#: src/views/config/ConfigList.vue:159
+#: src/views/config/ConfigList.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:123
 msgid "Rename"
 msgstr "重命名"
@@ -1629,13 +1631,15 @@ msgstr "重命名"
 msgid ""
 "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade the "
 "remote Nginx UI to the latest version"
-msgstr "將 %{orig_path} 重命名為 %{new_path} 在 %{env_name} 失敗,請將遠程 Nginx UI "
+msgstr ""
+"將 %{orig_path} 重命名為 %{new_path} 在 %{env_name} 失敗,請將遠程 Nginx UI "
 "升級到最新版本"
 
 #: src/components/Notification/config.ts:35
 msgid ""
 "Rename %{orig_path} to %{new_path} on %{env_name} failed, response: %{resp}"
-msgstr "在 %{env_name} 上將 %{orig_path} 重命名為 %{new_path} 失敗,回應:%{resp}"
+msgstr ""
+"在 %{env_name} 上將 %{orig_path} 重命名為 %{new_path} 失敗,回應:%{resp}"
 
 #: src/components/Notification/config.ts:23
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
@@ -1701,9 +1705,9 @@ msgstr "執行中"
 
 #: src/components/ChatGPT/ChatGPT.vue:251
 #: src/views/certificate/CertificateEditor.vue:254
-#: src/views/config/ConfigEditor.vue:214 src/views/domain/DomainEdit.vue:260
+#: src/views/config/ConfigEditor.vue:222 src/views/domain/DomainEdit.vue:260
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252
+#: src/views/preference/Preference.vue:151 src/views/stream/StreamEdit.vue:252
 msgid "Save"
 msgstr "儲存"
 
@@ -1711,19 +1715,19 @@ msgstr "儲存"
 msgid "Save Directive"
 msgstr "儲存指令"
 
-#: src/views/config/ConfigEditor.vue:163 src/views/domain/DomainAdd.vue:46
+#: src/views/config/ConfigEditor.vue:171 src/views/domain/DomainAdd.vue:46
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
 msgid "Save error %{msg}"
 msgstr "儲存錯誤 %{msg}"
 
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:121
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:122
 #: src/views/certificate/CertificateEditor.vue:46
-#: src/views/preference/Preference.vue:74
+#: src/views/preference/Preference.vue:79
 msgid "Save successfully"
 msgstr "儲存成功"
 
-#: src/views/config/ConfigEditor.vue:159 src/views/domain/DomainAdd.vue:37
+#: src/views/config/ConfigEditor.vue:167 src/views/domain/DomainAdd.vue:37
 #: src/views/domain/DomainEdit.vue:143
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39
 #: src/views/stream/StreamEdit.vue:138
@@ -1756,13 +1760,13 @@ msgstr "傳送"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:252
 #: src/views/config/components/Mkdir.vue:37
 #: src/views/config/components/Rename.vue:44
-#: src/views/config/ConfigEditor.vue:100 src/views/domain/DomainList.vue:81
+#: src/views/config/ConfigEditor.vue:108 src/views/domain/DomainList.vue:81
 #: src/views/environment/BatchUpgrader.vue:57
 #: src/views/environment/Environment.vue:15 src/views/other/Install.vue:68
 #: src/views/preference/AuthSettings.vue:49
 #: src/views/preference/components/TOTP.vue:42
 #: src/views/preference/components/TOTP.vue:55
-#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113
+#: src/views/preference/Preference.vue:83 src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgstr "伺服器錯誤"
@@ -1833,7 +1837,7 @@ msgstr "SSL 憑證金鑰路徑"
 msgid "SSL Certificate Path"
 msgstr "SSL 憑證路徑"
 
-#: src/views/other/Login.vue:203
+#: src/views/other/Login.vue:189
 msgid "SSO Login"
 msgstr "SSO 登錄"
 
@@ -1888,7 +1892,8 @@ msgstr "同步憑證"
 msgid ""
 "Sync Certificate %{cert_name} to %{env_name} failed, please upgrade the "
 "remote Nginx UI to the latest version"
-msgstr "同步憑證 %{cert_name} 到 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版本"
+msgstr ""
+"同步憑證 %{cert_name} 到 %{env_name} 失敗,請將遠端 Nginx UI 升級到最新版本"
 
 #: src/components/Notification/cert.ts:16
 msgid "Sync Certificate %{cert_name} to %{env_name} failed, response: %{resp}"
@@ -1907,10 +1912,12 @@ msgid "Sync Certificate Success"
 msgstr "同步憑證成功"
 
 #: src/components/Notification/config.ts:12
+#, fuzzy
 msgid ""
-"Sync config %{cert_name} to %{env_name} failed, please upgrade the remote "
+"Sync config %{config_name} to %{env_name} failed, please upgrade the remote "
 "Nginx UI to the latest version"
-msgstr "同步配置 %{cert_name} 到 %{env_name} 失敗,請將遠程 Nginx UI 升級到最新版本"
+msgstr ""
+"同步配置 %{cert_name} 到 %{env_name} 失敗,請將遠程 Nginx UI 升級到最新版本"
 
 #: src/components/Notification/config.ts:16
 msgid "Sync config %{config_name} to %{env_name} failed, response: %{resp}"
@@ -1958,8 +1965,9 @@ msgid ""
 "The certificate for the domain will be checked 30 minutes, and will be "
 "renewed if it has been more than 1 week or the period you set in settings "
 "since it was last issued."
-msgstr "網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 "
-"週或您在設置中設定的時間,憑證將會自動更新。"
+msgstr ""
+"網域憑證將在 30 分鐘內接受檢查,如果自上次簽發以來已超過 1 週或您在設置中設定"
+"的時間,憑證將會自動更新。"
 
 #: src/views/other/Install.vue:50
 msgid "The filename cannot contain the following characters: %{c}"
@@ -1997,7 +2005,8 @@ msgid ""
 "The remote Nginx UI version is not compatible with the local Nginx UI "
 "version. To avoid potential errors, please upgrade the remote Nginx UI to "
 "match the local version."
-msgstr "遠端 Nginx UI 版本與本地 Nginx UI 版本不兼容。為避免潛在錯誤,請升級遠端 "
+msgstr ""
+"遠端 Nginx UI 版本與本地 Nginx UI 版本不兼容。為避免潛在錯誤,請升級遠端 "
 "Nginx UI 以匹配本地版本。"
 
 #: src/views/preference/BasicSettings.vue:120
@@ -2062,7 +2071,8 @@ msgstr "標題"
 msgid ""
 "To enable it, you need to install the Google or Microsoft Authenticator app "
 "on your mobile phone."
-msgstr "要啟用它,您需要在手機上安裝 Google 或 Microsoft Authenticator 應用程序。"
+msgstr ""
+"要啟用它,您需要在手機上安裝 Google 或 Microsoft Authenticator 應用程序。"
 
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:44
 msgid ""
@@ -2078,7 +2088,7 @@ msgstr ""
 msgid "Token is not valid"
 msgstr "令牌無效"
 
-#: src/views/other/Login.vue:74
+#: src/views/other/Login.vue:79
 msgid "Too many login failed attempts, please try again later"
 msgstr "登錄失敗次數過多,請稍後再試"
 
@@ -2088,7 +2098,7 @@ msgid ""
 "password algorithm."
 msgstr "TOTP 是一種使用基於時間的一次性密碼算法的多重因素驗證方法。"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:209
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:210
 msgid "Trash"
 msgstr "垃圾桶"
 
@@ -2104,7 +2114,7 @@ msgstr "類型"
 
 #: src/views/certificate/ACMEUser.vue:53
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:267
+#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:275
 #: src/views/domain/components/RightSettings.vue:86
 #: src/views/domain/DomainList.vue:41 src/views/environment/envColumns.tsx:124
 #: src/views/stream/components/RightSettings.vue:85
@@ -2157,11 +2167,11 @@ msgstr "使用恢復碼"
 msgid "User"
 msgstr "使用者名稱"
 
-#: src/views/other/Login.vue:77
+#: src/views/other/Login.vue:82
 msgid "User is banned"
 msgstr "用戶被禁止"
 
-#: src/views/other/Login.vue:159 src/views/user/userColumns.tsx:9
+#: src/views/other/Login.vue:164 src/views/user/userColumns.tsx:9
 msgid "Username"
 msgstr "使用者名稱"
 
@@ -2188,11 +2198,11 @@ msgstr "檢視"
 msgid "View all notifications"
 msgstr "查看所有通知"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:181
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:182
 msgid "View Details"
 msgstr "查看詳情"
 
-#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:268
+#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:269
 msgid "View Mode"
 msgstr "查看模式"
 

+ 4 - 4
app/src/views/domain/components/Deploy.vue

@@ -5,7 +5,7 @@ import type { Ref } from 'vue'
 import domain from '@/api/domain'
 import NodeSelector from '@/components/NodeSelector/NodeSelector.vue'
 
-const node_map = reactive({})
+const node_map = ref({})
 const target = ref([])
 const overwrite = ref(false)
 const enabled = ref(false)
@@ -21,7 +21,7 @@ function deploy() {
     cancelText: $gettext('Cancel'),
     onOk() {
       target.value.forEach(id => {
-        const node_name = node_map[id]
+        const node_name = node_map.value[id]
 
         // get source content
         domain.get(name.value).then(r => {
@@ -38,7 +38,7 @@ function deploy() {
                   { conf_name: name.value, node_name }),
             })
             if (enabled.value) {
-              domain.enable(name.value).then(() => {
+              domain.enable(name.value, { headers: { 'X-Node-ID': id } }).then(() => {
                 notification.success({
                   message: $gettext('Enable successfully'),
                   description:
@@ -76,8 +76,8 @@ function deploy() {
     <ContextHolder />
     <NodeSelector
       v-model:target="target"
+      v-model:map="node_map"
       hidden-local
-      :map="node_map"
     />
     <div class="node-deploy-control">
       <ACheckbox v-model:checked="enabled">

+ 1 - 1
app/src/views/domain/components/SiteDuplicate.vue

@@ -138,7 +138,7 @@ watch(() => gettext.current, () => {
       >
         <NodeSelector
           v-model:target="modelRef.target"
-          :map="node_map"
+          v-model:map="node_map"
         />
       </AFormItem>
     </AForm>

+ 1 - 1
app/src/views/stream/components/StreamDuplicate.vue

@@ -138,7 +138,7 @@ watch(() => gettext.current, () => {
       >
         <NodeSelector
           v-model:target="modelRef.target"
-          :map="node_map"
+          v-model:map="node_map"
         />
       </AFormItem>
     </AForm>

+ 52 - 52
go.mod

@@ -15,7 +15,7 @@ require (
 	github.com/gin-gonic/gin v1.10.0
 	github.com/go-acme/lego/v4 v4.18.0
 	github.com/go-co-op/gocron v1.37.0
-	github.com/go-playground/validator/v10 v10.22.0
+	github.com/go-playground/validator/v10 v10.22.1
 	github.com/golang-jwt/jwt/v4 v4.5.0
 	github.com/google/uuid v1.6.0
 	github.com/gorilla/websocket v1.5.3
@@ -28,27 +28,27 @@ require (
 	github.com/pquerna/otp v1.4.0
 	github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308
 	github.com/samber/lo v1.47.0
-	github.com/sashabaranov/go-openai v1.29.1
+	github.com/sashabaranov/go-openai v1.29.2
 	github.com/shirou/gopsutil/v3 v3.24.5
 	github.com/shopspring/decimal v1.4.0
 	github.com/spf13/cast v1.7.0
 	github.com/stretchr/testify v1.9.0
 	github.com/tufanbarisyildirim/gonginx v0.0.0-20240109151651-bb3e845a7a2a
 	go.uber.org/zap v1.27.0
-	golang.org/x/crypto v0.26.0
+	golang.org/x/crypto v0.27.0
 	gopkg.in/guregu/null.v4 v4.0.0
 	gopkg.in/ini.v1 v1.67.0
 	gorm.io/driver/sqlite v1.5.6
 	gorm.io/gen v0.3.26
-	gorm.io/gorm v1.25.11
-	gorm.io/plugin/dbresolver v1.5.2
+	gorm.io/gorm v1.25.12
+	gorm.io/plugin/dbresolver v1.5.3
 )
 
 require (
 	aead.dev/minisign v0.3.0 // indirect
-	cloud.google.com/go/auth v0.9.2 // indirect
+	cloud.google.com/go/auth v0.9.4 // indirect
 	cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
-	cloud.google.com/go/compute/metadata v0.5.0 // indirect
+	cloud.google.com/go/compute/metadata v0.5.1 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 // indirect
 	github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
@@ -75,23 +75,23 @@ require (
 	github.com/Shopify/goreferrer v0.0.0-20240724165105-aceaa0259138 // indirect
 	github.com/StackExchange/wmi v1.2.1 // indirect
 	github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect
-	github.com/aliyun/alibaba-cloud-sdk-go v1.63.11 // indirect
+	github.com/aliyun/alibaba-cloud-sdk-go v1.63.16 // indirect
 	github.com/andybalholm/brotli v1.1.0 // indirect
 	github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
-	github.com/aws/aws-sdk-go-v2 v1.30.4 // indirect
-	github.com/aws/aws-sdk-go-v2/config v1.27.31 // indirect
-	github.com/aws/aws-sdk-go-v2/credentials v1.17.30 // indirect
-	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect
+	github.com/aws/aws-sdk-go-v2 v1.30.5 // indirect
+	github.com/aws/aws-sdk-go-v2/config v1.27.33 // indirect
+	github.com/aws/aws-sdk-go-v2/credentials v1.17.32 // indirect
+	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect
 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
-	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect
-	github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.4 // indirect
-	github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect
-	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect
+	github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.6 // indirect
+	github.com/aws/aws-sdk-go-v2/service/route53 v1.43.2 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect
 	github.com/aws/smithy-go v1.20.4 // indirect
 	github.com/aymerick/douceur v0.2.0 // indirect
 	github.com/benbjohnson/clock v1.3.5 // indirect
@@ -100,8 +100,8 @@ require (
 	github.com/bytedance/sonic/loader v0.2.0 // indirect
 	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
-	github.com/civo/civogo v0.3.75 // indirect
-	github.com/cloudflare/cloudflare-go v0.103.0 // indirect
+	github.com/civo/civogo v0.3.77 // indirect
+	github.com/cloudflare/cloudflare-go v0.104.0 // indirect
 	github.com/cloudwego/base64x v0.1.4 // indirect
 	github.com/cloudwego/iasm v0.2.0 // indirect
 	github.com/cpu/goacmedns v0.1.1 // indirect
@@ -125,7 +125,7 @@ require (
 	github.com/go-ole/go-ole v1.3.0 // indirect
 	github.com/go-playground/locales v0.14.1 // indirect
 	github.com/go-playground/universal-translator v0.18.1 // indirect
-	github.com/go-resty/resty/v2 v2.14.0 // indirect
+	github.com/go-resty/resty/v2 v2.15.0 // indirect
 	github.com/go-sql-driver/mysql v1.8.1 // indirect
 	github.com/go-viper/mapstructure/v2 v2.1.0 // indirect
 	github.com/goccy/go-json v0.10.3 // indirect
@@ -140,7 +140,7 @@ require (
 	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/google/s2a-go v0.1.8 // indirect
-	github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect
+	github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
 	github.com/googleapis/gax-go/v2 v2.13.0 // indirect
 	github.com/gophercloud/gophercloud v1.14.0 // indirect
 	github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56 // indirect
@@ -179,12 +179,12 @@ require (
 	github.com/linode/linodego v1.40.0 // indirect
 	github.com/liquidweb/liquidweb-cli v0.7.0 // indirect
 	github.com/liquidweb/liquidweb-go v1.6.4 // indirect
-	github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 // indirect
+	github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
 	github.com/mailgun/raymond/v2 v2.0.48 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
+	github.com/mattn/go-sqlite3 v1.14.23 // indirect
 	github.com/microcosm-cc/bluemonday v1.0.27 // indirect
 	github.com/miekg/dns v1.1.62 // indirect
 	github.com/mimuret/golang-iij-dpf v0.9.1 // indirect
@@ -217,7 +217,7 @@ require (
 	github.com/sacloud/go-http v0.1.8 // indirect
 	github.com/sacloud/iaas-api-go v1.12.0 // indirect
 	github.com/sacloud/packages-go v0.0.10 // indirect
-	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect
+	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 // indirect
 	github.com/schollz/closestmatch v2.1.0+incompatible // indirect
 	github.com/selectel/domains-go v1.1.0 // indirect
 	github.com/selectel/go-selvpcclient/v3 v3.1.1 // indirect
@@ -230,14 +230,14 @@ require (
 	github.com/stretchr/objx v0.5.2 // indirect
 	github.com/tdewolff/minify/v2 v2.20.37 // indirect
 	github.com/tdewolff/parse/v2 v2.7.15 // indirect
-	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993 // indirect
-	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.993 // indirect
+	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002 // indirect
+	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002 // indirect
 	github.com/tklauser/go-sysconf v0.3.14 // indirect
 	github.com/tklauser/numcpus v0.8.0 // indirect
 	github.com/transip/gotransip/v6 v6.26.0 // indirect
 	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
 	github.com/ugorji/go/codec v1.2.12 // indirect
-	github.com/ultradns/ultradns-go-sdk v1.6.2-20240501171831-432d643 // indirect
+	github.com/ultradns/ultradns-go-sdk v1.7.0-20240913052650-970ca9a // indirect
 	github.com/valyala/bytebufferpool v1.0.0 // indirect
 	github.com/valyala/fasttemplate v1.2.2 // indirect
 	github.com/vinyldns/go-vinyldns v0.9.16 // indirect
@@ -246,33 +246,33 @@ require (
 	github.com/vultr/govultr/v2 v2.17.2 // indirect
 	github.com/vultr/govultr/v3 v3.9.1 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
-	github.com/yandex-cloud/go-genproto v0.0.0-20240829130658-0568052c5a6a // indirect
-	github.com/yandex-cloud/go-sdk v0.0.0-20240829131820-fa8ad79f88a4 // indirect
+	github.com/yandex-cloud/go-genproto v0.0.0-20240911120709-1fa0cb6f47c2 // indirect
+	github.com/yandex-cloud/go-sdk v0.0.0-20240911121212-e4e74d0d02f5 // indirect
 	github.com/yosssi/ace v0.0.5 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
 	go.opencensus.io v0.24.0 // indirect
-	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
-	go.opentelemetry.io/otel v1.29.0 // indirect
-	go.opentelemetry.io/otel/metric v1.29.0 // indirect
-	go.opentelemetry.io/otel/trace v1.29.0 // indirect
+	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
+	go.opentelemetry.io/otel v1.30.0 // indirect
+	go.opentelemetry.io/otel/metric v1.30.0 // indirect
+	go.opentelemetry.io/otel/trace v1.30.0 // indirect
 	go.uber.org/atomic v1.11.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/ratelimit v0.3.1 // indirect
-	golang.org/x/arch v0.9.0 // indirect
-	golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect
-	golang.org/x/mod v0.20.0 // indirect
-	golang.org/x/net v0.28.0 // indirect
-	golang.org/x/oauth2 v0.22.0 // indirect
+	golang.org/x/arch v0.10.0 // indirect
+	golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
+	golang.org/x/mod v0.21.0 // indirect
+	golang.org/x/net v0.29.0 // indirect
+	golang.org/x/oauth2 v0.23.0 // indirect
 	golang.org/x/sync v0.8.0 // indirect
-	golang.org/x/sys v0.24.0 // indirect
-	golang.org/x/text v0.17.0 // indirect
+	golang.org/x/sys v0.25.0 // indirect
+	golang.org/x/text v0.18.0 // indirect
 	golang.org/x/time v0.6.0 // indirect
-	golang.org/x/tools v0.24.0 // indirect
-	google.golang.org/api v0.195.0 // indirect
-	google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed // indirect
-	google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect
-	google.golang.org/grpc v1.66.0 // indirect
+	golang.org/x/tools v0.25.0 // indirect
+	google.golang.org/api v0.197.0 // indirect
+	google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
+	google.golang.org/grpc v1.66.2 // indirect
 	google.golang.org/protobuf v1.34.2 // indirect
 	gopkg.in/fsnotify.v1 v1.4.7 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -280,12 +280,12 @@ require (
 	gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.1 // indirect
+	gorm.io/datatypes v1.2.2 // indirect
 	gorm.io/driver/mysql v1.5.7 // indirect
 	gorm.io/driver/postgres v1.5.6 // indirect
 	gorm.io/hints v1.1.2 // indirect
-	k8s.io/api v0.31.0 // indirect
-	k8s.io/apimachinery v0.31.0 // indirect
+	k8s.io/api v0.31.1 // indirect
+	k8s.io/apimachinery v0.31.1 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
 	k8s.io/utils v0.0.0-20240902221715-702e33fdd3c3 // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect

+ 104 - 0
go.sum

@@ -108,6 +108,8 @@ cloud.google.com/go/auth v0.9.1 h1:+pMtLEV2k0AXKvs/tGZojuj6QaioxfUjOpMsG5Gtx+w=
 cloud.google.com/go/auth v0.9.1/go.mod h1:Sw8ocT5mhhXxFklyhT12Eiy0ed6tTrPMCJjSI8KhYLk=
 cloud.google.com/go/auth v0.9.2 h1:I+Rq388FYU8QdbVB1IiPd+6KNdrqtAPE/asiKHShBLM=
 cloud.google.com/go/auth v0.9.2/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk=
+cloud.google.com/go/auth v0.9.4 h1:DxF7imbEbiFu9+zdKC6cKBko1e8XeJnipNqIbWZ+kDI=
+cloud.google.com/go/auth v0.9.4/go.mod h1:SHia8n6//Ya940F1rLimhJCjjx7KE17t0ctFEci3HkA=
 cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
 cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
 cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
@@ -192,6 +194,8 @@ cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxB
 cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
 cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
 cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
+cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs=
+cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
 cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY=
 cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck=
 cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w=
@@ -707,6 +711,8 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.63.7 h1:MOFLOVlBI1MvP4I0cwb9cXf83GNcMs
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.7/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.11 h1:U+8nVd9AEZrxpn3iuZNQq1NKhO65oZAsbcVgdvILxkI=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.11/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
+github.com/aliyun/alibaba-cloud-sdk-go v1.63.16 h1:LNaqt0rxIcqHYarmdIZ3ZM7lqUWaWZ1Sqi1XPV1zMko=
+github.com/aliyun/alibaba-cloud-sdk-go v1.63.16/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
 github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
@@ -725,26 +731,38 @@ github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP
 github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
 github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDagTk8=
 github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0=
+github.com/aws/aws-sdk-go-v2 v1.30.5 h1:mWSRTwQAb0aLE17dSzztCVJWI9+cRMgqebndjwDyK0g=
+github.com/aws/aws-sdk-go-v2 v1.30.5/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0=
 github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90=
 github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg=
 github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI=
 github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM=
+github.com/aws/aws-sdk-go-v2/config v1.27.33 h1:Nof9o/MsmH4oa0s2q9a0k7tMz5x/Yj5k06lDODWz3BU=
+github.com/aws/aws-sdk-go-v2/config v1.27.33/go.mod h1:kEqdYzRb8dd8Sy2pOdEbExTTF5v7ozEXX0McgPE7xks=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.32 h1:7Cxhp/BnT2RcGy4VisJ9miUPecY+lyE9I8JvcZofn9I=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.32/go.mod h1:P5/QMF3/DCHbXGEGkdbilXHsyTBX5D3HSwcrSc9p20I=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 h1:pfQ2sqNpMVK6xz2RbqLEL0GH87JOwSxPV2rzm8Zsb74=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13/go.mod h1:NG7RXPUlqfsCLLFfi0+IpKN4sCB9D9fw/qTaSB+xRoU=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 h1:pI7Bzt0BJtYA0N/JEC6B8fJ4RBrEMi1LBrkMdFYNSnQ=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17/go.mod h1:Dh5zzJYMtxfIjYW+/evjQ8uj2OyR/ve2KROHGHlSFqE=
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI=
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM=
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I=
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 h1:Mqr/V5gvrhA2gvgnF42Zh5iMiQNcOYthFYwCyrnuWlc=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17/go.mod h1:aLJpZlCmjE+V+KtN1q1uyZkfnUWpQGpbsn89XPKyzfU=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
@@ -757,26 +775,38 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrx
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 h1:rfprUlsdzgl7ZL2KlXiUAoJnI/VxfHCvDFr2QDFj6u4=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19/go.mod h1:SCWkEdRq8/7EK60NcvvQ6NXKuTcchAD4ROAsC37VEZE=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.3 h1:dy4sbyGy7BS4c0KaPZwg1P5ZP+lW+auTVcPiwrmbn8M=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.3/go.mod h1:EMgqMhof+RuaYvQavxKC0ZWvP7yB4B4NJhP+dbm13u0=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.4 h1:nR4GnokNdp25C6Z6xvXz5VqmzIhp4+aWMcM4w5FhlJ4=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.4/go.mod h1:w/6Ddm5GNEn0uLR6Wc35MGTvUXKDz8uNEMRrrdDB2ps=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.6 h1:ea6TO3HgVeVTB2Ie1djyBFWBOc9CohpKbo/QZbGTCJQ=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.6/go.mod h1:D2TUTD3v6AWmE5LzdCXLWNFtoYbSf6IEjKh1ggbuVdw=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3 h1:MmLCRqP4U4Cw9gJ4bNrCG0mWqEtBlmAVleyelcHARMU=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3/go.mod h1:AMPjK2YnRh0YgOID3PqhJA1BRNfXDfGOnSsKHtAe8yA=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 h1:xtp7jye7KhWu4ptBs5yh1Vep0vLAGSNGmArOUp997DU=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0/go.mod h1:QN7tFo/W8QjLCR6aPZqMZKaVQJiAp95r/g78x1LWtkA=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.43.2 h1:957e1/SwXIfPi/0OUJkH9YnPZRe9G6Kisd/xUhF7AUE=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.43.2/go.mod h1:343vcjcyOTuHTBBgUrOxPM36/jE96qLZnGL447ldrB0=
 github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM=
 github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU=
 github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c=
 github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM=
+github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 h1:pIaGg+08llrP7Q5aiz9ICWbY8cqhTkyy+0SHvfzQpTc=
+github.com/aws/aws-sdk-go-v2/service/sso v1.22.7/go.mod h1:eEygMHnTKH/3kNp9Jr1n3PdejuSNcgwLe1dWgQtO0VQ=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 h1:/Cfdu0XV3mONYKaOt1Gr0k1KvQzkzPyiKUdlWJqy+J4=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7/go.mod h1:bCbAxKDqNvkHxRaIMnyVPXPo+OaPRwvmgzMxbz1VKSA=
 github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE=
 github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ=
 github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8=
 github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0=
+github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 h1:NKTa1eqZYw8tiHSRGpP0VtTdub/8KNk8sDkNPFaOKDE=
+github.com/aws/aws-sdk-go-v2/service/sts v1.30.7/go.mod h1:NXi1dIAGteSaRLqYgarlhP/Ij0cFT+qmCwiJqWh/U5o=
 github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
 github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
 github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
@@ -831,11 +861,15 @@ github.com/civo/civogo v0.3.73 h1:thkNnkziU+xh+MEOChIUwRZI1forN20+SSAPe/VFDME=
 github.com/civo/civogo v0.3.73/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
 github.com/civo/civogo v0.3.75 h1:hrF+ALGDV5Be/jG9NmDo2wLhL4yuD8kIOxUbVRklGNU=
 github.com/civo/civogo v0.3.75/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
+github.com/civo/civogo v0.3.77 h1:1rl5cpQruPhh+w8BBMpGQsaovjDvA44udPoDTAa45rk=
+github.com/civo/civogo v0.3.77/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloudflare/cloudflare-go v0.102.0 h1:+0MGbkirM/yzVLOYpWMgW7CDdKzesSbdwA2Y+rABrWI=
 github.com/cloudflare/cloudflare-go v0.102.0/go.mod h1:BOB41tXf31ti/qtBO9paYhyapotQbGRDbQoLOAF7pSg=
 github.com/cloudflare/cloudflare-go v0.103.0 h1:XXKzgXeUbAo7UTtM4T5wuD2bJPBtNZv7TlZAEy5QI4k=
 github.com/cloudflare/cloudflare-go v0.103.0/go.mod h1:0DrjT4g8wgYFYIxhlqR8xi8dNWfyHFGilUkU3+XV8h0=
+github.com/cloudflare/cloudflare-go v0.104.0 h1:R/lB0dZupaZbOgibAH/BRrkFbZ6Acn/WsKg2iX2xXuY=
+github.com/cloudflare/cloudflare-go v0.104.0/go.mod h1:pfUQ4PIG4ISI0/Mmc21Bp86UnFU0ktmPf3iTgbSL+cM=
 github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
 github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
@@ -985,8 +1019,12 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn
 github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao=
 github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
+github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA=
+github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
 github.com/go-resty/resty/v2 v2.14.0 h1:/rhkzsAqGQkozwfKS5aFAbb6TyKd3zyFRWcdRXLPCAU=
 github.com/go-resty/resty/v2 v2.14.0/go.mod h1:IW6mekUOsElt9C7oWr0XRt9BNSD6D5rr9mhk6NjmNHg=
+github.com/go-resty/resty/v2 v2.15.0 h1:clPQLZ2x9h4yGY81IzpMPnty+xoGyFaDg0XMkCsHf90=
+github.com/go-resty/resty/v2 v2.15.0/go.mod h1:0fHAoK7JoBy/Ch36N8VFeMsK7xQOHhvWaC3iOktwmIU=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
@@ -1140,6 +1178,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
 github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
 github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0=
 github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
+github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
+github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
@@ -1356,6 +1396,8 @@ github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae h1:dIZY4ULFcto4tA
 github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
 github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 h1:5RK988zAqB3/AN3opGfRpoQgAVqr6/A5+qRTi67VUZY=
 github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
+github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0=
+github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
 github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
 github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
 github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o=
@@ -1391,6 +1433,8 @@ github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S
 github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
 github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
 github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+github.com/mattn/go-sqlite3 v1.14.23 h1:gbShiuAP1W5j9UOksQ06aiiqPMxYecovVGwmTxWtuw0=
+github.com/mattn/go-sqlite3 v1.14.23/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
@@ -1595,8 +1639,12 @@ github.com/sashabaranov/go-openai v1.29.0 h1:eBH6LSjtX4md5ImDCX8hNhHQvaRf22zujiE
 github.com/sashabaranov/go-openai v1.29.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
 github.com/sashabaranov/go-openai v1.29.1 h1:AlB+vwpg1tibwr83OKXLsI4V1rnafVyTlw0BjR+6WUM=
 github.com/sashabaranov/go-openai v1.29.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
+github.com/sashabaranov/go-openai v1.29.2 h1:jYpp1wktFoOvxHnum24f/w4+DFzUdJnu83trr5+Slh0=
+github.com/sashabaranov/go-openai v1.29.2/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
 github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU=
 github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 h1:yoKAVkEVwAqbGbR8n87rHQ1dulL25rKloGadb3vm770=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30/go.mod h1:sH0u6fq6x4R5M7WxkoQFY/o7UaiItec0o1LinLCJNq8=
 github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk=
 github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
@@ -1696,12 +1744,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.991 h1:0Xg2
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.991/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993 h1:+iJMmF0q1MPyhLs0+J7CcJ47w/vq6ICsCxnV4gc0dKw=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002 h1:RE84sHFFx6t24DJvSnF9fS1DzBNv9OpctzHK3t7AY+I=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1002/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.984 h1:ABZeSsOOkkBn+gToVp8KkMt4E69hQkBMEFegCD4w15Q=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.984/go.mod h1:r++X8dKvTZWltr4J83TIwqGlyvG5fKaVh7RGC2+BryI=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.991 h1:GTf6Cp2beg/zfxuhj5qwEHrR1AhBJrk+CYGzt6pRxJo=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.991/go.mod h1:9v9MJPZQHh7XMr7cESUHcIXpIJb/sFtp++OsanrwhaU=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.993 h1:x2nkr/Kok+DV1K1DHqnvNgZTXDjOZVgkBXwtqVptKWk=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.993/go.mod h1:lEQPVB5HPTf8LU4EE9C7VpYtOwM0xpaFQerX0b+a9Z4=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002 h1:QwE0dRkAAbdf+eACnkNULgDn9ZKUJpPWRyXdqJolP5E=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1002/go.mod h1:WdC0FYbqYhJwQ3kbqri6hVP5HAEp+rzX9FToItTAzUg=
 github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
 github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
 github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY=
@@ -1722,6 +1774,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
 github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ultradns/ultradns-go-sdk v1.6.2-20240501171831-432d643 h1:Y2gOdFNdP0QrXN7HkhrT42686bxBmDPqq5Xu8RgeU2s=
 github.com/ultradns/ultradns-go-sdk v1.6.2-20240501171831-432d643/go.mod h1:mqka31zT/P4yfNKj1qbOXUqamham/YO05GgUc/dOrl8=
+github.com/ultradns/ultradns-go-sdk v1.7.0-20240913052650-970ca9a h1:R6IR+Vj/RnGZLnX8PpPQsbbQthctO7Ah2q4tj5eoe2o=
+github.com/ultradns/ultradns-go-sdk v1.7.0-20240913052650-970ca9a/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
@@ -1753,12 +1807,16 @@ github.com/yandex-cloud/go-genproto v0.0.0-20240819112322-98a264d392f6 h1:w57l27
 github.com/yandex-cloud/go-genproto v0.0.0-20240819112322-98a264d392f6/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE=
 github.com/yandex-cloud/go-genproto v0.0.0-20240829130658-0568052c5a6a h1:GCVnt5H4CB4np3ReSNH0GpBg5HDaLz1rZKnjhQjQGL4=
 github.com/yandex-cloud/go-genproto v0.0.0-20240829130658-0568052c5a6a/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE=
+github.com/yandex-cloud/go-genproto v0.0.0-20240911120709-1fa0cb6f47c2 h1:WgeEP+8WizCQyccJNHOMLONq23qVAzYHtyg5qTdUWmg=
+github.com/yandex-cloud/go-genproto v0.0.0-20240911120709-1fa0cb6f47c2/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE=
 github.com/yandex-cloud/go-sdk v0.0.0-20240813144531-905aa41b481f h1:oetXcQPVH/CfyBD5MXnxOQY7IFvhTZpLLQKKLmTVRPM=
 github.com/yandex-cloud/go-sdk v0.0.0-20240813144531-905aa41b481f/go.mod h1:9sGM6Epw7DGLLs57/XVQzzwY1ZRP3U5xyqg8j8wdn3M=
 github.com/yandex-cloud/go-sdk v0.0.0-20240819112606-8a626cdc403d h1:eYs6TKjvjzYgAar7n2Ic4a+jIP08IfswtvCZ8iJqdKk=
 github.com/yandex-cloud/go-sdk v0.0.0-20240819112606-8a626cdc403d/go.mod h1:WYdfvXcvRn3kbVcwpav4J3jd1STOYtYvkTqx0wm4leM=
 github.com/yandex-cloud/go-sdk v0.0.0-20240829131820-fa8ad79f88a4 h1:l9x2SuRwFBvCTZvIlr8JqnjrHlr0a2UF/m/zdGnl+cs=
 github.com/yandex-cloud/go-sdk v0.0.0-20240829131820-fa8ad79f88a4/go.mod h1:/kMfiARiUXWqYG9EX1g5cZuvW+vY5M/oFROiUg0na+0=
+github.com/yandex-cloud/go-sdk v0.0.0-20240911121212-e4e74d0d02f5 h1:Q4LvUMF4kzaGtopoIdXReL9/qGtmzOewBhF3dQvuHMU=
+github.com/yandex-cloud/go-sdk v0.0.0-20240911121212-e4e74d0d02f5/go.mod h1:9dt2V80cfJGRZA+5SKP3Ky+R/DxH02XfKObi2Uy2uPc=
 github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA=
 github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0=
 github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA=
@@ -1796,18 +1854,26 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIX
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI=
 go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
 go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
 go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
 go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
+go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts=
+go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc=
 go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q=
 go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s=
 go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
 go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
+go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w=
+go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ=
 go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g=
 go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
 go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
 go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
+go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc=
+go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
 go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
@@ -1833,6 +1899,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 golang.org/x/arch v0.9.0 h1:ub9TgUInamJ8mrZIGlBG6/4TqWeMszd4N8lNorbrr6k=
 golang.org/x/arch v0.9.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
+golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8=
+golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -1861,6 +1929,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
 golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
 golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
 golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
+golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
+golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1880,6 +1950,8 @@ golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDT
 golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
 golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA=
 golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
+golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
+golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
 golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -1927,6 +1999,8 @@ golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
 golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
+golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -2006,6 +2080,8 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
 golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
 golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
+golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
+golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -2037,6 +2113,8 @@ golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw
 golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
 golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
 golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
+golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -2178,6 +2256,8 @@ golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
 golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
+golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -2219,6 +2299,8 @@ golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
 golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
 golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
+golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
+golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2300,6 +2382,8 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58
 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
 golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
 golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
+golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
+golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -2380,6 +2464,8 @@ google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s=
 google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0=
 google.golang.org/api v0.195.0 h1:Ude4N8FvTKnnQJHU48RFI40jOBgIrL8Zqr3/QeST6yU=
 google.golang.org/api v0.195.0/go.mod h1:DOGRWuv3P8TU8Lnz7uQc4hyNqrBpMtD9ppW3wBJurgc=
+google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ=
+google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2526,18 +2612,24 @@ google.golang.org/genproto v0.0.0-20240826202546-f6391c0de4c7 h1:f9Ho9PuVgvteqb4
 google.golang.org/genproto v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:ICjniACoWvcDz8c8bOsHVKuuSGDJy1z5M4G0DM3HzTc=
 google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed h1:4C4dbrVFtfIp3GXJdMX1Sj25mahfn5DywOo65/2ISQ8=
 google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:ICjniACoWvcDz8c8bOsHVKuuSGDJy1z5M4G0DM3HzTc=
+google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU=
+google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4=
 google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8=
 google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo=
 google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 h1:YcyjlL1PRr2Q17/I0dPk2JmYS5CDXfcdb2Z3YRioEbw=
 google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
 google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0=
 google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc=
+google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -2584,6 +2676,8 @@ google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
 google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
 google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c=
 google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
+google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
+google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -2648,6 +2742,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gorm.io/datatypes v1.2.1 h1:r+g0bk4LPCW2v4+Ls7aeNgGme7JYdNDQ2VtvlNUfBh0=
 gorm.io/datatypes v1.2.1/go.mod h1:hYK6OTb/1x+m96PgoZZq10UXJ6RvEBb9kRDQ2yyhzGs=
+gorm.io/datatypes v1.2.2 h1:sdn7ZmG4l7JWtMDUb3L98f2Ym7CO5F8mZLlrQJMfF9g=
+gorm.io/datatypes v1.2.2/go.mod h1:f4BsLcFAX67szSv8svwLRjklArSHAvHLeE3pXAS5DZI=
 gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
 gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
 gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
@@ -2665,10 +2761,14 @@ gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
 gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
 gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg=
 gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
+gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
+gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
 gorm.io/hints v1.1.2 h1:b5j0kwk5p4+3BtDtYqqfY+ATSxjj+6ptPgVveuynn9o=
 gorm.io/hints v1.1.2/go.mod h1:/ARdpUHAtyEMCh5NNi3tI7FsGh+Cj/MIUlvNxCNCFWg=
 gorm.io/plugin/dbresolver v1.5.2 h1:Iut7lW4TXNoVs++I+ra3zxjSxTRj4ocIeFEVp4lLhII=
 gorm.io/plugin/dbresolver v1.5.2/go.mod h1:jPh59GOQbO7v7v28ZKZPd45tr+u3vyT+8tHdfdfOWcU=
+gorm.io/plugin/dbresolver v1.5.3 h1:wFwINGZZmttuu9h7XpvbDHd8Lf9bb8GNzp/NpAMV2wU=
+gorm.io/plugin/dbresolver v1.5.3/go.mod h1:TSrVhaUg2DZAWP3PrHlDlITEJmNOkL0tFTjvTEsQ4XE=
 gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
 gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -2681,8 +2781,12 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
 k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo=
 k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE=
+k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU=
+k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI=
 k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc=
 k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
+k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U=
+k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
 k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=