瀏覽代碼

feat: add certificate expiration notifications #387

Jacky 3 周之前
父節點
當前提交
1512e1de85

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

@@ -4,12 +4,6 @@
 
 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
   '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
+  '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': {
     title: () => $gettext('Sync Certificate Error'),
     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'),
     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

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

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

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

@@ -30,11 +30,6 @@ msgstr "Zugriffslog"
 msgid "Access Logs"
 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/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
@@ -121,7 +116,7 @@ msgstr ""
 msgid "All"
 msgstr "Alle"
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -392,11 +387,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API-Token"
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "Build mit"
@@ -446,11 +436,43 @@ msgstr "Zertifikat"
 msgid "Cert path is not under the nginx conf dir"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -517,10 +539,6 @@ msgstr "Zertifikat ist gültig"
 msgid "Channel"
 msgstr "Kanal"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "Erneut prüfen"
@@ -807,32 +825,32 @@ msgstr "Löschen"
 msgid "Delete Permanently"
 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
 msgid "Delete Remote Site Error"
 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
 msgid "Delete Remote Site Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
@@ -841,12 +859,12 @@ msgstr "Speichern erfolgreich"
 msgid "Delete site: %{site_name}"
 msgstr "Seite löschen: %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
@@ -885,10 +903,6 @@ msgstr "Details"
 msgid "Development Mode"
 msgstr "Entwicklungsmodus"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgstr ""
@@ -927,62 +941,62 @@ msgstr "Deaktiviert"
 msgid "Disable auto-renewal failed for %{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
 msgid "Disable Remote Site Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 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
 msgid "Disable Remote Site Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Speichern erfolgreich"
@@ -1177,62 +1191,62 @@ msgstr "Aktivieren fehlgeschlagen"
 msgid "Enable HTTPS"
 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
 msgid "Enable Remote Site Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Aktivieren von %{conf_name} in %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Erfolgreich gespeichert"
@@ -1961,6 +1975,15 @@ msgstr "Schlüsseltyp"
 msgid "Language"
 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
 msgid "Last checked at"
 msgstr "Zuletzt überprüft am"
@@ -2705,7 +2728,7 @@ msgstr ""
 "Anmeldeinformationen hinzu und wähle dann eine der unten aufgeführten "
 "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
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -3002,62 +3025,64 @@ msgstr "Speichern erfolgreich"
 msgid "Rename"
 msgstr "Benuztername"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 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
 msgid "Rename Remote Config Error"
 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
 msgid "Rename Remote Config Success"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Speichern erfolgreich"
@@ -3224,44 +3249,44 @@ msgstr "Anweisung speichern"
 msgid "Save error %{msg}"
 msgstr "Fehler beim Speichern %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #, fuzzy
 msgid "Save Remote Site Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #, fuzzy
 msgid "Save Remote Site Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Ausführen von %{conf_name} auf %{node_name} fehlgeschlagen"
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Speichern erfolgreich"
@@ -3291,10 +3316,6 @@ msgstr ""
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "Schlüssel wurde kopiert"
@@ -3335,11 +3356,6 @@ msgstr "Serverinformationen"
 msgid "Server Info"
 msgstr "Serverinformationen"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-#, fuzzy
-msgid "Server URL"
-msgstr "Serverinformationen"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgstr "server_name wurde in den Anweisungen nicht gefunden"
@@ -3597,42 +3613,42 @@ msgstr "Synchronisieren"
 msgid "Sync Certificate"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 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
 msgid "Sync Certificate Error"
 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
 msgid "Sync Certificate Success"
 msgstr "Zertifikat ist gültig"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Speichern erfolgreich"
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 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
 msgid "Sync Config Error"
 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
 msgid "Sync Config Success"
 msgstr "Zertifikat ist gültig"
@@ -4254,6 +4270,18 @@ msgstr ""
 msgid "Your passkeys"
 msgstr "Deine Passkeys"
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Zugriffslog"
+
+#, fuzzy
+#~ msgid "Bot Token"
+#~ msgstr "API-Token"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Serverinformationen"
+
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ 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"
 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/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
@@ -120,7 +115,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -388,10 +383,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr ""
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "Build with"
@@ -439,11 +430,43 @@ msgstr ""
 msgid "Cert path is not under the nginx conf dir"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -510,10 +533,6 @@ msgstr "Certificate is valid"
 msgid "Channel"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr ""
@@ -797,32 +816,32 @@ msgstr ""
 msgid "Delete Permanently"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 msgid "Delete Remote Site Error"
 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
 msgid "Delete Remote Site Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Saved successfully"
@@ -831,12 +850,12 @@ msgstr "Saved successfully"
 msgid "Delete site: %{site_name}"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Saved successfully"
@@ -875,10 +894,6 @@ msgstr ""
 msgid "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
 msgid "DingTalk"
 msgstr ""
@@ -917,62 +932,62 @@ msgstr "Disabled"
 msgid "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
 msgid "Disable Remote Site Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 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
 msgid "Disable Remote Site Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Saved successfully"
@@ -1162,62 +1177,62 @@ msgstr "Enable failed"
 msgid "Enable HTTPS"
 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
 msgid "Enable Remote Site Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Saved successfully"
@@ -1945,6 +1960,14 @@ msgstr ""
 msgid "Language"
 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
 #, fuzzy
 msgid "Last checked at"
@@ -2666,7 +2689,7 @@ msgid ""
 "select one of the credentialsbelow to request the API of the DNS provider."
 msgstr ""
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2954,62 +2977,64 @@ msgstr "Saved successfully"
 msgid "Rename"
 msgstr "Username"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} 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
 msgid "Rename Remote Config Error"
 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
 msgid "Rename Remote Config Success"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Saved successfully"
