Browse Source

feat: add certificate expiration notifications #387

Jacky 2 months ago
parent
commit
1512e1de85

+ 26 - 6
app/src/components/Notification/notifications.ts

@@ -4,12 +4,6 @@
 
 
 const notifications: Record<string, { title: () => string, content: (args: any) => string }> = {
 const notifications: Record<string, { title: () => string, content: (args: any) => string }> = {
 
 
-  // user module notifications
-  'All Recovery Codes Have Been Used': {
-    title: () => $gettext('All Recovery Codes Have Been Used'),
-    content: (args: any) => $gettext('Please generate new recovery codes in the preferences immediately to prevent lockout.', args),
-  },
-
   // cluster module notifications
   // cluster module notifications
   'Reload Remote Nginx Error': {
   'Reload Remote Nginx Error': {
     title: () => $gettext('Reload Remote Nginx Error'),
     title: () => $gettext('Reload Remote Nginx Error'),
@@ -29,6 +23,26 @@ const notifications: Record<string, { title: () => string, content: (args: any)
   },
   },
 
 
   // cert module notifications
   // cert module notifications
+  'Certificate Expired': {
+    title: () => $gettext('Certificate Expired'),
+    content: (args: any) => $gettext('Certificate %{name} has expired', args),
+  },
+  'Certificate Expiration Notice': {
+    title: () => $gettext('Certificate Expiration Notice'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args),
+  },
+  'Certificate Expiring Soon': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args),
+  },
+  'Certificate Expiring Soon_1': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in %{days} days', args),
+  },
+  'Certificate Expiring Soon_2': {
+    title: () => $gettext('Certificate Expiring Soon'),
+    content: (args: any) => $gettext('Certificate %{name} will expire in 1 day', args),
+  },
   'Sync Certificate Error': {
   'Sync Certificate Error': {
     title: () => $gettext('Sync Certificate Error'),
     title: () => $gettext('Sync Certificate Error'),
     content: (args: any) => $gettext('Sync Certificate %{cert_name} to %{env_name} failed', args),
     content: (args: any) => $gettext('Sync Certificate %{cert_name} to %{env_name} failed', args),
@@ -155,6 +169,12 @@ const notifications: Record<string, { title: () => string, content: (args: any)
     title: () => $gettext('Save Remote Stream Success'),
     title: () => $gettext('Save Remote Stream Success'),
     content: (args: any) => $gettext('Save stream %{name} to %{node} successfully', args),
     content: (args: any) => $gettext('Save stream %{name} to %{node} successfully', args),
   },
   },
+
+  // user module notifications
+  'All Recovery Codes Have Been Used': {
+    title: () => $gettext('All Recovery Codes Have Been Used'),
+    content: (args: any) => $gettext('Please generate new recovery codes in the preferences immediately to prevent lockout.', args),
+  },
 }
 }
 
 
 export default notifications
 export default notifications

+ 117 - 89
app/src/language/ar/app.po

@@ -34,11 +34,6 @@ msgstr "سجلات الدخول"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "سجلات الدخول"
 msgstr "سجلات الدخول"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "سجلات الدخول"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -118,7 +113,7 @@ msgstr "بعد ذلك، قم بتحديث هذه الصفحة وانقر فوق
 msgid "All"
 msgid "All"
 msgstr "الكل"
 msgstr "الكل"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -374,11 +369,6 @@ msgstr "فيما يلي العناصر المحددة التي تريد تعدي
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "رمز API"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "بناء مع"
 msgstr "بناء مع"
@@ -428,11 +418,43 @@ msgstr "شهادة"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "نماذج التكوين"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "خطأ في مزامنة الشهادة"
 msgstr "خطأ في مزامنة الشهادة"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "نماذج التكوين"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "قائمة الشهادات"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "خطأ في مزامنة الشهادة"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -500,10 +522,6 @@ msgstr "المسار المتغير"
 msgid "Channel"
 msgid "Channel"
 msgstr "قناة"
 msgstr "قناة"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "تحقق مرة أخرى"
 msgstr "تحقق مرة أخرى"
@@ -782,30 +800,30 @@ msgstr "حذف"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "حذف نهائي"
 msgstr "حذف نهائي"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "خطأ حذف الموقع البعيد"
 msgstr "خطأ حذف الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "نجح حذف الموقع البعيد"
 msgstr "نجح حذف الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "خطأ حذف الموقع البعيد"
 msgstr "خطأ حذف الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "نجح حذف الموقع البعيد"
 msgstr "نجح حذف الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "تمت إزالة الموقع %{site} من %{node} بنجاح"
 msgstr "تمت إزالة الموقع %{site} من %{node} بنجاح"
@@ -814,12 +832,12 @@ msgstr "تمت إزالة الموقع %{site} من %{node} بنجاح"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "حذف الموقع: ‎%{site_name}"
 msgstr "حذف الموقع: ‎%{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "تمت إزالة الموقع %{site} من %{node} بنجاح"
 msgstr "تمت إزالة الموقع %{site} من %{node} بنجاح"
@@ -857,10 +875,6 @@ msgstr "تفاصيل"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "وضع التطوير"
 msgstr "وضع التطوير"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -898,60 +912,60 @@ msgstr "تعطيل"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "فشل تعطيل التجديد التلقائي لـ {name}%"
 msgstr "فشل تعطيل التجديد التلقائي لـ {name}%"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "خطأ في تعطيل الموقع البعيد"
 msgstr "خطأ في تعطيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "خطأ في تعطيل الموقع البعيد"
 msgstr "خطأ في تعطيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "تعطيل الموقع البعيد بنجاح"
 msgstr "تعطيل الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "تعطيل الموقع البعيد بنجاح"
 msgstr "تعطيل الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "خطأ في تعطيل الموقع البعيد"
 msgstr "خطأ في تعطيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "تعطيل الموقع البعيد بنجاح"
 msgstr "تعطيل الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
@@ -1135,60 +1149,60 @@ msgstr "فشل التفعيل"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "تفعيل TOTP"
 msgstr "تفعيل TOTP"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "خطأ في تفعيل الموقع البعيد"
 msgstr "خطأ في تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "خطأ في تفعيل الموقع البعيد"
 msgstr "خطأ في تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "نجح تفعيل الموقع البعيد"
 msgstr "نجح تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "نجح تفعيل الموقع البعيد"
 msgstr "نجح تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "خطأ في تفعيل الموقع البعيد"
 msgstr "خطأ في تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "نجح تفعيل الموقع البعيد"
 msgstr "نجح تفعيل الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 msgstr "فشل تفعيل %{conf_name} في %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تفعيل الموقع %{site} على %{node} بنجاح"
@@ -1907,6 +1921,15 @@ msgstr "نوع المفتاح"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "مخصص"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "آخر فحص في"
 msgstr "آخر فحص في"
@@ -2616,7 +2639,7 @@ msgstr ""
 "يرجى أولاً إضافة بيانات الاعتماد في الشهادات > بيانات اعتماد DNS، ثم اختيار "
 "يرجى أولاً إضافة بيانات الاعتماد في الشهادات > بيانات اعتماد DNS، ثم اختيار "
 "أحد بيانات الاعتماد أدناه لطلب API لمزود DNS."
 "أحد بيانات الاعتماد أدناه لطلب API لمزود DNS."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2895,57 +2918,59 @@ msgstr "تمت الإزالة بنجاح"
 msgid "Rename"
 msgid "Rename"
 msgstr "إعادة تسمية"
 msgstr "إعادة تسمية"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "تم إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name} بنجاح"
 msgstr "تم إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "تم إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name} بنجاح"
 msgstr "تم إعادة تسمية %{orig_path} إلى %{new_path} على %{env_name} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "خطأ في إعادة تسمية التكوين البعيد"
 msgstr "خطأ في إعادة تسمية التكوين البعيد"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "إعادة تسمية تكوين البعيد بنجاح"
 msgstr "إعادة تسمية تكوين البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "خطأ في إعادة تسمية الموقع البعيد"
 msgstr "خطأ في إعادة تسمية الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "خطأ في إعادة تسمية الموقع البعيد"
 msgstr "خطأ في إعادة تسمية الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 msgstr "تم إعادة تسمية الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
 msgstr "إعادة تسمية الموقع %{site} إلى %{new_site} على %{node} بنجاح"
@@ -3105,42 +3130,42 @@ msgstr "حفظ التوجيه"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "خطأ في الحفظ %{msg}"
 msgstr "خطأ في الحفظ %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "خطأ في حفظ الموقع البعيد"
 msgstr "خطأ في حفظ الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "حفظ الموقع البعيد بنجاح"
 msgstr "حفظ الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "خطأ في حفظ الموقع البعيد"
 msgstr "خطأ في حفظ الموقع البعيد"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "حفظ الموقع البعيد بنجاح"
 msgstr "حفظ الموقع البعيد بنجاح"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 msgstr "فشل نشر {conf_name}% إلى {node_name}%"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
 msgstr "تم حفظ الموقع %{site} إلى %{node} بنجاح"
@@ -3168,10 +3193,6 @@ msgstr "امسح رمز الاستجابة السريعة بهاتفك المح
 msgid "SDK"
 msgid "SDK"
 msgstr "حزمة تطوير البرمجيات SDK"
 msgstr "حزمة تطوير البرمجيات SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "تم نسخ السر"
 msgstr "تم نسخ السر"
@@ -3212,11 +3233,6 @@ msgstr "معلومات الخادم"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "معلومات الخادم"
 msgstr "معلومات الخادم"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "معلومات الخادم"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "اسم_الخادم غير موجود في التوجيهات"
 msgstr "اسم_الخادم غير موجود في التوجيهات"
@@ -3470,38 +3486,38 @@ msgstr "مزامنة"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "مزامنة الشهادة"
 msgstr "مزامنة الشهادة"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "نجح مزامنة الشهادة %{cert_name} إلى %{env_name}"
 msgstr "نجح مزامنة الشهادة %{cert_name} إلى %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "نجح مزامنة الشهادة %{cert_name} إلى %{env_name}"
 msgstr "نجح مزامنة الشهادة %{cert_name} إلى %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "خطأ في مزامنة الشهادة"
 msgstr "خطأ في مزامنة الشهادة"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "تمت مزامنة الشهادة بنجاح"
 msgstr "تمت مزامنة الشهادة بنجاح"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "تمت مزامنة التكوين %{config_name} إلى %{env_name} بنجاح"
 msgstr "تمت مزامنة التكوين %{config_name} إلى %{env_name} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "تمت مزامنة التكوين %{config_name} إلى %{env_name} بنجاح"
 msgstr "تمت مزامنة التكوين %{config_name} إلى %{env_name} بنجاح"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "خطأ في تزامن التكوين"
 msgstr "خطأ في تزامن التكوين"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "تمت مزامنة التكوين بنجاح"
 msgstr "تمت مزامنة التكوين بنجاح"
 
 
@@ -4107,6 +4123,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "مفاتيح المرور الخاصة بك"
 msgstr "مفاتيح المرور الخاصة بك"
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "سجلات الدخول"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "رمز API"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "معلومات الخادم"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "هل تريد تعطيل هذا الموقع؟"
 #~ msgstr "هل تريد تعطيل هذا الموقع؟"
 
 

+ 117 - 89
app/src/language/de_DE/app.po

@@ -30,11 +30,6 @@ msgstr "Zugriffslog"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Zugriffslog"
 msgstr "Zugriffslog"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Zugriffslog"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
@@ -121,7 +116,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr "Alle"
 msgstr "Alle"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -392,11 +387,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API-Token"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Build mit"
 msgstr "Build mit"
@@ -446,11 +436,43 @@ msgstr "Zertifikat"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Konfigurationen"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Konfigurationen"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Zertifikat ist gültig"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Certificate has expired"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -517,10 +539,6 @@ msgstr "Zertifikat ist gültig"
 msgid "Channel"
 msgid "Channel"
 msgstr "Kanal"
 msgstr "Kanal"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Erneut prüfen"
 msgstr "Erneut prüfen"
@@ -807,32 +825,32 @@ msgstr "Löschen"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "Permanent löschen"
 msgstr "Permanent löschen"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
@@ -841,12 +859,12 @@ msgstr "Speichern erfolgreich"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Seite löschen: %{site_name}"
 msgstr "Seite löschen: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
@@ -885,10 +903,6 @@ msgstr "Details"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Entwicklungsmodus"
 msgstr "Entwicklungsmodus"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -927,62 +941,62 @@ msgstr "Deaktiviert"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Automatische Verlängerung deaktiviert für %{name}"
 msgstr "Automatische Verlängerung deaktiviert für %{name}"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
@@ -1177,62 +1191,62 @@ msgstr "Aktivieren fehlgeschlagen"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Aktiviere TLS"
 msgstr "Aktiviere TLS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
 msgstr "Erfolgreich gespeichert"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
 msgstr "Erfolgreich gespeichert"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
 msgstr "Erfolgreich gespeichert"
@@ -1961,6 +1975,15 @@ msgstr "Schlüsseltyp"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Benutzerdefiniert"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Zuletzt überprüft am"
 msgstr "Zuletzt überprüft am"
@@ -2705,7 +2728,7 @@ msgstr ""
 "Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten "
 "Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten "
 "Anmeldeinformationen aus, um die API des DNS-Anbieters anzufordern."
 "Anmeldeinformationen aus, um die API des DNS-Anbieters anzufordern."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -3002,62 +3025,64 @@ msgstr "Speichern erfolgreich"
 msgid "Rename"
 msgid "Rename"
 msgstr "Benuztername"
 msgstr "Benuztername"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
@@ -3224,44 +3249,44 @@ msgstr "Anweisung speichern"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Fehler beim Speichern %{msg}"
 msgstr "Fehler beim Speichern %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
@@ -3291,10 +3316,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Schlüssel wurde kopiert"
 msgstr "Schlüssel wurde kopiert"
@@ -3335,11 +3356,6 @@ msgstr "Serverinformationen"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Serverinformationen"
 msgstr "Serverinformationen"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Serverinformationen"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "server_name wurde in den Anweisungen nicht gefunden"
 msgstr "server_name wurde in den Anweisungen nicht gefunden"
@@ -3597,42 +3613,42 @@ msgstr "Synchronisieren"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Speichern erfolgreich"
 msgstr "Speichern erfolgreich"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Zertifikat ist gültig"
 msgstr "Zertifikat ist gültig"
