feat: add customizable search relays setting

Replace hardcoded SEARCHABLE_RELAY_URLS with user-configurable search
relays stored in localStorage. Add SearchRelaysSetting UI in System
settings page with add/remove/reset functionality.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
codytseng 2026-03-12 23:19:47 +08:00
parent 7be7b30d52
commit aae8fc2f17
27 changed files with 202 additions and 50 deletions

View file

@ -163,7 +163,7 @@ export default {
'Send only to r': 'إرسال فقط إلى {{r}}',
'Send only to these relays': 'إرسال فقط إلى هذه الريلايات',
Explore: 'استكشاف',
'Search relays': 'البحث في الريلايات',
'Search relays': 'ريلايات البحث',
relayInfoBadgeAuth: 'مصادقة',
relayInfoBadgeSearch: 'بحث',
relayInfoBadgePayment: 'دفع',
@ -670,6 +670,7 @@ export default {
'Hide indirect': 'إخفاء غير المباشرة',
'Copy note content': 'نسخ محتوى الملاحظة',
'Video loop': 'تكرار الفيديو',
'Automatically replay videos when they end': 'إعادة تشغيل مقاطع الفيديو تلقائيًا عند انتهائها'
'Automatically replay videos when they end': 'إعادة تشغيل مقاطع الفيديو تلقائيًا عند انتهائها',
'Relays used for searching notes (NIP-50)': 'الريلايات المستخدمة للبحث عن الملاحظات (NIP-50)'
}
}

View file

@ -167,7 +167,7 @@ export default {
'Send only to r': 'Nur an {{r}} senden',
'Send only to these relays': 'Nur an diese Relays senden',
Explore: 'Entdecken',
'Search relays': 'Relays suchen',
'Search relays': 'Such-Relays',
relayInfoBadgeAuth: 'Auth',
relayInfoBadgeSearch: 'Suche',
relayInfoBadgePayment: 'Zahlung',
@ -694,6 +694,7 @@ export default {
'Hide indirect': 'Indirekte ausblenden',
'Copy note content': 'Notizinhalt kopieren',
'Video loop': 'Video-Schleife',
'Automatically replay videos when they end': 'Videos automatisch wiederholen, wenn sie enden'
'Automatically replay videos when they end': 'Videos automatisch wiederholen, wenn sie enden',
'Relays used for searching notes (NIP-50)': 'Relays für die Notizsuche (NIP-50)'
}
}

View file

@ -676,6 +676,7 @@ export default {
'Hide indirect': 'Hide indirect',
'Copy note content': 'Copy note content',
'Video loop': 'Video loop',
'Automatically replay videos when they end': 'Automatically replay videos when they end'
'Automatically replay videos when they end': 'Automatically replay videos when they end',
'Relays used for searching notes (NIP-50)': 'Relays used for searching notes (NIP-50)'
}
}

View file

@ -167,7 +167,7 @@ export default {
'Send only to r': 'Enviar únicamente a {{r}}',
'Send only to these relays': 'Enviar únicamente a estos relés',
Explore: 'Explorar',
'Search relays': 'Buscar relés',
'Search relays': 'Relés de búsqueda',
relayInfoBadgeAuth: 'Autenticación',
relayInfoBadgeSearch: 'Búsqueda',
relayInfoBadgePayment: 'Pago',
@ -687,6 +687,7 @@ export default {
'Hide indirect': 'Ocultar indirectas',
'Copy note content': 'Copiar contenido de la nota',
'Video loop': 'Repetir video',
'Automatically replay videos when they end': 'Reproducir automáticamente los videos cuando terminen'
'Automatically replay videos when they end': 'Reproducir automáticamente los videos cuando terminen',
'Relays used for searching notes (NIP-50)': 'Relés utilizados para buscar notas (NIP-50)'
}
}

View file