@@ -3175,44 +3200,44 @@ msgstr "Save Directive"
 msgid "Save error %{msg}"
 msgstr "Save error %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #, fuzzy
 msgid "Save Remote Site Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #, fuzzy
 msgid "Save Remote Site Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Saved successfully"
@@ -3241,10 +3266,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3286,11 +3307,6 @@ msgstr "Server Info"
 msgid "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
 msgid "server_name not found in directives"
 msgstr "server_name not found in directives"
@@ -3550,42 +3566,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} 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
 msgid "Sync Certificate Error"
 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
 msgid "Sync Certificate Success"
 msgstr "Certificate is valid"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Saved successfully"
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} 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
 msgid "Sync Config Error"
 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
 msgid "Sync Config Success"
 msgstr "Certificate is valid"
@@ -4170,6 +4186,14 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Sites List"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Server Info"
+
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ 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"
 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/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
@@ -123,7 +118,7 @@ msgstr ""
 msgid "All"
 msgstr "Todo"
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -381,11 +376,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "Token"
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "Desarrollado con"
@@ -435,11 +425,43 @@ msgstr "Certificado"
 msgid "Cert path is not under the nginx conf dir"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -499,10 +521,6 @@ msgstr "Ruta cambiada"
 msgid "Channel"
 msgstr "Canal"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "Intentar nuevamente"
@@ -783,30 +801,30 @@ msgstr "Eliminar"
 msgid "Delete Permanently"
 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"
 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"
 msgstr "Borrado del sitio remoto correcto"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgstr "Error al eliminar sitio remoto"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgstr "Borrado del sitio remoto correcto"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 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}"
 msgstr "Eliminar sitio: %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
@@ -858,10 +876,6 @@ msgstr "Detalles"
 msgid "Development Mode"
 msgstr "Modo de desarrollo"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgstr ""
@@ -899,60 +913,60 @@ msgstr "Desactivar"
 msgid "Disable auto-renewal failed for %{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"
 msgstr "Error al deshabilitar el sitio remoto"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Error al deshabilitar el sitio remoto"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 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"
 msgstr "Deshabilitado de sitio remoto exitoso"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgstr "Error al deshabilitar el sitio remoto"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgstr "Deshabilitado de sitio remoto exitoso"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
@@ -1135,62 +1149,62 @@ msgstr "Falló la habilitación"
 msgid "Enable HTTPS"
 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
 msgid "Enable Remote Site Error"
 msgstr "Error al renombrar la configuración remota"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Error al renombrar la configuración remota"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Falló el habilitado de %{conf_name} en %{node_name}"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
@@ -1907,6 +1921,15 @@ msgstr "Tipo llave"
 msgid "Language"
 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
 msgid "Last checked at"
 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 "
 "del proveedor de DNS."
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2920,59 +2943,61 @@ msgstr "Eliminado con éxito"
 msgid "Rename"
 msgstr "Renombrar"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 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"
 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"
 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"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 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
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 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
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 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
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Renombrar %{orig_path} a %{new_path} en %{env_name} con éxito"
@@ -3133,44 +3158,44 @@ msgstr "Guardar Directiva"
 msgid "Save error %{msg}"
 msgstr "Error al guardar %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #, fuzzy
 msgid "Save Remote Site Error"
 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
 #, fuzzy
 msgid "Save Remote Site Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgstr "Error al renombrar la configuración remota"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgstr "Renombrar Configuración Remota Exitosa"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Falló el desplegado de %{conf_name} a %{node_name}"
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Duplicado con éxito de %{conf_name} a %{node_name}"
@@ -3200,10 +3225,6 @@ msgstr ""
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "El secreto ha sido copiado"
@@ -3244,11 +3265,6 @@ msgstr "Información del servidor"
 msgid "Server Info"
 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
 msgid "server_name not found in directives"
 msgstr "No se encuentra server_name en las directivas"
@@ -3499,38 +3515,38 @@ msgstr "Sincronizar"
 msgid "Sync Certificate"
 msgstr "Sincronizar Certificado"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 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"
 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"
 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"
 msgstr "Sincronización del Certificado exitosa"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Sincronizar configuración %{config_name} con %{env_name} exitosamente"
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 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"
 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"
 msgstr "Configuración de sincronización exitosa"
 
@@ -4155,6 +4171,18 @@ msgstr ""
 msgid "Your passkeys"
 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?"
 #~ 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"
 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/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