@@ -4254,6 +4270,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "Deine Passkeys"
 msgstr "Deine Passkeys"
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Zugriffslog"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "API-Token"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Serverinformationen"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"
 #~ msgstr "Bist du sicher, dass du diese Richtlinie löschen möchtest?"

+ 112 - 88
app/src/language/en/app.po

@@ -31,11 +31,6 @@ msgstr "Sites List"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Sites List"
 msgstr "Sites List"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Sites List"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
@@ -120,7 +115,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -388,10 +383,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr ""
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Build with"
 msgstr "Build with"
@@ -439,11 +430,43 @@ msgstr ""
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Configurations"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Configurations"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Certificate is valid"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Certificate has expired"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -510,10 +533,6 @@ msgstr "Certificate is valid"
 msgid "Channel"
 msgid "Channel"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr ""
 msgstr ""
@@ -797,32 +816,32 @@ msgstr ""
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -831,12 +850,12 @@ msgstr "Saved successfully"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -875,10 +894,6 @@ msgstr ""
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Development Mode"
 msgstr "Development Mode"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -917,62 +932,62 @@ msgstr "Disabled"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -1162,62 +1177,62 @@ msgstr "Enable failed"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Enable TLS"
 msgstr "Enable TLS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -1945,6 +1960,14 @@ msgstr ""
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+msgid "Lark Custom"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 #, fuzzy
 #, fuzzy
 msgid "Last checked at"
 msgid "Last checked at"
@@ -2666,7 +2689,7 @@ msgid ""
 "select one of the credentialsbelow to request the API of the DNS provider."
 "select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2954,62 +2977,64 @@ msgstr "Saved successfully"
 msgid "Rename"
 msgid "Rename"
 msgstr "Username"
 msgstr "Username"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -3175,44 +3200,44 @@ msgstr "Save Directive"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Save error %{msg}"
 msgstr "Save error %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -3241,10 +3266,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -3286,11 +3307,6 @@ msgstr "Server Info"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Server Info"
 msgstr "Server Info"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Server Info"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "server_name not found in directives"
 msgstr "server_name not found in directives"
@@ -3550,42 +3566,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
@@ -4170,6 +4186,14 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Sites List"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Server Info"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Are you sure you want to remove this directive?"
 #~ msgstr "Are you sure you want to remove this directive?"

+ 117 - 89
app/src/language/es/app.po

@@ -37,11 +37,6 @@ msgstr "Logs de acceso"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Logs de acceso"
 msgstr "Logs de acceso"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Logs de acceso"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -123,7 +118,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr "Todo"
 msgstr "Todo"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -381,11 +376,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "Token"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Desarrollado con"
 msgstr "Desarrollado con"
@@ -435,11 +425,43 @@ msgstr "Certificado"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Plantillas de configuración"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Error de Certificado de Sincronización"
 msgstr "Error de Certificado de Sincronización"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Plantillas de configuración"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Lista de Certificados"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "El certificado expiró"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -499,10 +521,6 @@ msgstr "Ruta cambiada"
 msgid "Channel"
 msgid "Channel"
 msgstr "Canal"
 msgstr "Canal"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Intentar nuevamente"
 msgstr "Intentar nuevamente"
@@ -783,30 +801,30 @@ msgstr "Eliminar"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "Eliminar Permanentemente"
 msgstr "Eliminar Permanentemente"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Error al eliminar sitio remoto"
 msgstr "Error al eliminar sitio remoto"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Borrado del sitio remoto correcto"
 msgstr "Borrado del sitio remoto correcto"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Error al eliminar sitio remoto"
 msgstr "Error al eliminar sitio remoto"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Borrado del sitio remoto correcto"
 msgstr "Borrado del sitio remoto correcto"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
@@ -815,12 +833,12 @@ msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Eliminar sitio: %{site_name}"
 msgstr "Eliminar sitio: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
@@ -858,10 +876,6 @@ msgstr "Detalles"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Modo de desarrollo"
 msgstr "Modo de desarrollo"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -899,60 +913,60 @@ msgstr "Desactivar"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "No se pudo desactivar la renovación automática por %{name}"
 msgstr "No se pudo desactivar la renovación automática por %{name}"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Error al deshabilitar el sitio remoto"
 msgstr "Error al deshabilitar el sitio remoto"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Error al deshabilitar el sitio remoto"
 msgstr "Error al deshabilitar el sitio remoto"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Deshabilitado de sitio remoto exitoso"
 msgstr "Deshabilitado de sitio remoto exitoso"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Deshabilitado de sitio remoto exitoso"
 msgstr "Deshabilitado de sitio remoto exitoso"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Error al deshabilitar el sitio remoto"
 msgstr "Error al deshabilitar el sitio remoto"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Deshabilitado de sitio remoto exitoso"
 msgstr "Deshabilitado de sitio remoto exitoso"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
@@ -1135,62 +1149,62 @@ msgstr "Falló la habilitación"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Habilitar TLS"
 msgstr "Habilitar TLS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
@@ -1907,6 +1921,15 @@ msgstr "Tipo llave"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Personalizado"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Comprobado por última vez el"
 msgstr "Comprobado por última vez el"
@@ -2630,7 +2653,7 @@ msgstr ""
 "luego seleccione una de las credenciales de aquí debajo para llamar a la API "
 "luego seleccione una de las credenciales de aquí debajo para llamar a la API "
 "del proveedor de DNS."
 "del proveedor de DNS."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2920,59 +2943,61 @@ msgstr "Eliminado con éxito"
 msgid "Rename"
 msgid "Rename"
 msgstr "Renombrar"
 msgstr "Renombrar"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
@@ -3133,44 +3158,44 @@ msgstr "Guardar Directiva"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Error al guardar %{msg}"
 msgstr "Error al guardar %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 msgstr "Error al renombrar la configuración remota"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 msgstr "Renombrar Configuración Remota Exitosa"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
@@ -3200,10 +3225,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "El secreto ha sido copiado"
 msgstr "El secreto ha sido copiado"
@@ -3244,11 +3265,6 @@ msgstr "Información del servidor"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Información del servidor"
 msgstr "Información del servidor"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Información del servidor"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "No se encuentra server_name en las directivas"
 msgstr "No se encuentra server_name en las directivas"
@@ -3499,38 +3515,38 @@ msgstr "Sincronizar"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Sincronizar Certificado"
 msgstr "Sincronizar Certificado"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Sincronización del Certificado %{cert_name} a %{env_name} exitosa"
 msgstr "Sincronización del Certificado %{cert_name} a %{env_name} exitosa"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Sincronización del Certificado %{cert_name} a %{env_name} exitosa"
 msgstr "Sincronización del Certificado %{cert_name} a %{env_name} exitosa"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Error de Certificado de Sincronización"
 msgstr "Error de Certificado de Sincronización"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Sincronización del Certificado exitosa"
 msgstr "Sincronización del Certificado exitosa"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Sincronizar configuración %{config_name} con %{env_name} exitosamente"
 msgstr "Sincronizar configuración %{config_name} con %{env_name} exitosamente"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Sincronizar configuración %{config_name} con %{env_name} exitosamente"
 msgstr "Sincronizar configuración %{config_name} con %{env_name} exitosamente"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Error de Configuración de Sincronización"
 msgstr "Error de Configuración de Sincronización"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Configuración de sincronización exitosa"
 msgstr "Configuración de sincronización exitosa"
 
 
@@ -4155,6 +4171,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "Sus llaves de acceso"
 msgstr "Sus llaves de acceso"
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Logs de acceso"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "Token"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Información del servidor"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "¿Quieres deshabilitar este sitio?"
 #~ msgstr "¿Quieres deshabilitar este sitio?"
 
 

+ 117 - 89
app/src/language/fr_FR/app.po

@@ -35,11 +35,6 @@ msgstr "Journaux d'accès"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Journaux d'accès"
 msgstr "Journaux d'accès"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Journaux d'accès"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
@@ -125,7 +120,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr "Tous"
 msgstr "Tous"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr "Tous les codes de récupération ont été utilisés"
 msgstr "Tous les codes de récupération ont été utilisés"
@@ -395,11 +390,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "Jeton d'API"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Build avec"
 msgstr "Build avec"
@@ -449,11 +439,43 @@ msgstr "Auto Cert"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr "Le chemin du certificat n'est pas dans le dossier conf de nginx"
 msgstr "Le chemin du certificat n'est pas dans le dossier conf de nginx"
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Modèles de configuration"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Modèles de configuration"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Liste des certifications"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Le certificat a expiré"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -519,10 +541,6 @@ msgstr "Changer de certificat"
 msgid "Channel"
 msgid "Channel"
 msgstr "Canal"
 msgstr "Canal"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Revérifier"
 msgstr "Revérifier"
@@ -812,32 +830,32 @@ msgstr "Supprimer"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "Supprimer définitivement"
 msgstr "Supprimer définitivement"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -846,12 +864,12 @@ msgstr "Dupliqué avec succès"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -891,10 +909,6 @@ msgstr "Détails"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Mode développement"
 msgstr "Mode développement"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -934,62 +948,62 @@ msgstr "Désactivé"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
 msgstr "La désactivation du renouvellement automatique a échoué pour %{name}"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -1183,62 +1197,62 @@ msgstr "Échec de l'activation"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Activer TLS"
 msgstr "Activer TLS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -1979,6 +1993,15 @@ msgstr "Type"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Custom"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Dernière vérification le"
 msgstr "Dernière vérification le"
@@ -2703,7 +2726,7 @@ msgstr ""
 "des informations d'identification ci-dessous pour demander l'API du "
 "des informations d'identification ci-dessous pour demander l'API du "
 "fournisseur DNS."
 "fournisseur DNS."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2997,62 +3020,64 @@ msgstr "Enregistré avec succès"
 msgid "Rename"
 msgid "Rename"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -3219,44 +3244,44 @@ msgstr "Enregistrer la directive"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Enregistrer l'erreur %{msg}"
 msgstr "Enregistrer l'erreur %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
@@ -3284,10 +3309,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -3328,11 +3349,6 @@ msgstr "Informations sur le serveur"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Informations sur le serveur"
 msgstr "Informations sur le serveur"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Informations sur le serveur"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "server_name introuvable dans les directives"
 msgstr "server_name introuvable dans les directives"
@@ -3592,42 +3608,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
@@ -4218,6 +4234,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Journaux d'accès"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "Jeton d'API"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Informations sur le serveur"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Voulez-vous désactiver ce site ?"
 #~ msgstr "Voulez-vous désactiver ce site ?"
 
 

+ 117 - 89
app/src/language/ko_KR/app.po

@@ -35,11 +35,6 @@ msgstr "접근 로그"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "접근 로그"
 msgstr "접근 로그"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "접근 로그"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -119,7 +114,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -369,11 +364,6 @@ msgstr "아래에는 일괄 수정하려는 선택된 항목이 있습니다"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "블록 없음"
 msgstr "블록 없음"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API 토큰"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "빌드 환경"
 msgstr "빌드 환경"
@@ -423,11 +413,43 @@ msgstr "자동 인증"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "구성 템플릿"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "구성 템플릿"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "인증서 목록"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "인증서가 만료되었습니다"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -489,10 +511,6 @@ msgstr "인증서 변경"
 msgid "Channel"
 msgid "Channel"
 msgstr "채널"
 msgstr "채널"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "다시 확인"
 msgstr "다시 확인"
@@ -772,32 +790,32 @@ msgstr "삭제"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
@@ -806,12 +824,12 @@ msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "사이트 삭제: %{site_name}"
 msgstr "사이트 삭제: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
@@ -849,10 +867,6 @@ msgstr "세부 사항"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "개발 모드"
 msgstr "개발 모드"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -890,62 +904,62 @@ msgstr "비활성화"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "%{name}의 자동 갱신 비활성화 실패"
 msgstr "%{name}의 자동 갱신 비활성화 실패"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
@@ -1126,62 +1140,62 @@ msgstr "활성화 실패"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "TLS 활성화"
 msgstr "TLS 활성화"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 msgstr "%{node_name}에서 %{conf_name} 활성화 실패"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
@@ -1899,6 +1913,15 @@ msgstr "키 유형"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "사용자 정의"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "마지막 확인 시간"
 msgstr "마지막 확인 시간"
@@ -2625,7 +2648,7 @@ msgstr ""
 "먼저 인증서 > DNS 자격 증명에 자격 증명을 추가한 다음,DNS 제공자의 API를 요청"
 "먼저 인증서 > DNS 자격 증명에 자격 증명을 추가한 다음,DNS 제공자의 API를 요청"
 "하려면 아래 자격 증명 중 하나를 선택해주세요."
 "하려면 아래 자격 증명 중 하나를 선택해주세요."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2920,62 +2943,64 @@ msgstr "성공적으로 제거됨"
 msgid "Rename"
 msgid "Rename"
 msgstr "이름 변경"
 msgstr "이름 변경"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
@@ -3143,44 +3168,44 @@ msgstr "지시문 저장"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "저장 오류 %{msg}"
 msgstr "저장 오류 %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
@@ -3209,10 +3234,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -3252,11 +3273,6 @@ msgstr "서버 정보"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "서버 정보"
 msgstr "서버 정보"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "서버 정보"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "directives에서 server_name을 찾을 수 없습니다"
 msgstr "directives에서 server_name을 찾을 수 없습니다"
@@ -3512,42 +3528,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "인증서 갱신"
 msgstr "인증서 갱신"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "인증서 갱신 오류"
 msgstr "인증서 갱신 오류"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
@@ -4138,6 +4154,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "접근 로그"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "API 토큰"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "서버 정보"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "이 사이트를 비활성화하시겠습니까?"
 #~ msgstr "이 사이트를 비활성화하시겠습니까?"
 
 

+ 98 - 86
app/src/language/messages.pot

@@ -23,10 +23,6 @@ msgstr ""
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-msgid "Access Token"
-msgstr ""
-
 #: src/routes/modules/certificates.ts:20
 #: src/routes/modules/certificates.ts:20
 #: src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
@@ -110,7 +106,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -356,10 +352,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr ""
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr ""
 msgstr ""