@ -165,7 +165,7 @@ export default {
'Send only to r': 'فقط به {{r}} ارسال شود',
'Send only to these relays': 'فقط به این رله‌ها ارسال شود',
Explore: 'کاوش',
'Search relays': 'جستجو رله‌ها',
'Search relays': 'رله‌های جستجو',
relayInfoBadgeAuth: 'احراز هویت',
relayInfoBadgeSearch: 'جستجو',
relayInfoBadgePayment: 'پرداخت',
@ -682,6 +682,7 @@ export default {
'Hide indirect': 'پنهان کردن غیرمستقیم',
'Copy note content': 'کپی محتوای یادداشت',
'Video loop': 'تکرار ویدیو',
'Automatically replay videos when they end': 'پخش خودکار ویدیوها پس از پایان'
'Automatically replay videos when they end': 'پخش خودکار ویدیوها پس از پایان',
'Relays used for searching notes (NIP-50)': 'رله‌هایی که برای جستجوی یادداشت‌ها استفاده می‌شوند (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': 'Envoyer uniquement à {{r}}',
'Send only to these relays': 'Envoyer uniquement à ces relais',
Explore: 'Explorer',
'Search relays': 'Rechercher des relais',
'Search relays': 'Relais de recherche',
relayInfoBadgeAuth: 'Auth',
relayInfoBadgeSearch: 'Recherche',
relayInfoBadgePayment: 'Paiement',
@ -691,6 +691,7 @@ export default {
'Hide indirect': 'Masquer indirects',
'Copy note content': 'Copier le contenu de la note',
'Video loop': 'Boucle vidéo',
'Automatically replay videos when they end': 'Rejouer automatiquement les vidéos à la fin'
'Automatically replay videos when they end': 'Rejouer automatiquement les vidéos à la fin',
'Relays used for searching notes (NIP-50)': 'Relais utilisés pour rechercher des notes (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': 'केवल {{r}} को भेजें',
'Send only to these relays': 'केवल इन रिले को भेजें',
Explore: 'एक्सप्लोर करें',
'Search relays': 'रिले खोजें',
'Search relays': 'खोज रिले',
relayInfoBadgeAuth: 'प्रमाणीकरण',
relayInfoBadgeSearch: 'खोज',
relayInfoBadgePayment: 'भुगतान',
@ -682,6 +682,7 @@ export default {
'Hide indirect': 'अप्रत्यक्ष छुपाएं',
'Copy note content': 'नोट सामग्री कॉपी करें',
'Video loop': 'वीडियो लूप',
'Automatically replay videos when they end': 'वीडियो समाप्त होने पर स्वचालित रूप से दोबारा चलाएं'
'Automatically replay videos when they end': 'वीडियो समाप्त होने पर स्वचालित रूप से दोबारा चलाएं',
'Relays used for searching notes (NIP-50)': 'नोट्स खोजने के लिए उपयोग किए जाने वाले रिले (NIP-50)'
}
}

View file

@ -165,7 +165,7 @@ export default {
'Send only to r': 'Küldés csak a {{r}} csomópontra',
'Send only to these relays': 'Küldés csak ezekre a csomópontokra',
Explore: 'Felderítés',
'Search relays': 'Csomópontok kereséshez',
'Search relays': 'Keresési csomópontok',
relayInfoBadgeAuth: 'Auth',
relayInfoBadgeSearch: 'Keresés',
relayInfoBadgePayment: 'Fizetés',
@ -676,6 +676,7 @@ export default {
'Hide indirect': 'Közvetettek elrejtése',
'Copy note content': 'Jegyzet tartalmának másolása',
'Video loop': 'Videó ismétlése',
'Automatically replay videos when they end': 'Videók automatikus újrajátszása, amikor véget érnek'
'Automatically replay videos when they end': 'Videók automatikus újrajátszása, amikor véget érnek',
'Relays used for searching notes (NIP-50)': 'Jegyzetek kereséséhez használt csomópontok (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': 'Invia solo a {{r}}',
'Send only to these relays': 'Invia solo a questi relay',
Explore: 'Esplora',
'Search relays': 'Ricerca relay',
'Search relays': 'Relay di ricerca',
relayInfoBadgeAuth: 'Autorizzazione',
relayInfoBadgeSearch: 'Ricerca',
relayInfoBadgePayment: 'Pagamento',
@ -687,6 +687,7 @@ export default {
'Hide indirect': 'Nascondi indirette',
'Copy note content': 'Copia contenuto della nota',
'Video loop': 'Ripetizione video',
'Automatically replay videos when they end': 'Riprodurre automaticamente i video quando terminano'
'Automatically replay videos when they end': 'Riprodurre automaticamente i video quando terminano',
'Relays used for searching notes (NIP-50)': 'Relay utilizzati per cercare le note (NIP-50)'
}
}

View file

@ -165,7 +165,7 @@ export default {
'Send only to r': '{{r}} にのみ送信',
'Send only to these relays': 'これらのリレイにのみ送信',
Explore: '探索',
'Search relays': 'リレイを検索',
'Search relays': '検索リレー',
relayInfoBadgeAuth: '認証',
relayInfoBadgeSearch: '検索',
relayInfoBadgePayment: '支払い',
@ -682,6 +682,7 @@ export default {
'Hide indirect': '間接通知を非表示',
'Copy note content': 'ノート内容をコピー',
'Video loop': 'ビデオループ',
'Automatically replay videos when they end': 'ビデオ終了時に自動的にリプレイする'
'Automatically replay videos when they end': 'ビデオ終了時に自動的にリプレイする',
'Relays used for searching notes (NIP-50)': 'ノート検索に使用するリレー (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': '{{r}}에만 전송',
'Send only to these relays': '이 릴레이에만 전송',
Explore: '탐색',
'Search relays': '릴레이 검색',
'Search relays': '검색 릴레이',
relayInfoBadgeAuth: '로그인 필요',
relayInfoBadgeSearch: '검색 지원',
relayInfoBadgePayment: '유료',
@ -676,6 +676,7 @@ export default {
'Hide indirect': '간접 숨기기',
'Copy note content': '노트 내용 복사',
'Video loop': '비디오 반복',
'Automatically replay videos when they end': '비디오가 끝나면 자동으로 다시 재생'
'Automatically replay videos when they end': '비디오가 끝나면 자동으로 다시 재생',
'Relays used for searching notes (NIP-50)': '노트 검색에 사용되는 릴레이 (NIP-50)'
}
}

View file

@ -163,7 +163,7 @@ export default {
'Send only to r': 'Wyślij tylko do {{r}}',
'Send only to these relays': 'Wyślij tylko do tych transmiterów',
Explore: 'Transmitery',
'Search relays': 'Wyszukaj transmiter',
'Search relays': 'Przekaźniki wyszukiwania',
relayInfoBadgeAuth: '✔️',
relayInfoBadgeSearch: 'Wyszukiwarka',
relayInfoBadgePayment: 'Płatności',
@ -688,6 +688,7 @@ export default {
'Hide indirect': 'Ukryj pośrednie',
'Copy note content': 'Kopiuj treść notatki',
'Video loop': 'Zapętlanie wideo',
'Automatically replay videos when they end': 'Automatycznie powtarzaj filmy po zakończeniu'
'Automatically replay videos when they end': 'Automatycznie powtarzaj filmy po zakończeniu',
'Relays used for searching notes (NIP-50)': 'Przekaźniki używane do wyszukiwania notatek (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': 'Enviar apenas para {{r}}',
'Send only to these relays': 'Enviar apenas para estes relays',
Explore: 'Explorar',
'Search relays': 'Pesquisar relays',
'Search relays': 'Relays de busca',
relayInfoBadgeAuth: 'Auth',
relayInfoBadgeSearch: 'Pesquisar',
relayInfoBadgePayment: 'Pagamento',
@ -685,6 +685,7 @@ export default {
'Hide indirect': 'Ocultar indiretas',
'Copy note content': 'Copiar conteúdo da nota',
'Video loop': 'Repetir vídeo',
'Automatically replay videos when they end': 'Reproduzir automaticamente os vídeos quando terminarem'
'Automatically replay videos when they end': 'Reproduzir automaticamente os vídeos quando terminarem',
'Relays used for searching notes (NIP-50)': 'Relays usados para buscar notas (NIP-50)'
}
}

View file

@ -166,7 +166,7 @@ export default {
'Send only to r': 'Enviar apenas para {{r}}',
'Send only to these relays': 'Enviar apenas para estes relés',
Explore: 'Explorar',
'Search relays': 'Pesquisar relés',
'Search relays': 'Relés de pesquisa',
relayInfoBadgeAuth: 'Auth',
relayInfoBadgeSearch: 'Pesquisar',
relayInfoBadgePayment: 'Pagamento',
@ -688,6 +688,7 @@ export default {
'Hide indirect': 'Ocultar indiretas',
'Copy note content': 'Copiar conteúdo da nota',
'Video loop': 'Repetir vídeo',
'Automatically replay videos when they end': 'Reproduzir automaticamente os vídeos quando terminarem'
'Automatically replay videos when they end': 'Reproduzir automaticamente os vídeos quando terminarem',
'Relays used for searching notes (NIP-50)': 'Relés usados para pesquisar notas (NIP-50)'
}
}

View file

@ -168,7 +168,7 @@ export default {
'Send only to r': 'Отправить только на {{r}}',
'Send only to these relays': 'Отправить только на эти ретрансляторы',
Explore: 'Обзор',
'Search relays': 'Поиск ретрансляторов',
'Search relays': 'Ретрансляторы для поиска',
relayInfoBadgeAuth: 'Авторизация',
relayInfoBadgeSearch: 'Поиск',
relayInfoBadgePayment: 'Платежи',
@ -687,6 +687,7 @@ export default {
'Hide indirect': 'Скрыть косвенные',
'Copy note content': 'Скопировать содержимое заметки',
'Video loop': 'Зацикливание видео',
'Automatically replay videos when they end': 'Автоматически воспроизводить видео заново после окончания'
'Automatically replay videos when they end': 'Автоматически воспроизводить видео заново после окончания',
'Relays used for searching notes (NIP-50)': 'Ретрансляторы для поиска заметок (NIP-50)'
}
}

View file

@ -163,7 +163,7 @@ export default {
'Send only to r': 'ส่งเฉพาะไปยัง {{r}}',
'Send only to these relays': 'ส่งเฉพาะไปยังรีเลย์เหล่านี้',
Explore: 'สำรวจ',
'Search relays': 'ค้นหารีเลย์',
'Search relays': 'รีเลย์สำหรับค้นหา',
relayInfoBadgeAuth: 'ยืนยันตัวตน',
relayInfoBadgeSearch: 'ค้นหา',
relayInfoBadgePayment: 'ชำระเงิน',
@ -672,6 +672,7 @@ export default {
'Hide indirect': 'ซ่อนทางอ้อม',
'Copy note content': 'คัดลอกเนื้อหาโน้ต',
'Video loop': 'เล่นวิดีโอซ้ำ',
'Automatically replay videos when they end': 'เล่นวิดีโอซ้ำอัตโนมัติเมื่อจบ'
'Automatically replay videos when they end': 'เล่นวิดีโอซ้ำอัตโนมัติเมื่อจบ',
'Relays used for searching notes (NIP-50)': 'รีเลย์ที่ใช้สำหรับค้นหาโน้ต (NIP-50)'
}
}

View file

@ -654,6 +654,7 @@ export default {
'Hide indirect': '隱藏間接通知',
'Copy note content': '複製筆記內容',
'Video loop': '影片循環',
'Automatically replay videos when they end': '影片播放結束後自動重新播放'
'Automatically replay videos when they end': '影片播放結束後自動重新播放',
'Relays used for searching notes (NIP-50)': '用於搜尋筆記的伺服器 (NIP-50)'
}
}

View file

@ -659,6 +659,7 @@ export default {
'Hide indirect': '隐藏间接通知',
'Copy note content': '复制笔记内容',
'Video loop': '视频循环',
'Automatically replay videos when they end': '视频播放结束后自动重新播放'
'Automatically replay videos when they end': '视频播放结束后自动重新播放',
'Relays used for searching notes (NIP-50)': '用于搜索笔记的服务器 (NIP-50)'
}
}