@@ -125,7 +120,7 @@ msgstr ""
 msgid "All"
 msgstr "Tous"
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr "Tous les codes de récupération ont été utilisés"
@@ -395,11 +390,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "Jeton d'API"
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "Build avec"
@@ -449,11 +439,43 @@ msgstr "Auto Cert"
 msgid "Cert path is not under the nginx conf dir"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -519,10 +541,6 @@ msgstr "Changer de certificat"
 msgid "Channel"
 msgstr "Canal"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "Revérifier"
@@ -812,32 +830,32 @@ msgstr "Supprimer"
 msgid "Delete Permanently"
 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
 msgid "Delete Remote Site Error"
 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
 msgid "Delete Remote Site Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 #, fuzzy
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -846,12 +864,12 @@ msgstr "Dupliqué avec succès"
 msgid "Delete site: %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 #, fuzzy
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -891,10 +909,6 @@ msgstr "Détails"
 msgid "Development Mode"
 msgstr "Mode développement"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgstr ""
@@ -934,62 +948,62 @@ msgstr "Désactivé"
 msgid "Disable auto-renewal failed for %{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
 msgid "Disable Remote Site Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 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
 msgid "Disable Remote Site Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -1183,62 +1197,62 @@ msgstr "Échec de l'activation"
 msgid "Enable HTTPS"
 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
 msgid "Enable Remote Site Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -1979,6 +1993,15 @@ msgstr "Type"
 msgid "Language"
 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
 msgid "Last checked at"
 msgstr "Dernière vérification le"
@@ -2703,7 +2726,7 @@ msgstr ""
 "des informations d'identification ci-dessous pour demander l'API du "
 "fournisseur DNS."
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2997,62 +3020,64 @@ msgstr "Enregistré avec succès"
 msgid "Rename"
 msgstr "Nom d'utilisateur"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 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
 msgid "Rename Remote Config Error"
 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
 msgid "Rename Remote Config Success"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -3219,44 +3244,44 @@ msgstr "Enregistrer la directive"
 msgid "Save error %{msg}"
 msgstr "Enregistrer l'erreur %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #, fuzzy
 msgid "Save Remote Site Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 #, fuzzy
 msgid "Save Remote Site Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 #, fuzzy
 msgid "Save site %{name} to %{node} successfully"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 #, fuzzy
 msgid "Save stream %{name} to %{node} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 #, fuzzy
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Dupliqué avec succès"
@@ -3284,10 +3309,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3328,11 +3349,6 @@ msgstr "Informations sur le serveur"
 msgid "Server Info"
 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
 msgid "server_name not found in directives"
 msgstr "server_name introuvable dans les directives"
@@ -3592,42 +3608,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:32
+#: src/components/Notification/notifications.ts:52
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 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
 msgid "Sync Certificate Error"
 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
 msgid "Sync Certificate Success"
 msgstr "Changer de certificat"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 msgstr "Dupliqué avec succès"
 
-#: src/components/Notification/notifications.ts:42
+#: src/components/Notification/notifications.ts:62
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} successfully"
 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
 msgid "Sync Config Error"
 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
 msgid "Sync Config Success"
 msgstr "Changer de certificat"
@@ -4218,6 +4234,18 @@ msgstr ""
 msgid "Your passkeys"
 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?"
 #~ msgstr "Voulez-vous désactiver ce site ?"
 

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

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

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

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

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

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

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

@@ -33,11 +33,6 @@ msgstr "Erişim Günlükleri"
 msgid "Access Logs"
 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/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
@@ -118,7 +113,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -374,11 +369,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-#, fuzzy
-msgid "Bot Token"
-msgstr "API Token"
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "İle Oluşturuldu"
@@ -428,11 +418,43 @@ msgstr ""
 msgid "Cert path is not under the nginx conf dir"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -492,10 +514,6 @@ msgstr "Değişen Dosya Yolu"
 msgid "Channel"
 msgstr "Kanal"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "Tekrar kontrol et"
@@ -775,33 +793,33 @@ msgstr "Sil"
 msgid "Delete Permanently"
 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
 msgid "Delete Remote Site Error"
 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
 msgid "Delete Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 #, fuzzy
 msgid "Delete Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 #, fuzzy
 msgid "Delete Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 #, fuzzy
 msgid "Delete site %{name} from %{node} failed"
 msgstr ""
 "%{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
 msgid "Delete site %{name} from %{node} successfully"
 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}"
 msgstr "Siteyi sil: %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 msgstr ""
 "%{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
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "%{conf_name} başarıyla %{node_name} düğümüne kopyalandı"
@@ -854,10 +872,6 @@ msgstr "Detaylar"
 msgid "Development Mode"
 msgstr "Geliştirme modu"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr ""
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgstr ""
@@ -895,72 +909,72 @@ msgstr "Devre Dışı"
 msgid "Disable auto-renewal failed for %{name}"
 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
 msgid "Disable Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 #, fuzzy
 msgid "Disable Remote Site Maintenance Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 #, fuzzy
 msgid "Disable Remote Site Maintenance Success"
 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
 msgid "Disable Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 #, fuzzy
 msgid "Disable Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 #, fuzzy
 msgid "Disable Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 #, fuzzy
 msgid "Disable site %{name} from %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 #, fuzzy
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr ""
@@ -1145,72 +1159,72 @@ msgstr "Etkinleştirme başarısız"
 msgid "Enable HTTPS"
 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
 msgid "Enable Remote Site Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 #, fuzzy
 msgid "Enable Remote Site Maintenance Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 #, fuzzy
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 #, fuzzy
 msgid "Enable Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 #, fuzzy
 msgid "Enable Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 #, fuzzy
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 #, fuzzy
 msgid "Enable site %{name} on %{node} successfully"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarısız "
 "oldu"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 #, fuzzy
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
@@ -1928,6 +1942,15 @@ msgstr "Anahtar Türü"
 msgid "Language"
 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
 msgid "Last checked at"
 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 "
 "kimlik bilgilerinden birini seçin."
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -3041,67 +3064,69 @@ msgstr "Başarıyla kaldırıldı"
 msgid "Rename"
 msgstr "Yeniden Adlandır"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 msgstr ""
 "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
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} successfully"
 msgstr ""
 "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
 msgid "Rename Remote Config Error"
 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
 msgid "Rename Remote Config Success"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 #, fuzzy
 msgid "Rename Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 #, fuzzy
 msgid "Rename Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 #, fuzzy
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 msgstr ""
 "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
 msgid "Rename site %{name} to %{new_name} on %{node} successfully"
 msgstr ""
 "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
 msgid "Rename stream %{name} to %{new_name} on %{node} failed"
 msgstr ""
 "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
 msgid "Rename stream %{name} to %{new_name} on %{node} successfully"
 msgstr ""