@@ -407,10 +399,38 @@ msgstr ""
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+msgid "Certificate %{name} has expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:31
+msgid "Certificate Expiration Notice"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:27
+msgid "Certificate Expired"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+msgid "Certificate Expiring Soon"
+msgstr ""
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgid "Certificate parse error"
 msgstr ""
 msgstr ""
@@ -467,10 +487,6 @@ msgstr ""
 msgid "Channel"
 msgid "Channel"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr ""
 msgstr ""
@@ -734,29 +750,29 @@ msgstr ""
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:55
+#: src/components/Notification/notifications.ts:75
 #: src/language/constants.ts:50
 #: src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:59
+#: src/components/Notification/notifications.ts:79
 #: src/language/constants.ts:49
 #: src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -764,11 +780,11 @@ msgstr ""
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -806,10 +822,6 @@ msgstr ""
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -846,53 +858,53 @@ msgstr ""
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:63
+#: src/components/Notification/notifications.ts:83
 #: src/language/constants.ts:52
 #: src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:67
+#: src/components/Notification/notifications.ts:87
 #: src/language/constants.ts:51
 #: src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -1065,53 +1077,53 @@ msgstr ""
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:71
+#: src/components/Notification/notifications.ts:91
 #: src/language/constants.ts:54
 #: src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:75
+#: src/components/Notification/notifications.ts:95
 #: src/language/constants.ts:53
 #: src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -1764,6 +1776,14 @@ msgstr ""
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+msgid "Lark Custom"
+msgstr ""
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr ""
 msgstr ""
@@ -2425,7 +2445,7 @@ 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."
 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 ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid "Please generate new recovery codes in the preferences immediately to prevent lockout."
 msgid "Please generate new recovery codes in the preferences immediately to prevent lockout."
 msgstr ""
 msgstr ""
@@ -2687,55 +2707,55 @@ msgstr ""
 msgid "Rename"
 msgid "Rename"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:45
+#: src/components/Notification/notifications.ts:65
 #: src/language/constants.ts:42
 #: src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:49
+#: src/components/Notification/notifications.ts:69
 #: src/language/constants.ts:41
 #: src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:95
+#: src/components/Notification/notifications.ts:115
 #: src/language/constants.ts:56
 #: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:99
+#: src/components/Notification/notifications.ts:119
 #: src/language/constants.ts:55
 #: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -2885,37 +2905,37 @@ msgstr ""
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr ""
 msgstr ""
 
 
@@ -2942,10 +2962,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -2985,10 +3001,6 @@ msgstr ""
 msgid "Server Info"
 msgid "Server Info"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-msgid "Server URL"
-msgstr ""
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr ""
 msgstr ""
@@ -3215,38 +3227,38 @@ msgstr ""
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:27
+#: src/components/Notification/notifications.ts:47
 #: src/language/constants.ts:39
 #: src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:31
+#: src/components/Notification/notifications.ts:51
 #: src/language/constants.ts:38
 #: src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:37
+#: src/components/Notification/notifications.ts:57
 #: src/language/constants.ts:45
 #: src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:41
+#: src/components/Notification/notifications.ts:61
 #: src/language/constants.ts:44
 #: src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr ""
 msgstr ""

+ 117 - 89
app/src/language/ru_RU/app.po

@@ -37,11 +37,6 @@ msgstr "Журналы доступа"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Журналы доступа"
 msgstr "Журналы доступа"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Журналы доступа"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -121,7 +116,7 @@ msgstr "Затем, обновите эту страницу и снова на
 msgid "All"
 msgid "All"
 msgstr "Все"
 msgstr "Все"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr "Все коды восстановления были использованы"
 msgstr "Все коды восстановления были использованы"
@@ -373,11 +368,6 @@ msgstr "Ниже приведены выбранные элементы, кот
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API токен"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Собрать с"
 msgstr "Собрать с"
@@ -426,10 +416,42 @@ msgstr "Авто Сертификат"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Шаблоны конфигурации"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Ошибка декодирования сертификата"
 msgstr "Ошибка декодирования сертификата"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Шаблоны конфигурации"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Список сертификатов"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Ошибка анализа сертификата"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgid "Certificate parse error"
 msgstr "Ошибка анализа сертификата"
 msgstr "Ошибка анализа сертификата"
@@ -487,10 +509,6 @@ msgstr "Путь изменён"
 msgid "Channel"
 msgid "Channel"
 msgstr "Канал"
 msgstr "Канал"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Проверить повторно"
 msgstr "Проверить повторно"
@@ -768,32 +786,32 @@ msgstr "Удалить"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "Удалить навсегда"
 msgstr "Удалить навсегда"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Сайт %{name} успешно удалён с %{node}"
 msgstr "Сайт %{name} успешно удалён с %{node}"
 
 
@@ -801,12 +819,12 @@ msgstr "Сайт %{name} успешно удалён с %{node}"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Удалить сайт: %{site_name}"
 msgstr "Удалить сайт: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Поток %{name} успешно удалён с %{node}"
 msgstr "Поток %{name} успешно удалён с %{node}"
 
 
@@ -843,10 +861,6 @@ msgstr "Детали"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Режим разработки"
 msgstr "Режим разработки"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -884,62 +898,62 @@ msgstr "Отключить"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Не удалось отключить автоматическое продление для %{name}"
 msgstr "Не удалось отключить автоматическое продление для %{name}"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
@@ -1122,61 +1136,61 @@ msgstr "Не удалось включить"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Включить TOTP"
 msgstr "Включить TOTP"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Сайт %{name} успешно включён на %{node}"
 msgstr "Сайт %{name} успешно включён на %{node}"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Сайт %{name} успешно включён на %{node}"
 msgstr "Сайт %{name} успешно включён на %{node}"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 msgstr "Включение %{conf_name} in %{node_name} нипалучилася"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Поток %{name} успешно включён на %{node}"
 msgstr "Поток %{name} успешно включён на %{node}"
 
 
@@ -1888,6 +1902,15 @@ msgstr "Тип ключа"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Пользовательский"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Последняя проверка в"
 msgstr "Последняя проверка в"
@@ -2600,7 +2623,7 @@ msgstr ""
 "Credentials, а затем выберите одну из учетных данных ниже, чтобы запросить "
 "Credentials, а затем выберите одну из учетных данных ниже, чтобы запросить "
 "API провайдера DNS."
 "API провайдера DNS."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2889,58 +2912,60 @@ msgstr "Успешно удалено"
 msgid "Rename"
 msgid "Rename"
 msgstr "Переименовать"
 msgstr "Переименовать"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "%{orig_path} успешно переименован в %{new_path} на %{env_name}"
 msgstr "%{orig_path} успешно переименован в %{new_path} на %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Сайт %{name} успешно переименован в %{new_name} на %{node}"
 msgstr "Сайт %{name} успешно переименован в %{new_name} на %{node}"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 msgstr "Переименование %{orig_path} в %{new_path} на %{env_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Поток %{name} успешно переименован в %{new_name} на %{node}"
 msgstr "Поток %{name} успешно переименован в %{new_name} на %{node}"
 
 
@@ -3100,43 +3125,43 @@ msgstr "Сохранить директиву"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Ошибка сохранения %{msg}"
 msgstr "Ошибка сохранения %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Ошибка переименования удаленной конфигурации"
 msgstr "Ошибка переименования удаленной конфигурации"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 msgstr "Переименование удаленной конфигурации прошло успешно"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Продублированно %{conf_name} в %{node_name}"
 msgstr "Продублированно %{conf_name} в %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Сайт %{name} успешно сохранён на %{node}"
 msgstr "Сайт %{name} успешно сохранён на %{node}"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 msgstr "Не удалось развернуть %{conf_name} на %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Поток %{name} успешно сохранён на %{node}"
 msgstr "Поток %{name} успешно сохранён на %{node}"
 
 
@@ -3165,10 +3190,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -3209,11 +3230,6 @@ msgstr "Информация о сервере"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Информация о сервере"
 msgstr "Информация о сервере"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Информация о сервере"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "server_name не нашел в директивах"
 msgstr "server_name не нашел в директивах"
@@ -3463,38 +3479,38 @@ msgstr "Синхронизация"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Синхронизировать сертификат"
 msgstr "Синхронизировать сертификат"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Сертификат %{cert_name} успешно синхронизирован с %{env_name}"
 msgstr "Сертификат %{cert_name} успешно синхронизирован с %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Сертификат %{cert_name} успешно синхронизирован с %{env_name}"
 msgstr "Сертификат %{cert_name} успешно синхронизирован с %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Ошибка синхронизации сертификата"
 msgstr "Ошибка синхронизации сертификата"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Сертификат успешно синхронизирован"
 msgstr "Сертификат успешно синхронизирован"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Конфигурация синхронизирована %{config_name} с %{env_name} успешно"
 msgstr "Конфигурация синхронизирована %{config_name} с %{env_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Конфигурация синхронизирована %{config_name} с %{env_name} успешно"
 msgstr "Конфигурация синхронизирована %{config_name} с %{env_name} успешно"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Ошибка синхронизации конфигурации"
 msgstr "Ошибка синхронизации конфигурации"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Синхронизация конфигурации успешна"
 msgstr "Синхронизация конфигурации успешна"
 
 
@@ -4099,6 +4115,18 @@ msgstr "Ваши старые коды больше не будут работа
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Журналы доступа"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "API токен"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Информация о сервере"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Вы хотите отключить этот сайт?"
 #~ msgstr "Вы хотите отключить этот сайт?"
 
 

+ 117 - 89
app/src/language/tr_TR/app.po

@@ -33,11 +33,6 @@ msgstr "Erişim Günlükleri"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Erişim Günlükleri"
 msgstr "Erişim Günlükleri"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Erişim Günlükleri"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -118,7 +113,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -374,11 +369,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API Token"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "İle Oluşturuldu"
 msgstr "İle Oluşturuldu"
@@ -428,11 +418,43 @@ msgstr ""
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Yapılandırma Şablonları"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Senkronizasyon Sertifikası Hatası"
 msgstr "Senkronizasyon Sertifikası Hatası"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Yapılandırma Şablonları"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Sertifika Listesi"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Senkronizasyon Sertifikası Hatası"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -492,10 +514,6 @@ msgstr "Değişen Dosya Yolu"
 msgid "Channel"
 msgid "Channel"
 msgstr "Kanal"
 msgstr "Kanal"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Tekrar kontrol et"
 msgstr "Tekrar kontrol et"
@@ -775,33 +793,33 @@ msgstr "Sil"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "Kalıcı Olarak Sil"
 msgstr "Kalıcı Olarak Sil"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
@@ -810,13 +828,13 @@ msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Siteyi sil: %{site_name}"
 msgstr "Siteyi sil: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
@@ -854,10 +872,6 @@ msgstr "Detaylar"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Geliştirme modu"
 msgstr "Geliştirme modu"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -895,72 +909,72 @@ msgstr "Devre Dışı"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "%{name} için otomatik yenilemeyi devre dışı bırakma başarısız oldu"
 msgstr "%{name} için otomatik yenilemeyi devre dışı bırakma başarısız oldu"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr ""
 msgstr ""
@@ -1145,72 +1159,72 @@ msgstr "Etkinleştirme başarısız"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "TOTP'yi Etkinleştir"
 msgstr "TOTP'yi Etkinleştir"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 "oldu"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
@@ -1928,6 +1942,15 @@ msgstr "Anahtar Türü"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Özelleştirilmiş"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "En son şu tarihte kontrol edildi"
 msgstr "En son şu tarihte kontrol edildi"
@@ -2715,7 +2738,7 @@ msgstr ""
 "ekleyin ve ardından DNS sağlayıcısının API'sini istemek için aşağıdaki "
 "ekleyin ve ardından DNS sağlayıcısının API'sini istemek için aşağıdaki "
 "kimlik bilgilerinden birini seçin."
 "kimlik bilgilerinden birini seçin."
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -3041,67 +3064,69 @@ msgstr "Başarıyla kaldırıldı"
 msgid "Rename"
 msgid "Rename"
 msgstr "Yeniden Adlandır"
 msgstr "Yeniden Adlandır"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr ""
 msgstr ""
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr ""
 msgstr ""
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr ""
 msgstr ""
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr ""
 msgstr ""
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr ""
 msgstr ""
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 "2] üzerinde %{orig_path}'ı %{new_path} olarak başarıyla yeniden adlandırın"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr ""
 msgstr ""
@@ -3280,45 +3305,45 @@ msgstr "Direktifi Kaydet"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Hatayı kaydet %{msg}"
 msgstr "Hatayı kaydet %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr ""
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 "%{conf_name} yapılandırmasını %{node_name} düğümüne dağıtma başarısız oldu"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
@@ -3350,10 +3375,6 @@ msgstr "Hesabı uygulamaya eklemek için QR kodunu cep telefonunuzla tarayın."
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 #, fuzzy
 #, fuzzy
 msgid "Secret has been copied"
 msgid "Secret has been copied"
@@ -3398,11 +3419,6 @@ msgstr "Sunucu Bilgisi"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Sunucu Bilgisi"
 msgstr "Sunucu Bilgisi"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Sunucu Bilgisi"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 #, fuzzy
 #, fuzzy
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
@@ -3678,42 +3694,42 @@ msgstr "Eşitle"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Senkronizasyon Sertifikası"
 msgstr "Senkronizasyon Sertifikası"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Sertifika %{cert_name}'ı %{env_name} ile başarıyla senkronize edin"
 msgstr "Sertifika %{cert_name}'ı %{env_name} ile başarıyla senkronize edin"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Sertifika %{cert_name}'ı %{env_name} ile başarıyla senkronize edin"
 msgstr "Sertifika %{cert_name}'ı %{env_name} ile başarıyla senkronize edin"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Senkronizasyon Sertifikası Hatası"
 msgstr "Senkronizasyon Sertifikası Hatası"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Senkronizasyon Sertifikası Başarısı"
 msgstr "Senkronizasyon Sertifikası Başarısı"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Config %{config_name} ile %{env_name}'i başarıyla senkronize edin"
 msgstr "Config %{config_name} ile %{env_name}'i başarıyla senkronize edin"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Config %{config_name} ile %{env_name}'i başarıyla senkronize edin"
 msgstr "Config %{config_name} ile %{env_name}'i başarıyla senkronize edin"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Senkronizasyon Yapılandırma Hatası"
 msgstr "Senkronizasyon Yapılandırma Hatası"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
