feat(sub): per-client external links and remote subscriptions

Add a Links tab to the client form for attaching third-party share
links and remote subscription URLs per client. They are merged into
the client's raw/JSON/Clash subscription output: links are emitted
verbatim and parsed for JSON/Clash; subscription URLs are fetched
(cached, with a short timeout) and their configs merged in.

i18n keys added across all 13 locales.
This commit is contained in:
MHSanaei
2026-06-14 20:57:14 +02:00
parent 7c2598fae9
commit dcb923b4a1
33 changed files with 1204 additions and 28 deletions
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "أساسي",
"tabCredentials": "بيانات الاعتماد",
"tabLinks": "الروابط",
"linksHint": "أضف روابط مشاركة من جهات خارجية وعناوين اشتراك خارجية لتضمينها في اشتراك هذا العميل.",
"addExternalLink": "إضافة رابط خارجي",
"addExternalSubscription": "إضافة اشتراك خارجي",
"noExternalLinks": "لا توجد روابط خارجية بعد.",
"noExternalSubscriptions": "لا توجد اشتراكات خارجية بعد.",
"add": "إضافة عميل",
"edit": "تعديل العميل",
"submitAdd": "إضافة عميل",
+7 -1
View File
@@ -648,6 +648,12 @@
"clients": {
"tabBasics": "Basics",
"tabCredentials": "Credentials",
"tabLinks": "Links",
"linksHint": "Add third-party share links and remote subscription URLs to include in this client's subscription.",
"addExternalLink": "Add External Link",
"addExternalSubscription": "Add External Subscription",
"noExternalLinks": "No external links yet.",
"noExternalSubscriptions": "No external subscriptions yet.",
"add": "Add Client",
"edit": "Edit Client",
"submitAdd": "Add Client",
@@ -1765,4 +1771,4 @@
"chooseInbound": "Choose an Inbound"
}
}
}
}
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Básico",
"tabCredentials": "Credenciales",
"tabLinks": "Enlaces",
"linksHint": "Añade enlaces de terceros y URLs de suscripción remotas para incluirlos en la suscripción de este cliente.",
"addExternalLink": "Añadir enlace externo",
"addExternalSubscription": "Añadir suscripción externa",
"noExternalLinks": "Aún no hay enlaces externos.",
"noExternalSubscriptions": "Aún no hay suscripciones externas.",
"add": "Añadir cliente",
"edit": "Editar cliente",
"submitAdd": "Añadir cliente",
+7 -1
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "پایه",
"tabCredentials": "اطلاعات اتصال",
"tabLinks": "لینک‌ها",
"linksHint": "لینک‌های اشتراک شخص‌ثالث و آدرس سابسکریپشن‌های خارجی را اضافه کنید تا در سابسکریپشن این کاربر قرار گیرند.",
"addExternalLink": "افزودن لینک خارجی",
"addExternalSubscription": "افزودن سابسکریپشن خارجی",
"noExternalLinks": "هنوز لینک خارجی‌ای اضافه نشده.",
"noExternalSubscriptions": "هنوز سابسکریپشن خارجی‌ای اضافه نشده.",
"add": "افزودن کلاینت",
"edit": "ویرایش کلاینت",
"submitAdd": "افزودن کلاینت",
@@ -1764,4 +1770,4 @@
"chooseInbound": "یک ورودی انتخاب کنید"
}
}
}
}
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Dasar",
"tabCredentials": "Kredensial",
"tabLinks": "Tautan",
"linksHint": "Tambahkan tautan berbagi pihak ketiga dan URL langganan jarak jauh untuk disertakan dalam langganan klien ini.",
"addExternalLink": "Tambah Tautan Eksternal",
"addExternalSubscription": "Tambah Langganan Eksternal",
"noExternalLinks": "Belum ada tautan eksternal.",
"noExternalSubscriptions": "Belum ada langganan eksternal.",
"add": "Tambah klien",
"edit": "Ubah klien",
"submitAdd": "Tambah klien",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "基本",
"tabCredentials": "認証情報",
"tabLinks": "リンク",
"linksHint": "サードパーティの共有リンクやリモートのサブスクリプションURLを追加して、このクライアントのサブスクリプションに含めます。",
"addExternalLink": "外部リンクを追加",
"addExternalSubscription": "外部サブスクリプションを追加",
"noExternalLinks": "外部リンクはまだありません。",
"noExternalSubscriptions": "外部サブスクリプションはまだありません。",
"add": "クライアントを追加",
"edit": "クライアントを編集",
"submitAdd": "クライアントを追加",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Básico",
"tabCredentials": "Credenciais",
"tabLinks": "Links",
"linksHint": "Adicione links de terceiros e URLs de assinatura remotas para incluir na assinatura deste cliente.",
"addExternalLink": "Adicionar link externo",
"addExternalSubscription": "Adicionar assinatura externa",
"noExternalLinks": "Ainda não há links externos.",
"noExternalSubscriptions": "Ainda não há assinaturas externas.",
"add": "Adicionar cliente",
"edit": "Editar cliente",
"submitAdd": "Adicionar cliente",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Основные",
"tabCredentials": "Учетные данные",
"tabLinks": "Ссылки",
"linksHint": "Добавьте сторонние ссылки и URL удалённых подписок, чтобы включить их в подписку этого клиента.",
"addExternalLink": "Добавить внешнюю ссылку",
"addExternalSubscription": "Добавить внешнюю подписку",
"noExternalLinks": "Пока нет внешних ссылок.",
"noExternalSubscriptions": "Пока нет внешних подписок.",
"add": "Добавить клиента",
"edit": "Изменить клиента",
"submitAdd": "Добавить клиента",
+6
View File
@@ -648,6 +648,12 @@
"clients": {
"tabBasics": "Temel",
"tabCredentials": "Kimlik Bilgileri",
"tabLinks": "Bağlantılar",
"linksHint": "Bu istemcinin aboneliğine dahil etmek için üçüncü taraf paylaşım bağlantıları ve uzak abonelik URL'leri ekleyin.",
"addExternalLink": "Harici Bağlantı Ekle",
"addExternalSubscription": "Harici Abonelik Ekle",
"noExternalLinks": "Henüz harici bağlantı yok.",
"noExternalSubscriptions": "Henüz harici abonelik yok.",
"add": "Kullanıcı Ekle",
"edit": "Kullanıcıyı Düzenle",
"submitAdd": "Kullanıcı Ekle",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Основні",
"tabCredentials": "Облікові дані",
"tabLinks": "Посилання",
"linksHint": "Додайте сторонні посилання та URL віддалених підписок, щоб включити їх до підписки цього клієнта.",
"addExternalLink": "Додати зовнішнє посилання",
"addExternalSubscription": "Додати зовнішню підписку",
"noExternalLinks": "Зовнішніх посилань ще немає.",
"noExternalSubscriptions": "Зовнішніх підписок ще немає.",
"add": "Додати клієнта",
"edit": "Редагувати клієнта",
"submitAdd": "Додати клієнта",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "Cơ bản",
"tabCredentials": "Thông tin xác thực",
"tabLinks": "Liên kết",
"linksHint": "Thêm liên kết chia sẻ của bên thứ ba và URL đăng ký từ xa để đưa vào đăng ký của khách hàng này.",
"addExternalLink": "Thêm liên kết ngoài",
"addExternalSubscription": "Thêm đăng ký ngoài",
"noExternalLinks": "Chưa có liên kết ngoài.",
"noExternalSubscriptions": "Chưa có đăng ký ngoài.",
"add": "Thêm khách hàng",
"edit": "Chỉnh sửa khách hàng",
"submitAdd": "Thêm khách hàng",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "基本",
"tabCredentials": "凭据",
"tabLinks": "链接",
"linksHint": "添加第三方分享链接和远程订阅地址,将其包含在该客户端的订阅中。",
"addExternalLink": "添加外部链接",
"addExternalSubscription": "添加外部订阅",
"noExternalLinks": "暂无外部链接。",
"noExternalSubscriptions": "暂无外部订阅。",
"add": "添加客户端",
"edit": "编辑客户端",
"submitAdd": "添加客户端",
+6
View File
@@ -647,6 +647,12 @@
"clients": {
"tabBasics": "基本",
"tabCredentials": "認證資訊",
"tabLinks": "連結",
"linksHint": "新增第三方分享連結和遠端訂閱網址,將其包含在此用戶端的訂閱中。",
"addExternalLink": "新增外部連結",
"addExternalSubscription": "新增外部訂閱",
"noExternalLinks": "尚無外部連結。",
"noExternalSubscriptions": "尚無外部訂閱。",
"add": "新增客戶端",
"edit": "編輯客戶端",
"submitAdd": "新增客戶端",