@@ -3280,45 +3305,45 @@ msgstr "Direktifi Kaydet"
 msgid "Save error %{msg}"
 msgstr "Hatayı kaydet %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 #, fuzzy
 msgid "Save Remote Site Error"
 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
 #, fuzzy
 msgid "Save Remote Site Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 #, fuzzy
 msgid "Save Remote Stream Error"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandır Hatası"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 #, fuzzy
 msgid "Save Remote Stream Success"
 msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 #, fuzzy
 msgid "Save site %{name} to %{node} failed"
 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
 msgid "Save site %{name} to %{node} successfully"
 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
 msgid "Save stream %{name} to %{node} failed"
 msgstr ""
 "%{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
 msgid "Save stream %{name} to %{node} successfully"
 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"
 msgstr "SDK"
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 #, fuzzy
 msgid "Secret has been copied"
@@ -3398,11 +3419,6 @@ msgstr "Sunucu Bilgisi"
 msgid "Server Info"
 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
 #, fuzzy
 msgid "server_name not found in directives"
@@ -3678,42 +3694,42 @@ msgstr "Eşitle"
 msgid "Sync Certificate"
 msgstr "Senkronizasyon Sertifikası"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 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
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 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
 msgid "Sync Certificate Error"
 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
 msgid "Sync Certificate Success"
 msgstr "Senkronizasyon Sertifikası Başarısı"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 #, fuzzy
 msgid "Sync config %{config_name} to %{env_name} failed"
 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
 msgid "Sync config %{config_name} to %{env_name} successfully"
 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
 msgid "Sync Config Error"
 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
 msgid "Sync Config Success"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
@@ -4390,6 +4406,18 @@ msgstr ""
 msgid "Your passkeys"
 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?"
 #~ 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"
 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/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
@@ -119,7 +114,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr ""
@@ -389,10 +384,6 @@ msgstr ""
 msgid "Block is nil"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr ""
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 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"
 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
 #, fuzzy
 msgid "Certificate decode error"
 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
 #, fuzzy
 msgid "Certificate parse error"
@@ -513,10 +536,6 @@ msgstr "Thay đổi chứng chỉ"
 msgid "Channel"
 msgstr "Kênh"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr ""
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "Kiểm tra lại"
@@ -800,32 +819,32 @@ msgstr "Xoá"
 msgid "Delete Permanently"
 msgstr ""
 
-#: src/components/Notification/notifications.ts:55 src/language/constants.ts:50
+#: src/components/Notification/notifications.ts:75 src/language/constants.ts:50
 #, fuzzy
 msgid "Delete Remote Site Error"
 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
 msgid "Delete Remote Site Success"
 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
 msgid "Delete Remote Stream Error"
 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
 msgid "Delete Remote Stream Success"
 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
 msgid "Delete site %{name} from %{node} failed"
 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
 msgid "Delete site %{name} from %{node} successfully"
 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}"
 msgstr "Xoá trang web: %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 #, fuzzy
 msgid "Delete stream %{name} from %{node} failed"
 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
 msgid "Delete stream %{name} from %{node} successfully"
 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"
 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
 msgid "DingTalk"
 msgstr ""