@@ -4390,6 +4406,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "Geçiş anahtarlarınız"
 msgstr "Geçiş anahtarlarınız"
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Erişim Günlükleri"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "API Token"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Sunucu Bilgisi"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Bu siteyi devre dışı bırakmak istiyor musunuz?"
 #~ msgstr "Bu siteyi devre dışı bırakmak istiyor musunuz?"
 
 

+ 113 - 88
app/src/language/vi_VN/app.po

@@ -30,11 +30,6 @@ msgstr "Log truy cập"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Log truy cập"
 msgstr "Log truy cập"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "Log truy cập"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
@@ -119,7 +114,7 @@ msgstr ""
 msgid "All"
 msgid "All"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
 msgstr ""
@@ -389,10 +384,6 @@ msgstr ""
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr ""
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "Xây dựng với"
 msgstr "Xây dựng với"
@@ -442,11 +433,43 @@ msgstr "Tự động ký chứng chỉ SSL"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr ""
 msgstr ""
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "Mẫu Cấu hình"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 #, fuzzy
 #, fuzzy
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "Mẫu Cấu hình"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "Danh sách chứng chỉ"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "Chứng chỉ đã hết hạn"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 #, fuzzy
 #, fuzzy
 msgid "Certificate parse error"
 msgid "Certificate parse error"
@@ -513,10 +536,6 @@ msgstr "Thay đổi chứng chỉ"
 msgid "Channel"
 msgid "Channel"
 msgstr "Kênh"
 msgstr "Kênh"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "Kiểm tra lại"
 msgstr "Kiểm tra lại"
@@ -800,32 +819,32 @@ msgstr "Xoá"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr ""
 msgstr ""
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
@@ -834,12 +853,12 @@ msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Xoá trang web: %{site_name}"
 msgstr "Xoá trang web: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
@@ -879,10 +898,6 @@ msgstr "Chi tiết"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "Chế độ phát triển"
 msgstr "Chế độ phát triển"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -921,62 +936,62 @@ msgstr "Tắt"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Tắt tự động gia hạn SSL cho %{name} thất bại"
 msgstr "Tắt tự động gia hạn SSL cho %{name} thất bại"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
@@ -1166,62 +1181,62 @@ msgstr "Bật không thành công"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "Bật TLS"
 msgstr "Bật TLS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 msgstr "Không thể bật %{conf_name} trên %{node_name}"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
@@ -1941,6 +1956,15 @@ msgstr "Loại"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "Tuỳ chỉnh"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Kiểm tra lần cuối lúc"
 msgstr "Kiểm tra lần cuối lúc"
@@ -2660,7 +2684,7 @@ msgstr ""
 "Trước tiên, vui lòng thêm thông tin xác thực trong Chứng chỉ > Thông tin xác "
 "Trước tiên, vui lòng thêm thông tin xác thực trong Chứng chỉ > Thông tin xác "
 "thực DNS, sau đó chọn nhà cung cấp DNS"
 "thực DNS, sau đó chọn nhà cung cấp DNS"
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2952,62 +2976,64 @@ msgstr "Xoá thành công"
 msgid "Rename"
 msgid "Rename"
 msgstr "Username"
 msgstr "Username"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
@@ -3175,44 +3201,44 @@ msgstr "Lưu Directive"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Đã xảy ra lỗi khi lưu %{msg}"
 msgstr "Đã xảy ra lỗi khi lưu %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 msgstr "Triển khai %{conf_name} tới %{node_name} thất bại"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
@@ -3241,10 +3267,6 @@ msgstr ""
 msgid "SDK"
 msgid "SDK"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
@@ -3284,11 +3306,6 @@ msgstr "Thông tin máy chủ"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Thông tin máy chủ"
 msgstr "Thông tin máy chủ"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Thông tin máy chủ"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "không tìm thấy server_name trong directives"
 msgstr "không tìm thấy server_name trong directives"
@@ -3541,42 +3558,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "Gia hạn chứng chỉ SSL"
 msgstr "Gia hạn chứng chỉ SSL"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgstr "Gia hạn chứng chỉ SSL thất bại"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 #, fuzzy
 #, fuzzy
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
@@ -4163,6 +4180,14 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Log truy cập"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Thông tin máy chủ"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "Bạn muốn tắt trang web này ?"
 #~ msgstr "Bạn muốn tắt trang web này ?"

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

@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2025-04-09 17:11+0800\n"
+"PO-Revision-Date: 2025-04-09 22:02+0800\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
 "Last-Translator: 0xJacky <me@jackyu.cn>\n"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
@@ -35,10 +35,6 @@ msgstr "访问日志"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "访问日志"
 msgstr "访问日志"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-msgid "Access Token"
-msgstr "Access Token"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -118,7 +114,7 @@ msgstr "然后,刷新此页面并再次点击添加 Passkey。"
 msgid "All"
 msgid "All"
 msgstr "全部"
 msgstr "全部"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr "所有恢复码都已被使用"
 msgstr "所有恢复码都已被使用"
@@ -362,10 +358,6 @@ msgstr "以下是您选定的需要批量修改的项目"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "区块为空"
 msgstr "区块为空"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr "机器人令牌"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "构建基于"
 msgstr "构建基于"
@@ -413,10 +405,38 @@ msgstr "证书"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr "证书路径不在 Nginx 配置目录下"
 msgstr "证书路径不在 Nginx 配置目录下"
 
 
+#: src/components/Notification/notifications.ts:28
+msgid "Certificate %{name} has expired"
+msgstr "证书 %{name} 已过期"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr "证书 %{name} 将在 %{days} 天后失效"
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr "证书 %{name} 将在 1 天后过期"
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "证书解码错误"
 msgstr "证书解码错误"
 
 
+#: src/components/Notification/notifications.ts:31
+msgid "Certificate Expiration Notice"
+msgstr "证书到期通知"
+
+#: src/components/Notification/notifications.ts:27
+msgid "Certificate Expired"
+msgstr "证书过期"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+msgid "Certificate Expiring Soon"
+msgstr "证书即将到期"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgid "Certificate parse error"
 msgstr "证书解析错误"
 msgstr "证书解析错误"
@@ -471,10 +491,6 @@ msgstr "变更后的路径"
 msgid "Channel"
 msgid "Channel"
 msgstr "通道"
 msgstr "通道"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr "聊天 ID"
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "重新检查"
 msgstr "重新检查"
@@ -749,27 +765,27 @@ msgstr "删除"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "彻底删除"
 msgstr "彻底删除"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "删除远程站点错误"
 msgstr "删除远程站点错误"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "删除远程站点成功"
 msgstr "删除远程站点成功"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "删除远程 Stream 错误"
 msgstr "删除远程 Stream 错误"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "删除远程 Stream 成功"
 msgstr "删除远程 Stream 成功"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 msgstr "部署 %{name} 到 %{node} 失败"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 
 
@@ -777,11 +793,11 @@ msgstr "成功从 %{node} 中删除站点 %{name}"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 msgstr "部署 %{name} 到 %{node} 失败"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 
 
@@ -818,10 +834,6 @@ msgstr "详情"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "开发模式"
 msgstr "开发模式"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr "设备密钥"
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr "钉钉"
 msgstr "钉钉"
@@ -858,51 +870,51 @@ msgstr "禁用"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "关闭 %{name} 自动续签失败"
 msgstr "关闭 %{name} 自动续签失败"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "禁用远程站点错误"
 msgstr "禁用远程站点错误"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "禁用远程站点维护错误"
 msgstr "禁用远程站点维护错误"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "禁用远程站点维护成功"
 msgstr "禁用远程站点维护成功"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "禁用远程站点成功"
 msgstr "禁用远程站点成功"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "禁用远程 Stream 错误"
 msgstr "禁用远程 Stream 错误"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "禁用远程 Stream成功"
 msgstr "禁用远程 Stream成功"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "停用站点 %{name} 维护 %{node} 失败"
 msgstr "停用站点 %{name} 维护 %{node} 失败"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "成功停用站点 %{name} 上 %{node} 的维护功能"
 msgstr "成功停用站点 %{name} 上 %{node} 的维护功能"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
 
@@ -1075,51 +1087,51 @@ msgstr "启用失败"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "启用 HTTPS"
 msgstr "启用 HTTPS"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "启用远程站点错误"
 msgstr "启用远程站点错误"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "在 %{node} 上启用 %{site} 失败"
 msgstr "在 %{node} 上启用 %{site} 失败"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "成功启用远程站点维护"
 msgstr "成功启用远程站点维护"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "启用远程站点成功"
 msgstr "启用远程站点成功"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "启用远程 Steam 错误"
 msgstr "启用远程 Steam 错误"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "启用远程 Stream 成功"
 msgstr "启用远程 Stream 成功"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "在 %{node} 中为 %{name} 启用维护模式失败"
 msgstr "在 %{node} 中为 %{name} 启用维护模式失败"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "在 %{node} 上成功启用站点 %{name} 维护模式"
 msgstr "在 %{node} 上成功启用站点 %{name} 维护模式"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
 
@@ -1782,6 +1794,14 @@ msgstr "密钥类型"
 msgid "Language"
 msgid "Language"
 msgstr "语言"
 msgstr "语言"
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr "Lark"
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+msgid "Lark Custom"
+msgstr "Lark 自定义"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "最后检查时间"
 msgstr "最后检查时间"
@@ -2462,7 +2482,7 @@ msgstr ""
 "请首先在 “证书”> “DNS 凭证” 中添加凭证,然后在下方选择一个凭证,请求 DNS 提供"
 "请首先在 “证书”> “DNS 凭证” 中添加凭证,然后在下方选择一个凭证,请求 DNS 提供"
 "商的 API。"
 "商的 API。"
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2732,51 +2752,53 @@ msgstr "删除成功"
 msgid "Rename"
 msgid "Rename"
 msgstr "重命名"
 msgstr "重命名"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}"
 msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}"
 msgstr "成功将 %{env_name} 上的 %{orig_path} 重命名为 %{new_path}"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "远程配置重命名错误"
 msgstr "远程配置重命名错误"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "重命名远程配置成功"
 msgstr "重命名远程配置成功"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "重命名远程站点错误"
 msgstr "重命名远程站点错误"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "重命名远程站点成功"
 msgstr "重命名远程站点成功"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "重命名远程 Stream 错误"
 msgstr "重命名远程 Stream 错误"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "重命名远程 Stream成功"
 msgstr "重命名远程 Stream成功"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 
 
@@ -2926,37 +2948,37 @@ msgstr "保存指令"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "保存错误 %{msg}"
 msgstr "保存错误 %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "保存远程站点错误"
 msgstr "保存远程站点错误"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "保存远程站点成功"
 msgstr "保存远程站点成功"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "保存远程 Stream 错误"
 msgstr "保存远程 Stream 错误"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "保存远程 Stream 成功"
 msgstr "保存远程 Stream 成功"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 msgstr "部署 %{name} 到 %{node} 失败"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
 
@@ -2983,10 +3005,6 @@ msgstr "用手机扫描二维码,将账户添加到应用程序中。"
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr "秘密(可选)"
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "密钥已复制"
 msgstr "密钥已复制"
@@ -3025,10 +3043,6 @@ msgstr "服务器"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "服务器信息"
 msgstr "服务器信息"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-msgid "Server URL"
-msgstr "服务器 URL"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "未在指令集合中找到 server_name"
 msgstr "未在指令集合中找到 server_name"
@@ -3268,35 +3282,35 @@ msgstr "同步"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "同步证书"
 msgstr "同步证书"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "证书 %{cert_name} 已成功同步到 %{env_name}"
 msgstr "证书 %{cert_name} 已成功同步到 %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "证书 %{cert_name} 已成功同步到 %{env_name}"
 msgstr "证书 %{cert_name} 已成功同步到 %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "同步证书错误"
 msgstr "同步证书错误"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "同步证书成功"
 msgstr "同步证书成功"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "配置 %{config_name} 成功同步到 %{env_name}"
 msgstr "配置 %{config_name} 成功同步到 %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "配置 %{config_name} 成功同步到 %{env_name}"
 msgstr "配置 %{config_name} 成功同步到 %{env_name}"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "同步配置错误"
 msgstr "同步配置错误"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
@@ -3872,6 +3886,24 @@ msgstr "您的旧代码将不再有效。"
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "你的 Passkeys"
 msgstr "你的 Passkeys"
 
 
+#~ msgid "Access Token"
+#~ msgstr "Access Token"
+
+#~ msgid "Bot Token"
+#~ msgstr "机器人令牌"
+
+#~ msgid "Chat ID"
+#~ msgstr "聊天 ID"
+
+#~ msgid "Device Key"
+#~ msgstr "设备密钥"
+
+#~ msgid "Secret (Optional)"
+#~ msgstr "秘密(可选)"
+
+#~ msgid "Server URL"
+#~ msgstr "服务器 URL"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "你想停用这个网站吗?"
 #~ msgstr "你想停用这个网站吗?"
 
 

+ 117 - 89
app/src/language/zh_TW/app.po

@@ -40,11 +40,6 @@ msgstr "訪問日誌"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "訪問日誌"
 msgstr "訪問日誌"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:9
-#, fuzzy
-msgid "Access Token"
-msgstr "訪問日誌"
-
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/routes/modules/certificates.ts:20 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
@@ -124,7 +119,7 @@ msgstr "然後,重新整理此頁面並再次點選新增通行密鑰。"
 msgid "All"
 msgid "All"
 msgstr "全部"
 msgstr "全部"
 
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgid "All Recovery Codes Have Been Used"
 msgstr "所有恢復碼都已使用完畢"
 msgstr "所有恢復碼都已使用完畢"
@@ -374,11 +369,6 @@ msgstr "以下是您要批次修改的選定項目"
 msgid "Block is nil"
 msgid "Block is nil"
 msgstr "區塊為 nil"
 msgstr "區塊為 nil"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "Token"
-
 #: src/views/system/About.vue:55
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgid "Build with"
 msgstr "構建基於"
 msgstr "構建基於"
@@ -426,10 +416,42 @@ msgstr "證書"
 msgid "Cert path is not under the nginx conf dir"
 msgid "Cert path is not under the nginx conf dir"
 msgstr "證書路徑不在 Nginx 設定檔資料夾下"
 msgstr "證書路徑不在 Nginx 設定檔資料夾下"
 
 