@@ -921,62 +936,62 @@ msgstr "Tắt"
 msgid "Disable auto-renewal failed for %{name}"
 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
 msgid "Disable Remote Site Error"
 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
 msgid "Disable Remote Site Maintenance Error"
 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
 msgid "Disable Remote Site Maintenance Success"
 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
 msgid "Disable Remote Site Success"
 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
 msgid "Disable Remote Stream Error"
 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
 msgid "Disable Remote Stream Success"
 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
 msgid "Disable site %{name} from %{node} failed"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 #, fuzzy
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 #, fuzzy
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 #, fuzzy
 msgid "Disable stream %{name} from %{node} failed"
 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
 msgid "Disable stream %{name} from %{node} successfully"
 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"
 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
 msgid "Enable Remote Site Error"
 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
 msgid "Enable Remote Site Maintenance Error"
 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
 msgid "Enable Remote Site Maintenance Success"
 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
 msgid "Enable Remote Site Success"
 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
 msgid "Enable Remote Stream Error"
 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
 msgid "Enable Remote Stream Success"
 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
 msgid "Enable site %{name} maintenance on %{node} failed"
 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
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 #, fuzzy
 msgid "Enable site %{name} on %{node} failed"
 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
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 #, fuzzy
 msgid "Enable stream %{name} on %{node} failed"
 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
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
@@ -1941,6 +1956,15 @@ msgstr "Loại"
 msgid "Language"
 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
 msgid "Last checked at"
 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 "
 "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
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2952,62 +2976,64 @@ msgstr "Xoá thành công"
 msgid "Rename"
 msgstr "Username"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 #, fuzzy
 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"
 
-#: src/components/Notification/notifications.ts:50
+#: src/components/Notification/notifications.ts:70
 #, fuzzy
 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"
 
-#: src/components/Notification/notifications.ts:45 src/language/constants.ts:42
+#: src/components/Notification/notifications.ts:65 src/language/constants.ts:42
 #, fuzzy
 msgid "Rename Remote Config Error"
 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
 msgid "Rename Remote Config Success"
 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
 msgid "Rename Remote Site Error"
 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
 msgid "Rename Remote Site Success"
 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
 msgid "Rename Remote Stream Error"
 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
 msgid "Rename Remote Stream Success"
 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
 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"
 
-#: src/components/Notification/notifications.ts:100
+#: src/components/Notification/notifications.ts:120
 #, fuzzy
 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"
 
-#: src/components/Notification/notifications.ts:138
+#: src/components/Notification/notifications.ts:158
 #, fuzzy
 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"
 
-#: src/components/Notification/notifications.ts:142
+#: src/components/Notification/notifications.ts:162
 #, fuzzy
 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"
@@ -3175,44 +3201,44 @@ msgstr "Lưu Directive"
 msgid "Save error %{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
 #, fuzzy
 msgid "Save Remote Site Error"
 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
 #, fuzzy
 msgid "Save Remote Site Success"
 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
 msgid "Save Remote Stream Error"
 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
 msgid "Save Remote Stream Success"
 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
 msgid "Save site %{name} to %{node} failed"
 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
 msgid "Save site %{name} to %{node} successfully"
 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
 msgid "Save stream %{name} to %{node} failed"
 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
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
@@ -3241,10 +3267,6 @@ msgstr ""
 msgid "SDK"
 msgstr ""
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr ""
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr ""
@@ -3284,11 +3306,6 @@ msgstr "Thông tin máy chủ"
 msgid "Server Info"
 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
 msgid "server_name not found in directives"
 msgstr "không tìm thấy server_name trong directives"
@@ -3541,42 +3558,42 @@ msgstr ""
 msgid "Sync Certificate"
 msgstr "Gia hạn chứng chỉ SSL"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 #, fuzzy
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 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
 msgid "Sync Certificate %{cert_name} to %{env_name} successfully"
 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
 msgid "Sync Certificate Error"
 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
 msgid "Sync Certificate Success"
 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
 msgid "Sync config %{config_name} to %{env_name} failed"
 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
 msgid "Sync config %{config_name} to %{env_name} successfully"
 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
 msgid "Sync Config Error"
 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
 msgid "Sync Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
@@ -4163,6 +4180,14 @@ msgstr ""
 msgid "Your passkeys"
 msgstr ""
 
+#, fuzzy
+#~ msgid "Access Token"
+#~ msgstr "Log truy cập"
+
+#, fuzzy
+#~ msgid "Server URL"
+#~ msgstr "Thông tin máy chủ"
+
 #, fuzzy
 #~ msgid "Do you want to disable this site?"
 #~ 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 ""
 "Project-Id-Version: \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"
 "Language-Team: Chinese (Simplified Han script) <https://weblate.nginxui.com/"
 "projects/nginx-ui/frontend/zh_Hans/>\n"
@@ -35,10 +35,6 @@ msgstr "访问日志"
 msgid "Access Logs"
 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/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
@@ -118,7 +114,7 @@ msgstr "然后,刷新此页面并再次点击添加 Passkey。"
 msgid "All"
 msgstr "全部"
 
-#: src/components/Notification/notifications.ts:155
+#: src/components/Notification/notifications.ts:175
 #: src/language/constants.ts:58
 msgid "All Recovery Codes Have Been Used"
 msgstr "所有恢复码都已被使用"
@@ -362,10 +358,6 @@ msgstr "以下是您选定的需要批量修改的项目"
 msgid "Block is nil"
 msgstr "区块为空"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:9
-msgid "Bot Token"
-msgstr "机器人令牌"
-
 #: src/views/system/About.vue:55
 msgid "Build with"
 msgstr "构建基于"
@@ -413,10 +405,38 @@ msgstr "证书"
 msgid "Cert path is not under the nginx conf dir"
 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
 msgid "Certificate decode error"
 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
 msgid "Certificate parse error"
 msgstr "证书解析错误"
@@ -471,10 +491,6 @@ msgstr "变更后的路径"
 msgid "Channel"
 msgstr "通道"
 
-#: src/views/preference/components/ExternalNotify/telegram.ts:13
-msgid "Chat ID"
-msgstr "聊天 ID"
-
 #: src/views/system/Upgrade.vue:185
 msgid "Check again"
 msgstr "重新检查"
@@ -749,27 +765,27 @@ msgstr "删除"
 msgid "Delete Permanently"
 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"
 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"
 msgstr "删除远程站点成功"
 
-#: src/components/Notification/notifications.ts:113
+#: src/components/Notification/notifications.ts:133
 msgid "Delete Remote Stream Error"
 msgstr "删除远程 Stream 错误"
 
-#: src/components/Notification/notifications.ts:117
+#: src/components/Notification/notifications.ts:137
 msgid "Delete Remote Stream Success"
 msgstr "删除远程 Stream 成功"
 
-#: src/components/Notification/notifications.ts:56
+#: src/components/Notification/notifications.ts:76
 msgid "Delete site %{name} from %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 
-#: src/components/Notification/notifications.ts:60
+#: src/components/Notification/notifications.ts:80
 msgid "Delete site %{name} from %{node} successfully"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 
@@ -777,11 +793,11 @@ msgstr "成功从 %{node} 中删除站点 %{name}"
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
-#: src/components/Notification/notifications.ts:114
+#: src/components/Notification/notifications.ts:134
 msgid "Delete stream %{name} from %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 
-#: src/components/Notification/notifications.ts:118
+#: src/components/Notification/notifications.ts:138
 msgid "Delete stream %{name} from %{node} successfully"
 msgstr "成功从 %{node} 中删除站点 %{name}"
 
@@ -818,10 +834,6 @@ msgstr "详情"
 msgid "Development Mode"
 msgstr "开发模式"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:9
-msgid "Device Key"
-msgstr "设备密钥"
-
 #: src/views/preference/components/ExternalNotify/dingtalk.ts:5
 msgid "DingTalk"
 msgstr "钉钉"
@@ -858,51 +870,51 @@ msgstr "禁用"
 msgid "Disable auto-renewal failed for %{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"
 msgstr "禁用远程站点错误"
 
-#: src/components/Notification/notifications.ts:87
+#: src/components/Notification/notifications.ts:107
 msgid "Disable Remote Site Maintenance Error"
 msgstr "禁用远程站点维护错误"
 
-#: src/components/Notification/notifications.ts:91
+#: src/components/Notification/notifications.ts:111
 msgid "Disable Remote Site Maintenance Success"
 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"
 msgstr "禁用远程站点成功"
 
-#: src/components/Notification/notifications.ts:121
+#: src/components/Notification/notifications.ts:141
 msgid "Disable Remote Stream Error"
 msgstr "禁用远程 Stream 错误"
 
-#: src/components/Notification/notifications.ts:125
+#: src/components/Notification/notifications.ts:145
 msgid "Disable Remote Stream Success"
 msgstr "禁用远程 Stream成功"
 
-#: src/components/Notification/notifications.ts:64
+#: src/components/Notification/notifications.ts:84
 msgid "Disable site %{name} from %{node} failed"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
-#: src/components/Notification/notifications.ts:68
+#: src/components/Notification/notifications.ts:88
 msgid "Disable site %{name} from %{node} successfully"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
-#: src/components/Notification/notifications.ts:88
+#: src/components/Notification/notifications.ts:108
 msgid "Disable site %{name} maintenance on %{node} failed"
 msgstr "停用站点 %{name} 维护 %{node} 失败"
 
-#: src/components/Notification/notifications.ts:92
+#: src/components/Notification/notifications.ts:112
 msgid "Disable site %{name} maintenance on %{node} successfully"
 msgstr "成功停用站点 %{name} 上 %{node} 的维护功能"
 
-#: src/components/Notification/notifications.ts:122
+#: src/components/Notification/notifications.ts:142
 msgid "Disable stream %{name} from %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
-#: src/components/Notification/notifications.ts:126
+#: src/components/Notification/notifications.ts:146
 msgid "Disable stream %{name} from %{node} successfully"
 msgstr "在 %{node} 上禁用 %{name} 成功"
 
@@ -1075,51 +1087,51 @@ msgstr "启用失败"
 msgid "Enable 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"
 msgstr "启用远程站点错误"
 
-#: src/components/Notification/notifications.ts:79
+#: src/components/Notification/notifications.ts:99
 msgid "Enable Remote Site Maintenance Error"
 msgstr "在 %{node} 上启用 %{site} 失败"
 
-#: src/components/Notification/notifications.ts:83
+#: src/components/Notification/notifications.ts:103
 msgid "Enable Remote Site Maintenance Success"
 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"
 msgstr "启用远程站点成功"
 
-#: src/components/Notification/notifications.ts:129
+#: src/components/Notification/notifications.ts:149
 msgid "Enable Remote Stream Error"
 msgstr "启用远程 Steam 错误"
 