+#: src/components/Notification/notifications.ts:28
+#, fuzzy
+msgid "Certificate %{name} has expired"
+msgstr "明文為空"
+
+#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:36
+#: src/components/Notification/notifications.ts:40
+msgid "Certificate %{name} will expire in %{days} days"
+msgstr ""
+
+#: src/components/Notification/notifications.ts:44
+msgid "Certificate %{name} will expire in 1 day"
+msgstr ""
+
 #: src/constants/errors/cert.ts:4
 #: src/constants/errors/cert.ts:4
 msgid "Certificate decode error"
 msgid "Certificate decode error"
 msgstr "證書解碼錯誤"
 msgstr "證書解碼錯誤"
 
 
+#: src/components/Notification/notifications.ts:31
+#, fuzzy
+msgid "Certificate Expiration Notice"
+msgstr "明文為空"
+
+#: src/components/Notification/notifications.ts:27
+#, fuzzy
+msgid "Certificate Expired"
+msgstr "憑證清單"
+
+#: src/components/Notification/notifications.ts:35
+#: src/components/Notification/notifications.ts:39
+#: src/components/Notification/notifications.ts:43
+#, fuzzy
+msgid "Certificate Expiring Soon"
+msgstr "證書解析錯誤"
+
 #: src/constants/errors/cert.ts:5
 #: src/constants/errors/cert.ts:5
 msgid "Certificate parse error"
 msgid "Certificate parse error"
 msgstr "證書解析錯誤"
 msgstr "證書解析錯誤"
@@ -485,10 +507,6 @@ msgstr "變更後路徑"
 msgid "Channel"
 msgid "Channel"
 msgstr "通道"
 msgstr "通道"
 
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgid "Check again"
 msgstr "再次檢查"
 msgstr "再次檢查"
@@ -768,27 +786,27 @@ msgstr "刪除"
 msgid "Delete Permanently"
 msgid "Delete Permanently"
 msgstr "永久刪除"
 msgstr "永久刪除"
 
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 msgid "Delete Remote Site Error"
 msgid "Delete Remote Site Error"
 msgstr "刪除遠端網站錯誤"
 msgstr "刪除遠端網站錯誤"
 
 
-#: src/components/Notification/notifications.ts:59 src/language/constants.ts:49
+#: src/components/Notification/notifications.ts:79 src/language/constants.ts:49
 msgid "Delete Remote Site Success"
 msgid "Delete Remote Site Success"
 msgstr "刪除遠端網站成功"
 msgstr "刪除遠端網站成功"
 
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 msgid "Delete Remote Stream Error"
 msgid "Delete Remote Stream Error"
 msgstr "刪除遠端串流錯誤"
 msgstr "刪除遠端串流錯誤"
 
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 msgid "Delete Remote Stream Success"
 msgid "Delete Remote Stream Success"
 msgstr "刪除遠端串流成功"
 msgstr "刪除遠端串流成功"
 
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 msgid "Delete site %{name} from %{node} failed"
 msgid "Delete site %{name} from %{node} failed"
 msgstr "從 %{node} 刪除網站 %{name} 失敗"
 msgstr "從 %{node} 刪除網站 %{name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 msgid "Delete site %{name} from %{node} successfully"
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "成功從 %{node} 移除站點 %{name}"
 msgstr "成功從 %{node} 移除站點 %{name}"
 
 
@@ -796,11 +814,11 @@ msgstr "成功從 %{node} 移除站點 %{name}"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "刪除網站:%{site_name}"
 msgstr "刪除網站:%{site_name}"
 
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 msgid "Delete stream %{name} from %{node} failed"
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "部署 %{conf_name} 至 %{node} 失敗"
 msgstr "部署 %{conf_name} 至 %{node} 失敗"
 
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 msgid "Delete stream %{name} from %{node} successfully"
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "成功從 %{node} 移除站點 %{name}"
 msgstr "成功從 %{node} 移除站點 %{name}"
 
 
@@ -837,10 +855,6 @@ msgstr "詳細資料"
 msgid "Development Mode"
 msgid "Development Mode"
 msgstr "開發模式"
 msgstr "開發模式"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgid "DingTalk"
 msgstr ""
 msgstr ""
@@ -878,58 +892,58 @@ msgstr "停用"
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "關閉 %{name} 自動續簽失敗"
 msgstr "關閉 %{name} 自動續簽失敗"
 
 
-#: src/components/Notification/notifications.ts:63 src/language/constants.ts:52
+#: src/components/Notification/notifications.ts:83 src/language/constants.ts:52
 msgid "Disable Remote Site Error"
 msgid "Disable Remote Site Error"
 msgstr "禁用遠端站点錯誤"
 msgstr "禁用遠端站点錯誤"
 
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgid "Disable Remote Site Maintenance Error"
 msgstr "禁用遠端站点錯誤"
 msgstr "禁用遠端站点錯誤"
 
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 msgid "Disable Remote Site Maintenance Success"
 msgstr "禁用遠端站点成功"
 msgstr "禁用遠端站点成功"
 
 
-#: src/components/Notification/notifications.ts:67 src/language/constants.ts:51
+#: src/components/Notification/notifications.ts:87 src/language/constants.ts:51
 msgid "Disable Remote Site Success"
 msgid "Disable Remote Site Success"
 msgstr "禁用遠端站点成功"
 msgstr "禁用遠端站点成功"
 
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 msgid "Disable Remote Stream Error"
 msgid "Disable Remote Stream Error"
 msgstr "禁用遠端串流錯誤"
 msgstr "禁用遠端串流錯誤"
 
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 msgid "Disable Remote Stream Success"
 msgid "Disable Remote Stream Success"
 msgstr "禁用遠端串流成功"
 msgstr "禁用遠端串流成功"
 
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgid "Disable site %{name} from %{node} failed"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
 msgstr "成功禁用 %{node} 中的站点 %{site}"
@@ -1106,60 +1120,60 @@ msgstr "啟用失敗"
 msgid "Enable HTTPS"
 msgid "Enable HTTPS"
 msgstr "啟用 TOTP"
 msgstr "啟用 TOTP"
 
 
-#: src/components/Notification/notifications.ts:71 src/language/constants.ts:54
+#: src/components/Notification/notifications.ts:91 src/language/constants.ts:54
 msgid "Enable Remote Site Error"
 msgid "Enable Remote Site Error"
 msgstr "啟用遠端站點錯誤"
 msgstr "啟用遠端站點錯誤"
 
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgid "Enable Remote Site Maintenance Error"
 msgstr "啟用遠端站點錯誤"
 msgstr "啟用遠端站點錯誤"
 
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 msgid "Enable Remote Site Maintenance Success"
 msgstr "啟用遠端站點成功"
 msgstr "啟用遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:75 src/language/constants.ts:53
+#: src/components/Notification/notifications.ts:95 src/language/constants.ts:53
 msgid "Enable Remote Site Success"
 msgid "Enable Remote Site Success"
 msgstr "啟用遠端站點成功"
 msgstr "啟用遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgid "Enable Remote Stream Error"
 msgstr "啟用遠端站點錯誤"
 msgstr "啟用遠端站點錯誤"
 
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgid "Enable Remote Stream Success"
 msgstr "啟用遠端站點成功"
 msgstr "啟用遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "成功啟用站點 %{site} 在 %{node}"
 msgstr "成功啟用站點 %{site} 在 %{node}"
 
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgid "Enable site %{name} on %{node} failed"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "成功啟用站點 %{site} 在 %{node}"
 msgstr "成功啟用站點 %{site} 在 %{node}"
 
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 msgstr "在 %{node_name} 啟用 %{conf_name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "成功啟用站點 %{site} 在 %{node}"
 msgstr "成功啟用站點 %{site} 在 %{node}"
@@ -1871,6 +1885,15 @@ msgstr "密鑰類型"
 msgid "Language"
 msgid "Language"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/components/ExternalNotify/lark.ts:5
+msgid "Lark"
+msgstr ""
+
+#: src/views/preference/components/ExternalNotify/lark_custom.ts:5
+#, fuzzy
+msgid "Lark Custom"
+msgstr "自訂"
+
 #: src/views/system/Upgrade.vue:179
 #: src/views/system/Upgrade.vue:179
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "上次檢查時間"
 msgstr "上次檢查時間"
@@ -2569,7 +2592,7 @@ msgstr ""
 "請先在「憑證」 > 「DNS 認證」中新增認證,然後選擇以下認證之一以請求 DNS 供應"
 "請先在「憑證」 > 「DNS 認證」中新增認證,然後選擇以下認證之一以請求 DNS 供應"
 "商的 API。"
 "商的 API。"
 
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 #: src/language/constants.ts:59
 msgid ""
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2848,57 +2871,59 @@ msgstr "移除成功"
 msgid "Rename"
 msgid "Rename"
 msgstr "重命名"
 msgstr "重命名"
 
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "成功將 %{env_name} 上的 %{orig_path} 重命名為 %{new_path}"
 msgstr "成功將 %{env_name} 上的 %{orig_path} 重命名為 %{new_path}"
 
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr "成功將 %{env_name} 上的 %{orig_path} 重命名為 %{new_path}"
 msgstr "成功將 %{env_name} 上的 %{orig_path} 重命名為 %{new_path}"
 
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 msgid "Rename Remote Config Error"
 msgid "Rename Remote Config Error"
 msgstr "重命名遠端配置錯誤"
 msgstr "重命名遠端配置錯誤"
 
 
-#: src/components/Notification/notifications.ts:49 src/language/constants.ts:41
+#: src/components/Notification/notifications.ts:69 src/language/constants.ts:41
 msgid "Rename Remote Config Success"
 msgid "Rename Remote Config Success"
 msgstr "重新命名遠端配置成功"
 msgstr "重新命名遠端配置成功"
 
 
-#: src/components/Notification/notifications.ts:95 src/language/constants.ts:56
+#: src/components/Notification/notifications.ts:115
+#: src/language/constants.ts:56
 msgid "Rename Remote Site Error"
 msgid "Rename Remote Site Error"
 msgstr "重命名遠端遠端站點時發生錯誤"
 msgstr "重命名遠端遠端站點時發生錯誤"
 
 
-#: src/components/Notification/notifications.ts:99 src/language/constants.ts:55
+#: src/components/Notification/notifications.ts:119
+#: src/language/constants.ts:55
 msgid "Rename Remote Site Success"
 msgid "Rename Remote Site Success"
 msgstr "重新命名遠端站點成功"
 msgstr "重新命名遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgid "Rename Remote Stream Error"
 msgstr "重命名遠端遠端站點時發生錯誤"
 msgstr "重命名遠端遠端站點時發生錯誤"
 
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgid "Rename Remote Stream Success"
 msgstr "重新命名遠端站點成功"
 msgstr "重新命名遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
 msgstr "成功將站點 %{site} 重新命名為 %{new_site} 於 %{node}"
@@ -3058,42 +3083,42 @@ msgstr "儲存指令"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "儲存錯誤 %{msg}"
 msgstr "儲存錯誤 %{msg}"
 
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgid "Save Remote Site Error"
 msgstr "儲存遠端站點時發生錯誤"
 msgstr "儲存遠端站點時發生錯誤"
 
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgid "Save Remote Site Success"
 msgstr "儲存遠端站點成功"
 msgstr "儲存遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgid "Save Remote Stream Error"
 msgstr "儲存遠端站點時發生錯誤"
 msgstr "儲存遠端站點時發生錯誤"
 
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgid "Save Remote Stream Success"
 msgstr "儲存遠端站點成功"
 msgstr "儲存遠端站點成功"
 
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgid "Save site %{name} to %{node} failed"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
 
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgid "Save site %{name} to %{node} successfully"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
 
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgid "Save stream %{name} to %{node} failed"
 msgstr "部署 %{conf_name} 至 %{node_name} 失敗"
 msgstr "部署 %{conf_name} 至 %{node_name} 失敗"
 
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
 msgstr "成功將站點 %{site} 儲存至 %{node}"
@@ -3121,10 +3146,6 @@ msgstr "用手機掃描二維碼將賬戶添加到應用程序中。"
 msgid "SDK"
 msgid "SDK"
 msgstr "SDK"
 msgstr "SDK"
 
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "密鑰已複製"
 msgstr "密鑰已複製"
@@ -3165,11 +3186,6 @@ msgstr "伺服器資訊"
 msgid "Server Info"
 msgid "Server Info"
 msgstr "伺服器資訊"
 msgstr "伺服器資訊"
 
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "伺服器資訊"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "在指令中未找到 server_name"
 msgstr "在指令中未找到 server_name"
@@ -3419,38 +3435,38 @@ msgstr "同步"
 msgid "Sync Certificate"
 msgid "Sync Certificate"
 msgstr "同步憑證"
 msgstr "同步憑證"
 
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "同步憑證 %{cert_name} 到 %{env_name} 成功"
 msgstr "同步憑證 %{cert_name} 到 %{env_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 msgstr "同步憑證 %{cert_name} 到 %{env_name} 成功"
 msgstr "同步憑證 %{cert_name} 到 %{env_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:27 src/language/constants.ts:39
+#: src/components/Notification/notifications.ts:47 src/language/constants.ts:39
 msgid "Sync Certificate Error"
 msgid "Sync Certificate Error"
 msgstr "同步憑證錯誤"
 msgstr "同步憑證錯誤"
 
 
-#: src/components/Notification/notifications.ts:31 src/language/constants.ts:38
+#: src/components/Notification/notifications.ts:51 src/language/constants.ts:38
 msgid "Sync Certificate Success"
 msgid "Sync Certificate Success"
 msgstr "同步憑證成功"
 msgstr "同步憑證成功"
 
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "同步配置 %{config_name} 到 %{env_name} 成功"
 msgstr "同步配置 %{config_name} 到 %{env_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgid "Sync config %{config_name} to %{env_name} successfully"
 msgstr "同步配置 %{config_name} 到 %{env_name} 成功"
 msgstr "同步配置 %{config_name} 到 %{env_name} 成功"
 
 
-#: src/components/Notification/notifications.ts:37 src/language/constants.ts:45
+#: src/components/Notification/notifications.ts:57 src/language/constants.ts:45
 msgid "Sync Config Error"
 msgid "Sync Config Error"
 msgstr "同步配置錯誤"
 msgstr "同步配置錯誤"
 
 