-#: src/components/Notification/notifications.ts:133
+#: src/components/Notification/notifications.ts:153
 msgid "Enable Remote Stream Success"
 msgstr "启用远程 Stream 成功"
 
-#: src/components/Notification/notifications.ts:80
+#: src/components/Notification/notifications.ts:100
 msgid "Enable site %{name} maintenance on %{node} failed"
 msgstr "在 %{node} 中为 %{name} 启用维护模式失败"
 
-#: src/components/Notification/notifications.ts:84
+#: src/components/Notification/notifications.ts:104
 msgid "Enable site %{name} maintenance on %{node} successfully"
 msgstr "在 %{node} 上成功启用站点 %{name} 维护模式"
 
-#: src/components/Notification/notifications.ts:72
+#: src/components/Notification/notifications.ts:92
 msgid "Enable site %{name} on %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
-#: src/components/Notification/notifications.ts:76
+#: src/components/Notification/notifications.ts:96
 msgid "Enable site %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
-#: src/components/Notification/notifications.ts:130
+#: src/components/Notification/notifications.ts:150
 msgid "Enable stream %{name} on %{node} failed"
 msgstr "在 %{node} 中启用 %{name} 失败"
 
-#: src/components/Notification/notifications.ts:134
+#: src/components/Notification/notifications.ts:154
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
@@ -1782,6 +1794,14 @@ msgstr "密钥类型"
 msgid "Language"
 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
 msgid "Last checked at"
 msgstr "最后检查时间"
@@ -2462,7 +2482,7 @@ msgstr ""
 "请首先在 “证书”> “DNS 凭证” 中添加凭证,然后在下方选择一个凭证,请求 DNS 提供"
 "商的 API。"
 
-#: src/components/Notification/notifications.ts:156
+#: src/components/Notification/notifications.ts:176
 #: src/language/constants.ts:59
 msgid ""
 "Please generate new recovery codes in the preferences immediately to prevent "
@@ -2732,51 +2752,53 @@ msgstr "删除成功"
 msgid "Rename"
 msgstr "重命名"
 
-#: src/components/Notification/notifications.ts:46
+#: src/components/Notification/notifications.ts:66
 msgid "Rename %{orig_path} to %{new_path} on %{env_name} failed"
 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"
 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"
 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"
 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"
 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"
 msgstr "重命名远程站点成功"
 
-#: src/components/Notification/notifications.ts:137
+#: src/components/Notification/notifications.ts:157
 msgid "Rename Remote Stream Error"
 msgstr "重命名远程 Stream 错误"
 
-#: src/components/Notification/notifications.ts:141
+#: src/components/Notification/notifications.ts:161
 msgid "Rename Remote Stream Success"
 msgstr "重命名远程 Stream成功"
 
-#: src/components/Notification/notifications.ts:96
+#: src/components/Notification/notifications.ts:116
 msgid "Rename site %{name} to %{new_name} on %{node} failed"
 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"
 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"
 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"
 msgstr "在 %{node} 上将站点 %{name} 重命名为 %{new_name} 成功"
 
@@ -2926,37 +2948,37 @@ msgstr "保存指令"
 msgid "Save error %{msg}"
 msgstr "保存错误 %{msg}"
 
-#: src/components/Notification/notifications.ts:103
+#: src/components/Notification/notifications.ts:123
 #: src/language/constants.ts:48
 msgid "Save Remote Site Error"
 msgstr "保存远程站点错误"
 
-#: src/components/Notification/notifications.ts:107
+#: src/components/Notification/notifications.ts:127
 #: src/language/constants.ts:47
 msgid "Save Remote Site Success"
 msgstr "保存远程站点成功"
 
-#: src/components/Notification/notifications.ts:145
+#: src/components/Notification/notifications.ts:165
 msgid "Save Remote Stream Error"
 msgstr "保存远程 Stream 错误"
 
-#: src/components/Notification/notifications.ts:149
+#: src/components/Notification/notifications.ts:169
 msgid "Save Remote Stream Success"
 msgstr "保存远程 Stream 成功"
 
-#: src/components/Notification/notifications.ts:104
+#: src/components/Notification/notifications.ts:124
 msgid "Save site %{name} to %{node} failed"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
-#: src/components/Notification/notifications.ts:108
+#: src/components/Notification/notifications.ts:128
 msgid "Save site %{name} to %{node} successfully"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
-#: src/components/Notification/notifications.ts:146
+#: src/components/Notification/notifications.ts:166
 msgid "Save stream %{name} to %{node} failed"
 msgstr "部署 %{name} 到 %{node} 失败"
 
-#: src/components/Notification/notifications.ts:150
+#: src/components/Notification/notifications.ts:170
 msgid "Save stream %{name} to %{node} successfully"
 msgstr "成功将站点 %{name} 保存到 %{node} 中"
 
@@ -2983,10 +3005,6 @@ msgstr "用手机扫描二维码,将账户添加到应用程序中。"
 msgid "SDK"
 msgstr "SDK"
 
-#: src/views/preference/components/ExternalNotify/dingtalk.ts:13
-msgid "Secret (Optional)"
-msgstr "秘密(可选)"
-
 #: src/views/preference/components/TOTP.vue:109
 msgid "Secret has been copied"
 msgstr "密钥已复制"
@@ -3025,10 +3043,6 @@ msgstr "服务器"
 msgid "Server Info"
 msgstr "服务器信息"
 
-#: src/views/preference/components/ExternalNotify/bark.ts:13
-msgid "Server URL"
-msgstr "服务器 URL"
-
 #: src/views/site/cert/components/ObtainCert.vue:107
 msgid "server_name not found in directives"
 msgstr "未在指令集合中找到 server_name"
@@ -3268,35 +3282,35 @@ msgstr "同步"
 msgid "Sync Certificate"
 msgstr "同步证书"
 
-#: src/components/Notification/notifications.ts:28
+#: src/components/Notification/notifications.ts:48
 msgid "Sync Certificate %{cert_name} to %{env_name} failed"
 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"
 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"
 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"
 msgstr "同步证书成功"
 
-#: src/components/Notification/notifications.ts:38
+#: src/components/Notification/notifications.ts:58
 msgid "Sync config %{config_name} to %{env_name} failed"
 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"
 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"
 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"
 msgstr "同步配置成功"
 
@@ -3872,6 +3886,24 @@ msgstr "您的旧代码将不再有效。"
 msgid "Your 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?"
 #~ msgstr "你想停用这个网站吗?"
 

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

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

+ 1 - 2
go.mod

@@ -119,6 +119,7 @@ require (
 	github.com/gin-contrib/sse v1.1.0 // indirect
 	github.com/go-errors/errors v1.5.1 // 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/stdr v1.2.2 // 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/huaweicloud/huaweicloud-sdk-go-v3 v0.1.143 // 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/itchyny/timefmt-go v0.1.6 // indirect
 	github.com/jackc/pgio v1.0.0 // indirect
@@ -225,7 +225,6 @@ require (
 	github.com/sony/sonyflake v1.2.0 // indirect
 	github.com/sourcegraph/conc v0.3.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/viper v1.20.1 // 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.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
 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.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
 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.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.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.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
 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=
 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=
-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/go.mod h1:qq7YtcX4V35EBfOypsYLuLO7hCBExAH9q7xOxTqv2lQ=
 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/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/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/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/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/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/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
 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-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 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/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 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.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/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/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/go.mod h1:xQ5SusDmHb/fy55wU0QqTy0yNfLqxzec59YcsRZB+rI=
 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/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/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/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/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/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/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/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
 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.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 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/v2 v2.1.1/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/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.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 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.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.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/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/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
 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/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/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
 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.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
 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/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 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/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 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/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/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/go.mod h1:8JSEXwZHcQ0uCrLPcsvnAJ4g+ODxeupP8Zetl9fd8wM=
 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-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-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/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw=
 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/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 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-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
 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/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.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/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
 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.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
 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/go.mod h1:Y/+YLCFCJtS29i2MbYPTUlNNfwXvkzEsZKR0imY/2aY=
 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/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
 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/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=
@@ -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/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
 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/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 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/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/overseer v1.1.6 h1:3ygYfNcR3FfOr22miu3vR1iQcXKMHbmULBh98rbkIyo=
 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/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
 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/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
 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/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.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 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/go.mod h1:B+HAM3//4w1wOS0BwdaQBKwBxlfe6kYJ7bSC6jJ/xtc=
 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.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.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/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 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.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.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/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck=
 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/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
 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/go.mod h1:u6XRPsw9tPziBh76K7GrrRXPa8P8W3BQeqJ6ZZt9VLA=
 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.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.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/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 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/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.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.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 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/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
 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.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/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/go.mod h1:FpyIz3mymKaExVs6Fz27kxDBS42jqZn7vbACtxdeEH4=
 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/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/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/go.mod h1:WanqOcNiVoJGY6mPZScxua8yNLliJqcyPrsNTenz8dI=
 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/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/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/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/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 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.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 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/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
 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.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
 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/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
 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.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 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/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
 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.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
 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/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 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-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.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/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 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.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.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/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 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.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 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/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
 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.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.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.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/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
 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.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 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/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
 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-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-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/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/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/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 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.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 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/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
 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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
 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/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
 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
 
 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/uozi-tech/cosy/logger"
 )
 
+// Global scheduler instance
 var s gocron.Scheduler
 
 func init() {
@@ -21,58 +16,34 @@ func init() {
 	}
 }
 
-var logrotateJob gocron.Job
-
+// InitCronJobs initializes and starts all cron jobs
 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 {
 		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 {
-		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 {
 		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
 
 import (
+	"os"
+
 	"github.com/0xJacky/Nginx-UI/internal/helper"
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/go-acme/lego/v4/certcrypto"
 	"github.com/go-acme/lego/v4/certificate"
 	"github.com/lib/pq"
 	"gorm.io/gorm/clause"
-	"os"
 )
 
 const (
@@ -128,3 +129,12 @@ func (c *CertificateResource) GetResource() certificate.Resource {
 		CSR:               c.CSR,
 	}
 }
+
+// GetCertList returns all certificates
+func GetCertList() (c []*Cert) {
+	if db == nil {
+		return
+	}
+	db.Find(&c)
+	return
+}