-#: src/components/Notification/notifications.ts:41 src/language/constants.ts:44
+#: src/components/Notification/notifications.ts:61 src/language/constants.ts:44
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
@@ -4030,6 +4046,18 @@ msgstr "您的舊代碼將不再有效。"
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "您的通行密鑰"
 msgstr "您的通行密鑰"
 
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "訪問日誌"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "Token"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "伺服器資訊"
+
 #~ msgid "Do you want to disable this site?"
 #~ msgid "Do you want to disable this site?"
 #~ msgstr "您想停用這個網站嗎?"
 #~ msgstr "您想停用這個網站嗎?"
 
 

+ 1 - 2
go.mod

@@ -119,6 +119,7 @@ require (
 	github.com/gin-contrib/sse v1.1.0 // indirect
 	github.com/gin-contrib/sse v1.1.0 // indirect
 	github.com/go-errors/errors v1.5.1 // indirect
 	github.com/go-errors/errors v1.5.1 // indirect
 	github.com/go-jose/go-jose/v4 v4.1.0 // indirect
 	github.com/go-jose/go-jose/v4 v4.1.0 // indirect
+	github.com/go-lark/lark v1.15.1 // indirect
 	github.com/go-logr/logr v1.4.2 // indirect
 	github.com/go-logr/logr v1.4.2 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-ole/go-ole v1.3.0 // indirect
 	github.com/go-ole/go-ole v1.3.0 // indirect
@@ -148,7 +149,6 @@ require (
 	github.com/hashicorp/go-uuid v1.0.3 // indirect
 	github.com/hashicorp/go-uuid v1.0.3 // indirect
 	github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143 // indirect
 	github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143 // indirect
 	github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect
 	github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect
-	github.com/inconshreveable/mousetrap v1.1.0 // indirect
 	github.com/infobloxopen/infoblox-go-client v1.1.1 // indirect
 	github.com/infobloxopen/infoblox-go-client v1.1.1 // indirect
 	github.com/itchyny/timefmt-go v0.1.6 // indirect
 	github.com/itchyny/timefmt-go v0.1.6 // indirect
 	github.com/jackc/pgio v1.0.0 // indirect
 	github.com/jackc/pgio v1.0.0 // indirect
@@ -225,7 +225,6 @@ require (
 	github.com/sony/sonyflake v1.2.0 // indirect
 	github.com/sony/sonyflake v1.2.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/spf13/afero v1.14.0 // indirect
 	github.com/spf13/afero v1.14.0 // indirect
-	github.com/spf13/cobra v1.9.1 // indirect
 	github.com/spf13/pflag v1.0.6 // indirect
 	github.com/spf13/pflag v1.0.6 // indirect
 	github.com/spf13/viper v1.20.1 // indirect
 	github.com/spf13/viper v1.20.1 // indirect
 	github.com/stretchr/objx v0.5.2 // indirect
 	github.com/stretchr/objx v0.5.2 // indirect

+ 8 - 117
go.sum

@@ -39,8 +39,6 @@ cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRY
 cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
 cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
 cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
 cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
 cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
 cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
-cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA=
-cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q=
 cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
 cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
 cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
 cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
 cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
 cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
@@ -180,8 +178,6 @@ cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvj
 cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
 cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
 cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
 cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
 cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
 cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
-cloud.google.com/go/compute v1.36.0 h1:QzLrJRxytIGE8OJWzmMweIdiu2pIlRVq9kSi7+xnDkU=
-cloud.google.com/go/compute v1.36.0/go.mod h1:+GZuz5prSWFLquViP55zcjRrOm7vRpIllx2MaYpzuiI=
 cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
 cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
 cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
 cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
 cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
 cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
@@ -610,28 +606,18 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
 gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
 git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
 git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
-github.com/0xJacky/pofile v0.2.1 h1:ceNyprJOpo7wPPR0rCOuR1gfjYiS8t9YBc73tSLnlDc=
-github.com/0xJacky/pofile v0.2.1/go.mod h1:hOZmte1hWostNs9KCwFRhKM7hf0d19zfWosopngij74=
 github.com/0xJacky/pofile v1.0.0 h1:ZjfpvLlouhnzOsSGhJ/dmqp5DkKg7XGjuulAAXVnhkE=
 github.com/0xJacky/pofile v1.0.0 h1:ZjfpvLlouhnzOsSGhJ/dmqp5DkKg7XGjuulAAXVnhkE=
 github.com/0xJacky/pofile v1.0.0/go.mod h1:qq7YtcX4V35EBfOypsYLuLO7hCBExAH9q7xOxTqv2lQ=
 github.com/0xJacky/pofile v1.0.0/go.mod h1:qq7YtcX4V35EBfOypsYLuLO7hCBExAH9q7xOxTqv2lQ=
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 h1:Dy3M9aegiI7d7PF1LUdjbVigJReo+QOceYsMyFh9qoE=
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 h1:Dy3M9aegiI7d7PF1LUdjbVigJReo+QOceYsMyFh9qoE=
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0/go.mod h1:ZakZtbCXxCz82NJvq7MoREtiQesnDfrtF6RFUGzQfLo=
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0/go.mod h1:ZakZtbCXxCz82NJvq7MoREtiQesnDfrtF6RFUGzQfLo=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 h1:Bg8m3nq/X1DeePkAbCfb6ml6F3F0IunEhE8TMh+lY48=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c=
@@ -710,8 +696,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.103 h1:kZsvZo6waUg5313S6VkoPx8QyyeoUfMgF/KgxpiEfCw=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.103/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.104 h1:/6jF6rhmKZzvZZhzFXWqATazSKL5OSv7p+8PfoT6MG0=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.104 h1:/6jF6rhmKZzvZZhzFXWqATazSKL5OSv7p+8PfoT6MG0=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.104/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.104/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
@@ -730,12 +714,8 @@ github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm
 github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
 github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
 github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
 github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
 github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
 github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
-github.com/aws/aws-sdk-go-v2/config v1.29.12 h1:Y/2a+jLPrPbHpFkpAAYkVEtJmxORlXoo5k2g1fa2sUo=
-github.com/aws/aws-sdk-go-v2/config v1.29.12/go.mod h1:xse1YTjmORlb/6fhkWi8qJh3cvZi4JoVNhc+NbJt4kI=
 github.com/aws/aws-sdk-go-v2/config v1.29.13 h1:RgdPqWoE8nPpIekpVpDJsBckbqT4Liiaq9f35pbTh1Y=
 github.com/aws/aws-sdk-go-v2/config v1.29.13 h1:RgdPqWoE8nPpIekpVpDJsBckbqT4Liiaq9f35pbTh1Y=
 github.com/aws/aws-sdk-go-v2/config v1.29.13/go.mod h1:NI28qs/IOUIRhsR7GQ/JdexoqRN9tDxkIrYZq0SOF44=
 github.com/aws/aws-sdk-go-v2/config v1.29.13/go.mod h1:NI28qs/IOUIRhsR7GQ/JdexoqRN9tDxkIrYZq0SOF44=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.65 h1:q+nV2yYegofO/SUXruT+pn4KxkxmaQ++1B/QedcKBFM=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.65/go.mod h1:4zyjAuGOdikpNYiSGpsGz8hLGmUzlY8pc8r9QQ/RXYQ=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.66 h1:aKpEKaTy6n4CEJeYI1MNj97oSDLi4xro3UzQfwf5RWE=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.66 h1:aKpEKaTy6n4CEJeYI1MNj97oSDLi4xro3UzQfwf5RWE=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.66/go.mod h1:xQ5SusDmHb/fy55wU0QqTy0yNfLqxzec59YcsRZB+rI=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.66/go.mod h1:xQ5SusDmHb/fy55wU0QqTy0yNfLqxzec59YcsRZB+rI=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
@@ -751,24 +731,14 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.1 h1:0j58UseBtLuBcP6nY2z4SM1qZEvLF0ylyH6+ggnphLg=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.1/go.mod h1:Qy22QnQSdHbZwMZrarsWZBIuK51isPlkD+Z4sztxX0o=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.2 h1:Bz0MltpmIFP2EBYADc17VHdXYxZw9JPQl8Ksq+w6aEE=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.2 h1:Bz0MltpmIFP2EBYADc17VHdXYxZw9JPQl8Ksq+w6aEE=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.2/go.mod h1:Qy22QnQSdHbZwMZrarsWZBIuK51isPlkD+Z4sztxX0o=
 github.com/aws/aws-sdk-go-v2/service/lightsail v1.43.2/go.mod h1:Qy22QnQSdHbZwMZrarsWZBIuK51isPlkD+Z4sztxX0o=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.50.0 h1:/nkJHXtJXJeelXHqG0898+fWKgvfaXBhGzbCsSmn9j8=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.50.0/go.mod h1:kGYOjvTa0Vw0qxrqrOLut1vMnui6qLxqv/SX3vYeM8Y=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.51.0 h1:pK3YJIgOzYqctprqQ67kGSjeL+77r9Ue/4/gBonsGNc=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.51.0 h1:pK3YJIgOzYqctprqQ67kGSjeL+77r9Ue/4/gBonsGNc=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.51.0/go.mod h1:kGYOjvTa0Vw0qxrqrOLut1vMnui6qLxqv/SX3vYeM8Y=
 github.com/aws/aws-sdk-go-v2/service/route53 v1.51.0/go.mod h1:kGYOjvTa0Vw0qxrqrOLut1vMnui6qLxqv/SX3vYeM8Y=
-github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 h1:pdgODsAhGo4dvzC3JAG5Ce0PX8kWXrTZGx+jxADD+5E=
-github.com/aws/aws-sdk-go-v2/service/sso v1.25.2/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
 github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8=
 github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8=
 github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
 github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 h1:90uX0veLKcdHVfvxhkWUQSCi5VabtwMLFutYiRke4oo=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
 github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 h1:xz7WvTMfSStb9Y8NpCT82FXLNC3QasqBfuAFHY4Pk5g=
 github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 h1:xz7WvTMfSStb9Y8NpCT82FXLNC3QasqBfuAFHY4Pk5g=
 github.com/aws/aws-sdk-go-v2/service/sts v1.33.18/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
 github.com/aws/aws-sdk-go-v2/service/sts v1.33.18/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
 github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
 github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
@@ -814,7 +784,6 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
 github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -859,7 +828,6 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
 github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
@@ -868,14 +836,11 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I=
-github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4=
 github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM=
 github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM=
 github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
 github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
-github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
+github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
@@ -936,8 +901,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
-github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
 github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU=
 github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU=
@@ -946,16 +909,10 @@ github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3G
 github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
 github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gin-contrib/pprof v1.5.2 h1:Kcq5W2bA2PBcVtF0MqkQjpvCpwJr+pd7zxcQh2csg7E=
-github.com/gin-contrib/pprof v1.5.2/go.mod h1:a1W4CDXwAPm2zql2AKdnT7OVCJdV/oFPhJXVOrDs5Ns=
 github.com/gin-contrib/pprof v1.5.3 h1:Bj5SxJ3kQDVez/s/+f9+meedJIqLS+xlkIVDe/lcvgM=
 github.com/gin-contrib/pprof v1.5.3 h1:Bj5SxJ3kQDVez/s/+f9+meedJIqLS+xlkIVDe/lcvgM=
 github.com/gin-contrib/pprof v1.5.3/go.mod h1:0+LQSZ4SLO0B6+2n6JBzaEygpTBxe/nI+YEYpfQQ6xY=
 github.com/gin-contrib/pprof v1.5.3/go.mod h1:0+LQSZ4SLO0B6+2n6JBzaEygpTBxe/nI+YEYpfQQ6xY=
-github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
-github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0=
 github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
 github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
 github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
 github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
-github.com/gin-contrib/static v1.1.3 h1:WLOpkBtMDJ3gATFZgNJyVibFMio/UHonnueqJsQ0w4U=
-github.com/gin-contrib/static v1.1.3/go.mod h1:zejpJ/YWp8cZj/6EpiL5f/+skv5daQTNwRx1E8Pci30=
 github.com/gin-contrib/static v1.1.5 h1:bAPqT4KTZN+4uDY1b90eSrD1t8iNzod7Jj8njwmnzz4=
 github.com/gin-contrib/static v1.1.5 h1:bAPqT4KTZN+4uDY1b90eSrD1t8iNzod7Jj8njwmnzz4=
 github.com/gin-contrib/static v1.1.5/go.mod h1:8JSEXwZHcQ0uCrLPcsvnAJ4g+ODxeupP8Zetl9fd8wM=
 github.com/gin-contrib/static v1.1.5/go.mod h1:8JSEXwZHcQ0uCrLPcsvnAJ4g+ODxeupP8Zetl9fd8wM=
 github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
@@ -978,8 +935,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gormigrate/gormigrate/v2 v2.1.4 h1:KOPEt27qy1cNzHfMZbp9YTmEuzkY4F4wrdsJW9WFk1U=
 github.com/go-gormigrate/gormigrate/v2 v2.1.4 h1:KOPEt27qy1cNzHfMZbp9YTmEuzkY4F4wrdsJW9WFk1U=
 github.com/go-gormigrate/gormigrate/v2 v2.1.4/go.mod h1:y/6gPAH6QGAgP1UfHMiXcqGeJ88/GRQbfCReE1JJD5Y=
 github.com/go-gormigrate/gormigrate/v2 v2.1.4/go.mod h1:y/6gPAH6QGAgP1UfHMiXcqGeJ88/GRQbfCReE1JJD5Y=
-github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE=
-github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA=
 github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY=
 github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY=
 github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw=
 github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -987,6 +942,8 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
 github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs=
 github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs=
 github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
 github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
+github.com/go-lark/lark v1.15.1 h1:fo6PQKBJht/71N9Zn3/xjknOYx0TmdVuP+VP8NrUCsI=
+github.com/go-lark/lark v1.15.1/go.mod h1:6ltbSztPZRT6IaO9ZIQyVaY5pVp/KeMizDYtfZkU+vM=
 github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
 github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
 github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
 github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
@@ -1016,8 +973,6 @@ github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAu
 github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
 github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
 github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
 github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI=
-github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
 github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
 github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
 github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
 github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
@@ -1266,8 +1221,6 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
 github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
 github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
 github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
 github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.142 h1:9iOJ8tfNLw8uSiR5yx7VcHEYSOajJq5hb9SXF0BCUdA=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.142/go.mod h1:Y/+YLCFCJtS29i2MbYPTUlNNfwXvkzEsZKR0imY/2aY=
 github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143 h1:V+82d6sqyEnG/XtIhC21zqVAMc1hiah3LQgTKZRfMtg=
 github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143 h1:V+82d6sqyEnG/XtIhC21zqVAMc1hiah3LQgTKZRfMtg=
 github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143/go.mod h1:Y/+YLCFCJtS29i2MbYPTUlNNfwXvkzEsZKR0imY/2aY=
 github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143/go.mod h1:Y/+YLCFCJtS29i2MbYPTUlNNfwXvkzEsZKR0imY/2aY=
 github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
 github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
@@ -1277,7 +1230,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:
 github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df h1:MZf03xP9WdakyXhOWuAD5uPK3wHh96wCsqe3hCMKh8E=
 github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df h1:MZf03xP9WdakyXhOWuAD5uPK3wHh96wCsqe3hCMKh8E=
 github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
 github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/infobloxopen/infoblox-go-client v1.1.1 h1:728A6LbLjptj/7kZjHyIxQnm768PWHfGFm0HH8FnbtU=
 github.com/infobloxopen/infoblox-go-client v1.1.1 h1:728A6LbLjptj/7kZjHyIxQnm768PWHfGFm0HH8FnbtU=
@@ -1356,11 +1308,14 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
 github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
 github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
 github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
 github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
 github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
+github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA=
+github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/jpillora/overseer v1.1.6 h1:3ygYfNcR3FfOr22miu3vR1iQcXKMHbmULBh98rbkIyo=
 github.com/jpillora/overseer v1.1.6 h1:3ygYfNcR3FfOr22miu3vR1iQcXKMHbmULBh98rbkIyo=
 github.com/jpillora/overseer v1.1.6/go.mod h1:aPXQtxuVb9PVWRWTXpo+LdnC/YXQ0IBLNXqKMJmgk88=
 github.com/jpillora/overseer v1.1.6/go.mod h1:aPXQtxuVb9PVWRWTXpo+LdnC/YXQ0IBLNXqKMJmgk88=
@@ -1383,9 +1338,8 @@ github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E
 github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg=
 github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg=
 github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
 github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
-github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
-github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
 github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
 github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
+github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -1429,8 +1383,6 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/linode/linodego v1.48.1 h1:Ojw1S+K5jJr1dggO8/H6r4FINxXnJbOU5GkbpaTfmhU=
-github.com/linode/linodego v1.48.1/go.mod h1:fc3t60If8X+yZTFAebhCnNDFrhwQhq9HDU92WnBousQ=
 github.com/linode/linodego v1.49.0 h1:MNd3qwvQzbXB5mCpvdCqlUIu1RPA9oC+50LyB9kK+GQ=
 github.com/linode/linodego v1.49.0 h1:MNd3qwvQzbXB5mCpvdCqlUIu1RPA9oC+50LyB9kK+GQ=
 github.com/linode/linodego v1.49.0/go.mod h1:B+HAM3//4w1wOS0BwdaQBKwBxlfe6kYJ7bSC6jJ/xtc=
 github.com/linode/linodego v1.49.0/go.mod h1:B+HAM3//4w1wOS0BwdaQBKwBxlfe6kYJ7bSC6jJ/xtc=
 github.com/liquidweb/go-lwApi v0.0.0-20190605172801-52a4864d2738/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
 github.com/liquidweb/go-lwApi v0.0.0-20190605172801-52a4864d2738/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
@@ -1474,8 +1426,6 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
 github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
 github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
 github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
 github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
-github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
-github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
 github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
 github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
 github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
@@ -1489,8 +1439,6 @@ github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKju
 github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
 github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
 github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
 github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
-github.com/miekg/dns v1.1.64 h1:wuZgD9wwCE6XMT05UU/mlSko71eRSXEAm2EbjQXLKnQ=
-github.com/miekg/dns v1.1.64/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck=
 github.com/miekg/dns v1.1.65 h1:0+tIPHzUW0GCge7IiK3guGP57VAw7hoPDfApjkMD1Fc=
 github.com/miekg/dns v1.1.65 h1:0+tIPHzUW0GCge7IiK3guGP57VAw7hoPDfApjkMD1Fc=
 github.com/miekg/dns v1.1.65/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck=
 github.com/miekg/dns v1.1.65/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck=
 github.com/mimuret/golang-iij-dpf v0.9.1 h1:Gj6EhHJkOhr+q2RnvRPJsPMcjuVnWPSccEHyoEehU34=
 github.com/mimuret/golang-iij-dpf v0.9.1 h1:Gj6EhHJkOhr+q2RnvRPJsPMcjuVnWPSccEHyoEehU34=
@@ -1594,10 +1542,6 @@ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYr
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
 github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
 github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
-github.com/oracle/oci-go-sdk/v65 v65.88.0 h1:SbsGKsoRRxJxVTbwUyIPCPwPsHWb8aPgEEpo6qfRJnI=
-github.com/oracle/oci-go-sdk/v65 v65.88.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0=
-github.com/oracle/oci-go-sdk/v65 v65.88.1 h1:Y9Y5jlQX8oVDe3UN+O4IcQnLN/aQmi4jR1/2RsXMN3M=
-github.com/oracle/oci-go-sdk/v65 v65.88.1/go.mod h1:u6XRPsw9tPziBh76K7GrrRXPa8P8W3BQeqJ6ZZt9VLA=
 github.com/oracle/oci-go-sdk/v65 v65.89.0 h1:Y2NRdvllV++3ebqc8v1bg7w9W1ktiMONKvW9k/bqk0M=
 github.com/oracle/oci-go-sdk/v65 v65.89.0 h1:Y2NRdvllV++3ebqc8v1bg7w9W1ktiMONKvW9k/bqk0M=
 github.com/oracle/oci-go-sdk/v65 v65.89.0/go.mod h1:u6XRPsw9tPziBh76K7GrrRXPa8P8W3BQeqJ6ZZt9VLA=
 github.com/oracle/oci-go-sdk/v65 v65.89.0/go.mod h1:u6XRPsw9tPziBh76K7GrrRXPa8P8W3BQeqJ6ZZt9VLA=
 github.com/ovh/go-ovh v1.7.0 h1:V14nF7FwDjQrZt9g7jzcvAAQ3HN6DNShRFRMC3jLoPw=
 github.com/ovh/go-ovh v1.7.0 h1:V14nF7FwDjQrZt9g7jzcvAAQ3HN6DNShRFRMC3jLoPw=
@@ -1609,8 +1553,6 @@ github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTK
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
 github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
 github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
 github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
-github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
-github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
 github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM=
 github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM=
@@ -1774,8 +1716,6 @@ github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
 github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
 github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
-github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
-github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
@@ -1818,15 +1758,9 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
 github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
 github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
 github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1134 h1:NDCzSm7r8OZeWQje1FJNHM73Ku4QRrCP1GymfgZYLSM=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1134/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1136/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1136/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1138 h1:eMVp9kzjBptP3K0xaUUS68dF5nNTFLbom3uQREaqftM=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1138/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1140 h1:F/vuesfLQmJhBZTHYOktz8IVWTs1nHwZYh74/H64uEs=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1140 h1:F/vuesfLQmJhBZTHYOktz8IVWTs1nHwZYh74/H64uEs=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1140/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1140/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1134 h1:Iel1hDW0eQt6p8YDRH2EbjiK5mqC4KEzabSKV0ZQ6FY=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1134/go.mod h1:8R/Xhu0hKGRFT30uwoN44bisb3cOoNjV8iwH65DjqUc=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1136 h1:kMIdSU5IvpOROh27ToVQ3hlm6ym3lCRs9tnGCOBoZqk=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1136 h1:kMIdSU5IvpOROh27ToVQ3hlm6ym3lCRs9tnGCOBoZqk=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1136/go.mod h1:FpyIz3mymKaExVs6Fz27kxDBS42jqZn7vbACtxdeEH4=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1136/go.mod h1:FpyIz3mymKaExVs6Fz27kxDBS42jqZn7vbACtxdeEH4=
 github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
 github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
@@ -1851,10 +1785,6 @@ 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/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
-github.com/uozi-tech/cosy v1.18.0 h1:L0o1yQ6hTRdzUjWwcT/cJX0AcNaDaaL30gF8pJHUEzM=
-github.com/uozi-tech/cosy v1.18.0/go.mod h1:8s8oQENTTGcmOGas/hkLvE+pZPyNG6AIblRbFgPRCwg=
-github.com/uozi-tech/cosy v1.19.0 h1:ZKfWfIicEIa4mP+4Fd6fF5oNr+pVOVkUssrIZuzIw44=
-github.com/uozi-tech/cosy v1.19.0/go.mod h1:WanqOcNiVoJGY6mPZScxua8yNLliJqcyPrsNTenz8dI=
 github.com/uozi-tech/cosy v1.19.1 h1:5CY2fd7UhM5TK4Fhu2qTLLFcMFRPRZuA3QUXGWTbXxk=
 github.com/uozi-tech/cosy v1.19.1 h1:5CY2fd7UhM5TK4Fhu2qTLLFcMFRPRZuA3QUXGWTbXxk=
 github.com/uozi-tech/cosy v1.19.1/go.mod h1:WanqOcNiVoJGY6mPZScxua8yNLliJqcyPrsNTenz8dI=
 github.com/uozi-tech/cosy v1.19.1/go.mod h1:WanqOcNiVoJGY6mPZScxua8yNLliJqcyPrsNTenz8dI=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2 h1:22S/XNIvuaKGqxQPsYPXN8TZ8hHjCQdcJKVQ83Vzxoo=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2 h1:22S/XNIvuaKGqxQPsYPXN8TZ8hHjCQdcJKVQ83Vzxoo=
@@ -1868,12 +1798,8 @@ github.com/urfave/cli/v3 v3.1.1 h1:bNnl8pFI5dxPOjeONvFCDFoECLQsceDG4ejahs4Jtxk=
 github.com/urfave/cli/v3 v3.1.1/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
 github.com/urfave/cli/v3 v3.1.1/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
 github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ=
 github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ=
 github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q=
 github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q=
-github.com/volcengine/volc-sdk-golang v1.0.201 h1:AnKtLpuEGCLuH9Yd2TvhG0SeTa+u4+MpLotIMZCdBgU=
-github.com/volcengine/volc-sdk-golang v1.0.201/go.mod h1:stZX+EPgv1vF4nZwOlEe8iGcriUPRBKX8zA19gXycOQ=
 github.com/volcengine/volc-sdk-golang v1.0.202 h1:8H4Rq7jWfrKdW9p3j+ZyvGvVe796AeVCpqEHb9zdBLo=
 github.com/volcengine/volc-sdk-golang v1.0.202 h1:8H4Rq7jWfrKdW9p3j+ZyvGvVe796AeVCpqEHb9zdBLo=
 github.com/volcengine/volc-sdk-golang v1.0.202/go.mod h1:stZX+EPgv1vF4nZwOlEe8iGcriUPRBKX8zA19gXycOQ=
 github.com/volcengine/volc-sdk-golang v1.0.202/go.mod h1:stZX+EPgv1vF4nZwOlEe8iGcriUPRBKX8zA19gXycOQ=
-github.com/vultr/govultr/v3 v3.18.0 h1:nTfxZW7/BRUDdZyEDSWzqrtyQgNolFPXBlwwJuM7EF8=
-github.com/vultr/govultr/v3 v3.18.0/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 github.com/vultr/govultr/v3 v3.19.1 h1:31rOP5Tz40AOc8h6Ws4ryzqAniUBffgRhy9uMG/EFvs=
 github.com/vultr/govultr/v3 v3.19.1 h1:31rOP5Tz40AOc8h6Ws4ryzqAniUBffgRhy9uMG/EFvs=
 github.com/vultr/govultr/v3 v3.19.1/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 github.com/vultr/govultr/v3 v3.19.1/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -1976,8 +1902,6 @@ go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
 go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw=
-golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
 golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U=
 golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U=
 golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
 golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -2017,8 +1941,6 @@ golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
 golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
 golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
 golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
-golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
-golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
 golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
 golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
 golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
 golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -2159,8 +2081,6 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
-golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
-golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
 golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
 golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
 golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -2192,8 +2112,6 @@ golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec
 golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
 golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
 golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
 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.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
-golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
-golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
 golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
 golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -2212,8 +2130,6 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
-golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
 golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
 golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2338,8 +2254,6 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
-golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
 golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
 golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -2358,9 +2272,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
 golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
-golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
-golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
 golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
 golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
+golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -2380,8 +2293,6 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
-golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
 golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
 golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
 golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2468,8 +2379,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
 golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
-golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
-golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
 golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
 golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
 golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
 golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -2690,22 +2599,10 @@ google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOl
 google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
-google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 h1:qEFnJI6AnfZk0NNe8YTyXQh5i//Zxi4gBHwRgp76qpw=
-google.golang.org/genproto v0.0.0-20250324211829-b45e905df463/go.mod h1:SqIx1NV9hcvqdLHo7uNZDS5lrUJybQ3evo3+z/WBfA0=
-google.golang.org/genproto v0.0.0-20250404141209-ee84b53bf3d0 h1:wX+y2uwLyC73sX9zfiJW7E7m68+oxAQGzgCmoM0e/zs=
-google.golang.org/genproto v0.0.0-20250404141209-ee84b53bf3d0/go.mod h1:jwIveCnYVWLDIe0ZXnIrfMKNoy/rQRSRrepUPEruz0U=
 google.golang.org/genproto v0.0.0-20250407143221-ac9807e6c755 h1:bldQzRMfyYSvYsP0oCgOIsBryyDN2Ci7HxB+rx3L7Qw=
 google.golang.org/genproto v0.0.0-20250407143221-ac9807e6c755 h1:bldQzRMfyYSvYsP0oCgOIsBryyDN2Ci7HxB+rx3L7Qw=
 google.golang.org/genproto v0.0.0-20250407143221-ac9807e6c755/go.mod h1:qD4k1RhYfNmRjqaHJxKLG/HRtqbXVclhjop2mPlxGwA=
 google.golang.org/genproto v0.0.0-20250407143221-ac9807e6c755/go.mod h1:qD4k1RhYfNmRjqaHJxKLG/HRtqbXVclhjop2mPlxGwA=
-google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
-google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
-google.golang.org/genproto/googleapis/api v0.0.0-20250404141209-ee84b53bf3d0 h1:Qbb5RVn5xzI4naMJSpJ7lhvmos6UwZkbekd5Uz7rt9E=
-google.golang.org/genproto/googleapis/api v0.0.0-20250404141209-ee84b53bf3d0/go.mod h1:6T35kB3IPpdw7Wul09by0G/JuOuIFkXV6OOvt8IZeT8=
 google.golang.org/genproto/googleapis/api v0.0.0-20250407143221-ac9807e6c755 h1:AMLTAunltONNuzWgVPZXrjLWtXpsG6A3yLLPEoJ/IjU=
 google.golang.org/genproto/googleapis/api v0.0.0-20250407143221-ac9807e6c755 h1:AMLTAunltONNuzWgVPZXrjLWtXpsG6A3yLLPEoJ/IjU=
 google.golang.org/genproto/googleapis/api v0.0.0-20250407143221-ac9807e6c755/go.mod h1:2R6XrVC8Oc08GlNh8ujEpc7HkLiEZ16QeY7FxIs20ac=
 google.golang.org/genproto/googleapis/api v0.0.0-20250407143221-ac9807e6c755/go.mod h1:2R6XrVC8Oc08GlNh8ujEpc7HkLiEZ16QeY7FxIs20ac=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250404141209-ee84b53bf3d0 h1:0K7wTWyzxZ7J+L47+LbFogJW1nn/gnnMCN0vGXNYtTI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250404141209-ee84b53bf3d0/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250407143221-ac9807e6c755 h1:TwXJCGVREgQ/cl18iY0Z4wJCTL/GmW+Um2oSwZiZPnc=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250407143221-ac9807e6c755 h1:TwXJCGVREgQ/cl18iY0Z4wJCTL/GmW+Um2oSwZiZPnc=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250407143221-ac9807e6c755/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250407143221-ac9807e6c755/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -2750,8 +2647,6 @@ google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v
 google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
 google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
 google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
-google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
-google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI=
 google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI=
 google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
@@ -2797,10 +2692,6 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/ns1/ns1-go.v2 v2.13.0 h1:I5NNqI9Bi1SGK92TVkOvLTwux5LNrix/99H2datVh48=
-gopkg.in/ns1/ns1-go.v2 v2.13.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
-gopkg.in/ns1/ns1-go.v2 v2.14.1 h1:wruE2g1uB90kMW+jHW8BtWa1HvNkqDfyf7SacTKWtBY=
-gopkg.in/ns1/ns1-go.v2 v2.14.1/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
 gopkg.in/ns1/ns1-go.v2 v2.14.2 h1:wz/toj9U20wBrmYxW4vTz7sZWED+JJVRjUBBJ7CKrzI=
 gopkg.in/ns1/ns1-go.v2 v2.14.2 h1:wz/toj9U20wBrmYxW4vTz7sZWED+JJVRjUBBJ7CKrzI=
 gopkg.in/ns1/ns1-go.v2 v2.14.2/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
 gopkg.in/ns1/ns1-go.v2 v2.14.2/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=

+ 67 - 0
internal/cert/check_expired.go

@@ -0,0 +1,67 @@
+package cert
+
+import (
+	"time"
+
+	"github.com/0xJacky/Nginx-UI/internal/notification"
+	"github.com/0xJacky/Nginx-UI/query"
+	"github.com/uozi-tech/cosy/logger"
+)
+
+func CertExpiredNotify() {
+	c := query.Cert
+
+	certs, err := c.Find()
+	if err != nil {
+		logger.Errorf("CertExpiredNotify: Err: %v\n", err)
+		return
+	}
+
+	for _, certModel := range certs {
+		if certModel.SSLCertificatePath == "" {
+			continue
+		}
+
+		certInfo, err := GetCertInfo(certModel.SSLCertificatePath)
+		if err != nil {
+			continue
+		}
+
+		now := time.Now()
+
+		// Calculate days until expiration
+		daysUntilExpiration := int(certInfo.NotAfter.Sub(now).Hours() / 24)
+
+		// ignore expired certificate
+		if daysUntilExpiration < -1 {
+			continue
+		}
+
+		mask := map[string]any{
+			"name": certModel.Name,
+			"days": daysUntilExpiration,
+		}
+
+		// Check if certificate is already expired
+		if now.After(certInfo.NotAfter) {
+			notification.Error("Certificate Expired", "Certificate %{name} has expired", mask)
+			continue
+		}
+
+		// Send notifications based on remaining days
+		switch {
+		case daysUntilExpiration <= 14:
+			notification.Info("Certificate Expiration Notice",
+				"Certificate %{name} will expire in %{days} days", mask)
+		case daysUntilExpiration <= 7:
+			notification.Warning("Certificate Expiring Soon",
+				"Certificate %{name} will expire in %{days} days", mask)
+		case daysUntilExpiration <= 3:
+			notification.Warning("Certificate Expiring Soon",
+				"Certificate %{name} will expire in %{days} days", mask)
+		case daysUntilExpiration <= 1:
+			notification.Error("Certificate Expiring Soon",
+				"Certificate %{name} will expire in 1 day", mask)
+		}
+	}
+}

+ 35 - 0
internal/cron/auto_cert.go

@@ -0,0 +1,35 @@
+package cron
+
+import (
+	"time"
+
+	"github.com/0xJacky/Nginx-UI/internal/cert"
+	"github.com/go-co-op/gocron/v2"
+	"github.com/uozi-tech/cosy/logger"
+)
+
+// setupAutoCertJob initializes the automatic certificate renewal job
+func setupAutoCertJob(scheduler gocron.Scheduler) (gocron.Job, error) {
+	job, err := scheduler.NewJob(gocron.DurationJob(30*time.Minute),
+		gocron.NewTask(cert.AutoCert),
+		gocron.WithSingletonMode(gocron.LimitModeWait),
+		gocron.JobOption(gocron.WithStartImmediately()))
+	if err != nil {
+		logger.Errorf("AutoCert Job: Err: %v\n", err)
+		return nil, err
+	}
+	return job, nil
+}
+
+// setupCertExpiredJob initializes the certificate expiration check job
+func setupCertExpiredJob(scheduler gocron.Scheduler) (gocron.Job, error) {
+	job, err := scheduler.NewJob(gocron.DurationJob(6*time.Hour),
+		gocron.NewTask(cert.CertExpiredNotify),
+		gocron.WithSingletonMode(gocron.LimitModeWait),
+		gocron.JobOption(gocron.WithStartImmediately()))
+	if err != nil {
+		logger.Errorf("CertExpired Job: Err: %v\n", err)
+		return nil, err
+	}
+	return job, nil
+}

+ 29 - 0
internal/cron/clear_token.go

@@ -0,0 +1,29 @@
+package cron
+
+import (
+	"time"
+
+	"github.com/0xJacky/Nginx-UI/query"
+	"github.com/go-co-op/gocron/v2"
+	"github.com/uozi-tech/cosy/logger"
+)
+
+// setupAuthTokenCleanupJob initializes the job to clean expired auth tokens
+func setupAuthTokenCleanupJob(scheduler gocron.Scheduler) (gocron.Job, error) {
+	job, err := scheduler.NewJob(
+		gocron.DurationJob(5*time.Minute),
+		gocron.NewTask(func() {
+			logger.Debug("clean expired auth tokens")
+			q := query.AuthToken
+			_, _ = q.Where(q.ExpiredAt.Lt(time.Now().Unix())).Delete()
+		}),
+		gocron.WithSingletonMode(gocron.LimitModeWait),
+		gocron.JobOption(gocron.WithStartImmediately()))
+
+	if err != nil {
+		logger.Errorf("CleanExpiredAuthToken Err: %v\n", err)
+		return nil, err
+	}
+
+	return job, nil
+}

+ 19 - 48
internal/cron/cron.go

@@ -1,16 +1,11 @@
 package cron
 package cron
 
 
 import (
 import (
-	"time"
-
-	"github.com/0xJacky/Nginx-UI/internal/cert"
-	"github.com/0xJacky/Nginx-UI/internal/logrotate"
-	"github.com/0xJacky/Nginx-UI/query"
-	"github.com/0xJacky/Nginx-UI/settings"
 	"github.com/go-co-op/gocron/v2"
 	"github.com/go-co-op/gocron/v2"
 	"github.com/uozi-tech/cosy/logger"
 	"github.com/uozi-tech/cosy/logger"
 )
 )
 
 
+// Global scheduler instance
 var s gocron.Scheduler
 var s gocron.Scheduler
 
 
 func init() {
 func init() {
@@ -21,58 +16,34 @@ func init() {
 	}
 	}
 }
 }
 
 
-var logrotateJob gocron.Job
-
+// InitCronJobs initializes and starts all cron jobs
 func InitCronJobs() {
 func InitCronJobs() {
-	_, err := s.NewJob(gocron.DurationJob(30*time.Minute),
-		gocron.NewTask(cert.AutoCert),
-		gocron.WithSingletonMode(gocron.LimitModeWait),
-		gocron.JobOption(gocron.WithStartImmediately()))
+	// Initialize auto cert job
+	_, err := setupAutoCertJob(s)
 	if err != nil {
 	if err != nil {
 		logger.Fatalf("AutoCert Err: %v\n", err)
 		logger.Fatalf("AutoCert Err: %v\n", err)
 	}
 	}
 
 
-	startLogrotate()
-	cleanExpiredAuthToken()
-
-	s.Start()
-}
-
-func RestartLogrotate() {
-	logger.Debug("Restart Logrotate")
-	if logrotateJob != nil {
-		err := s.RemoveJob(logrotateJob.ID())
-		if err != nil {
-			logger.Error(err)
-			return
-		}
-	}
-
-	startLogrotate()
-}
-
-func startLogrotate() {
-	if !settings.LogrotateSettings.Enabled {
-		return
-	}
-	var err error
-	logrotateJob, err = s.NewJob(
-		gocron.DurationJob(time.Duration(settings.LogrotateSettings.Interval)*time.Minute),
-		gocron.NewTask(logrotate.Exec),
-		gocron.WithSingletonMode(gocron.LimitModeWait))
+	// Initialize certificate expiration check job
+	_, err = setupCertExpiredJob(s)
 	if err != nil {
 	if err != nil {
-		logger.Fatalf("LogRotate Job: Err: %v\n", err)
+		logger.Fatalf("CertExpired Err: %v\n", err)
 	}
 	}
-}
 
 
-func cleanExpiredAuthToken() {
-	_, err := s.NewJob(gocron.DurationJob(5*time.Minute), gocron.NewTask(func() {
-		logger.Debug("clean expired auth tokens")
-		q := query.AuthToken
-		_, _ = q.Where(q.ExpiredAt.Lt(time.Now().Unix())).Delete()
-	}), gocron.WithSingletonMode(gocron.LimitModeWait), gocron.JobOption(gocron.WithStartImmediately()))
+	// Start logrotate job
+	setupLogrotateJob(s)
 
 
+	// Initialize auth token cleanup job
+	_, err = setupAuthTokenCleanupJob(s)
 	if err != nil {
 	if err != nil {
 		logger.Fatalf("CleanExpiredAuthToken Err: %v\n", err)
 		logger.Fatalf("CleanExpiredAuthToken Err: %v\n", err)
 	}
 	}
+
+	// Start the scheduler
+	s.Start()
+}
+
+// RestartLogrotate is a public API to restart the logrotate job
+func RestartLogrotate() {
+	restartLogrotateJob(s)
 }
 }

+ 42 - 0
internal/cron/logrotate.go

@@ -0,0 +1,42 @@
+package cron
+
+import (
+	"time"
+
+	"github.com/0xJacky/Nginx-UI/internal/logrotate"
+	"github.com/0xJacky/Nginx-UI/settings"
+	"github.com/go-co-op/gocron/v2"
+	"github.com/uozi-tech/cosy/logger"
+)
+
+// logrotate job instance
+var logrotateJobInstance gocron.Job
+
+// setupLogrotateJob initializes and starts the logrotate job
+func setupLogrotateJob(scheduler gocron.Scheduler) {
+	if !settings.LogrotateSettings.Enabled {
+		return
+	}
+	var err error
+	logrotateJobInstance, err = scheduler.NewJob(
+		gocron.DurationJob(time.Duration(settings.LogrotateSettings.Interval)*time.Minute),
+		gocron.NewTask(logrotate.Exec),
+		gocron.WithSingletonMode(gocron.LimitModeWait))
+	if err != nil {
+		logger.Fatalf("LogRotate Job: Err: %v\n", err)
+	}
+}
+
+// restartLogrotateJob stops and restarts the logrotate job
+func restartLogrotateJob(scheduler gocron.Scheduler) {
+	logger.Debug("Restart Logrotate")
+	if logrotateJobInstance != nil {
+		err := scheduler.RemoveJob(logrotateJobInstance.ID())
+		if err != nil {
+			logger.Error(err)
+			return
+		}
+	}
+
+	setupLogrotateJob(scheduler)
+}

+ 11 - 1
model/cert.go

@@ -1,13 +1,14 @@
 package model
 package model
 
 
 import (
 import (
+	"os"
+
 	"github.com/0xJacky/Nginx-UI/internal/helper"
 	"github.com/0xJacky/Nginx-UI/internal/helper"
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/go-acme/lego/v4/certcrypto"
 	"github.com/go-acme/lego/v4/certcrypto"
 	"github.com/go-acme/lego/v4/certificate"
 	"github.com/go-acme/lego/v4/certificate"
 	"github.com/lib/pq"
 	"github.com/lib/pq"
 	"gorm.io/gorm/clause"
 	"gorm.io/gorm/clause"
-	"os"
 )
 )
 
 
 const (
 const (
@@ -128,3 +129,12 @@ func (c *CertificateResource) GetResource() certificate.Resource {
 		CSR:               c.CSR,
 		CSR:               c.CSR,
 	}
 	}
 }
 }
+
+// GetCertList returns all certificates
+func GetCertList() (c []*Cert) {
+	if db == nil {
+		return
+	}
+	db.Find(&c)
+	return
+}