diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json index 2c6261b..d07a6da 100644 --- a/meshchatx/src/frontend/locales/de.json +++ b/meshchatx/src/frontend/locales/de.json @@ -855,7 +855,7 @@ "clear_cache": "Cache leeren", "cache_cleared": "Kachel-Cache geleert", "tile_server_url": "Kachel-Server-URL", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Verwenden Sie {z}, {x}, {y} für Zoom, Spalte, Zeile", "tile_server_saved": "Kachel-Server-URL gespeichert", "tile_server_openstreetmap": "OpenStreetMap", @@ -1282,6 +1282,60 @@ "title": "Weiterleiter", "description": "LXMF zwischen Adressen weiterleiten, mit erhaltenem Antwort-Routing." }, + "sieve_filters": { + "title": "Sieb-Filter", + "description": "Text in Peer-Feldern und/oder Nachrichtentitel und -inhalt abgleichen, dann Unterhaltung ausblenden, Benachrichtigungen stellen, Ordner zuweisen oder Absender vollständig blockieren (verbannen).", + "subtitle": "Regeln laufen der Reihe nach. Der Geltungsbereich wählt alle, nur Kontakte oder nur Nicht-Kontakte. Teilstring- oder Regex-Abgleich. Die erste passende aktive Regel gewinnt.", + "back_tools": "Zurück zu Werkzeugen", + "rules_heading": "Regeln", + "add_rule": "Regel hinzufügen", + "order_hint": "Reihenfolge von oben nach unten: die erste passende Regel zählt.", + "empty_rules": "Noch keine Regeln. Fügen Sie eine Regel hinzu oder speichern Sie eine leere Liste zum Zurücksetzen.", + "enabled": "Aktiv", + "move_up": "Nach oben", + "move_down": "Nach unten", + "remove_rule": "Regel entfernen", + "terms_label": "Begriffe oder Muster", + "terms_placeholder": "Eine Zeile pro Eintrag oder kommagetrennt. Teilstrings ohne Groß/Klein. Regex: ein Muster pro Zeile; ungültige Muster werden beim Speichern entfernt.", + "match_targets_label": "Abgleich in", + "match_peer_fields": "Peer-Anzeigename, eigener Name, Kontaktfelder", + "match_message": "Nachrichtentitel und -inhalt (wenn vorhanden)", + "match_targets_hint": "Mindestens ein Ziel muss aktiv bleiben.", + "match_mode_label": "Abgleichart", + "match_mode_substring": "Teilzeichenkette", + "match_mode_regex": "Regulärer Ausdruck", + "scope_label": "Gilt für", + "scope_everyone": "Alle", + "scope_contacts": "Nur Kontakte", + "scope_non_contacts": "Nur Nicht-Kontakte", + "graph_scope_everyone": "Alle", + "graph_scope_contacts": "Kontakte", + "graph_scope_non_contacts": "Unbekannte", + "graph_match_peer": "Peer", + "graph_match_message": "Nachr.", + "graph_match_mode_substring": "Teilstr.", + "graph_match_mode_regex": "regex", + "action_label": "Dann", + "action_hide": "Unterhaltung ausblenden", + "action_ignore": "Ignorieren (keine Benachrichtigungen)", + "action_folder": "In Ordner verschieben", + "action_banish": "Absender verbannen (vollständige Sperre)", + "folder_label": "Ordner", + "save": "Speichern", + "saving": "Speichern…", + "revert": "Neu laden", + "saved": "Sieb-Filter gespeichert", + "save_failed": "Sieb-Filter konnten nicht gespeichert werden", + "load_failed": "Sieb-Filter konnten nicht geladen werden", + "flow_heading": "Regelablauf", + "flow_source": "Peers", + "flow_source_hint": "Peer-Felder: angekündigter Name, eigener Anzeigename, Kontaktname oder LXMF-Adresse.", + "flow_if": "Wenn", + "flow_hide": "Ausblenden", + "flow_banish": "Verbannen", + "flow_folder": "Ordner", + "flow_no_rules": "Keine Regeln" + }, "rnode_flasher": { "title": "RNode Flasher", "description": "RNode-Firmware im Browser flashen oder aktualisieren (unterstützte Hardware).", diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json index 14b09c7..8367963 100644 --- a/meshchatx/src/frontend/locales/en.json +++ b/meshchatx/src/frontend/locales/en.json @@ -803,7 +803,7 @@ "clear_cache": "Clear Cache", "cache_cleared": "Tile cache cleared", "tile_server_url": "Tile Server URL", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Use {z}, {x}, {y} for zoom, column, row", "tile_server_saved": "Tile server URL saved", "tile_server_openstreetmap": "OpenStreetMap", @@ -1342,6 +1342,60 @@ "title": "Forwarder", "description": "Forward LXMF between addresses with reply routing preserved." }, + "sieve_filters": { + "title": "Sieve filters", + "description": "Match text in peer identity fields and/or message title and body, then hide the thread, silence notifications, move it to a folder, or banish the sender (full block).", + "subtitle": "Rules run in order. Scope picks everyone, contacts only, or non-contacts only. Choose substring or regex matching. The first enabled rule whose scope fits and whose targets match wins.", + "back_tools": "Back to tools", + "rules_heading": "Rules", + "add_rule": "Add rule", + "order_hint": "Drag order is top to bottom: the first matching rule applies.", + "empty_rules": "No rules yet. Add a rule or save an empty list to clear filters.", + "enabled": "Enabled", + "move_up": "Move up", + "move_down": "Move down", + "remove_rule": "Remove rule", + "terms_label": "Terms or patterns", + "terms_placeholder": "One per line or comma-separated. Substrings are case-insensitive. Regex: one pattern per line; invalid patterns are removed when saving.", + "match_targets_label": "Match in", + "match_peer_fields": "Peer display name, custom name, contact fields", + "match_message": "Message title and body (when available)", + "match_targets_hint": "At least one target must stay enabled.", + "match_mode_label": "Match style", + "match_mode_substring": "Substring", + "match_mode_regex": "Regular expression", + "scope_label": "Applies to", + "scope_everyone": "Everyone", + "scope_contacts": "Contacts only", + "scope_non_contacts": "Non-contacts only", + "graph_scope_everyone": "Everyone", + "graph_scope_contacts": "Contacts", + "graph_scope_non_contacts": "Non-contacts", + "graph_match_peer": "peer", + "graph_match_message": "msg", + "graph_match_mode_substring": "substring", + "graph_match_mode_regex": "regex", + "action_label": "Then", + "action_hide": "Hide conversation", + "action_ignore": "Ignore (no notifications)", + "action_folder": "Move to folder", + "action_banish": "Banish sender (full block)", + "folder_label": "Folder", + "save": "Save", + "saving": "Saving…", + "revert": "Reload", + "saved": "Sieve filters saved", + "save_failed": "Could not save sieve filters", + "load_failed": "Could not load sieve filters", + "flow_heading": "Rule flow", + "flow_source": "Peers", + "flow_source_hint": "Peer fields use announced display name, your custom name, and contact name or LXMF address.", + "flow_if": "If", + "flow_hide": "Hide", + "flow_banish": "Banish", + "flow_folder": "Folder", + "flow_no_rules": "No rules" + }, "rnode_flasher": { "title": "RNode Flasher", "description": "Flash or update RNode firmware from the browser (supported hardware).", diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json index 07c70b4..d763643 100644 --- a/meshchatx/src/frontend/locales/es.json +++ b/meshchatx/src/frontend/locales/es.json @@ -803,7 +803,7 @@ "clear_cache": "Caché transparente", "cache_cleared": "Caché de azul claro", "tile_server_url": "URL del servidor", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Utilice{z},{x},{y}para zoom, columna, fila", "tile_server_saved": "URL del servidor del azul", "tile_server_openstreetmap": "OpenStreetMap", @@ -1342,6 +1342,60 @@ "title": "Forwarder", "description": "Forward LXMF entre direcciones con réplica conservado." }, + "sieve_filters": { + "title": "Filtros tamiz", + "description": "Coincidir texto en datos del par y/o título y cuerpo del mensaje; luego ocultar el hilo, silenciar notificaciones, mover a carpeta o desterrar al remitente (bloqueo completo).", + "subtitle": "Las reglas se aplican en orden. El ámbito elige todos, solo contactos o solo no contactos. Elija subcadena o expresión regular. Gana la primera regla activa que encaje.", + "back_tools": "Volver a herramientas", + "rules_heading": "Reglas", + "add_rule": "Añadir regla", + "order_hint": "El orden es de arriba abajo: se aplica la primera regla que coincida.", + "empty_rules": "Aún no hay reglas. Añada una o guarde una lista vacía para borrar filtros.", + "enabled": "Activada", + "move_up": "Subir", + "move_down": "Bajar", + "remove_rule": "Quitar regla", + "terms_label": "Términos o patrones", + "terms_placeholder": "Uno por línea o separados por comas. Subcadenas sin distinguir mayúsculas. Regex: un patrón por línea; los inválidos se quitan al guardar.", + "match_targets_label": "Coincidir en", + "match_peer_fields": "Nombre mostrado del par, nombre propio, datos de contacto", + "match_message": "Título y cuerpo del mensaje (si hay)", + "match_targets_hint": "Debe quedar al menos un objetivo activo.", + "match_mode_label": "Estilo de coincidencia", + "match_mode_substring": "Subcadena", + "match_mode_regex": "Expresión regular", + "scope_label": "Se aplica a", + "scope_everyone": "Todos", + "scope_contacts": "Solo contactos", + "scope_non_contacts": "Solo no contactos", + "graph_scope_everyone": "Todos", + "graph_scope_contacts": "Contactos", + "graph_scope_non_contacts": "No contactos", + "graph_match_peer": "par", + "graph_match_message": "msg", + "graph_match_mode_substring": "subcad.", + "graph_match_mode_regex": "regex", + "action_label": "Entonces", + "action_hide": "Ocultar conversación", + "action_ignore": "Ignorar (sin notificaciones)", + "action_folder": "Mover a carpeta", + "action_banish": "Desterrar remitente (bloqueo completo)", + "folder_label": "Carpeta", + "save": "Guardar", + "saving": "Guardando…", + "revert": "Recargar", + "saved": "Filtros tamiz guardados", + "save_failed": "No se pudieron guardar los filtros tamiz", + "load_failed": "No se pudieron cargar los filtros tamiz", + "flow_heading": "Flujo de reglas", + "flow_source": "Pares", + "flow_source_hint": "Campos del par: nombre anunciado, su nombre personalizado y contacto o LXMF.", + "flow_if": "Si", + "flow_hide": "Ocultar", + "flow_banish": "Desterrar", + "flow_folder": "Carpeta", + "flow_no_rules": "Sin reglas" + }, "rnode_flasher": { "title": "RNode Flasher", "description": "Flash o actualizar el firmware RNode del navegador (herramienta soportada).", diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json index cf84351..68c4b00 100644 --- a/meshchatx/src/frontend/locales/fr.json +++ b/meshchatx/src/frontend/locales/fr.json @@ -803,7 +803,7 @@ "clear_cache": "Effacer le cache", "cache_cleared": "cache de carreaux effacé", "tile_server_url": "URL du serveur Tile", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Utiliser{z},{x},{y}pour zoom, colonne, ligne", "tile_server_saved": "URL du serveur Tile enregistrée", "tile_server_openstreetmap": "OuvrirStreetMap", @@ -1342,6 +1342,60 @@ "title": "Expéditeur", "description": "Faire suivre LXMF entre les adresses avec un routage de réponse conservé." }, + "sieve_filters": { + "title": "Filtres tamis", + "description": "Faire correspondre du texte dans les champs du pair et/ou le titre et le corps du message, puis masquer le fil, couper les notifications, déplacer dans un dossier ou bannir l’expéditeur (blocage complet).", + "subtitle": "Les règles s’appliquent dans l’ordre. La portée choisit tout le monde, les contacts seulement ou les non-contacts seulement. Sous-chaîne ou expression régulière. La première règle active qui correspond l’emporte.", + "back_tools": "Retour aux outils", + "rules_heading": "Règles", + "add_rule": "Ajouter une règle", + "order_hint": "Ordre de haut en bas : la première règle qui correspond s’applique.", + "empty_rules": "Aucune règle pour l’instant. Ajoutez-en une ou enregistrez une liste vide pour effacer les filtres.", + "enabled": "Activée", + "move_up": "Monter", + "move_down": "Descendre", + "remove_rule": "Supprimer la règle", + "terms_label": "Termes ou motifs", + "terms_placeholder": "Un par ligne ou séparés par des virgules. Sous-chaînes insensibles à la casse. Regex : un motif par ligne ; les motifs invalides sont retirés à l’enregistrement.", + "match_targets_label": "Correspondre dans", + "match_peer_fields": "Nom affiché du pair, nom personnalisé, champs contact", + "match_message": "Titre et corps du message (si disponibles)", + "match_targets_hint": "Au moins une cible doit rester activée.", + "match_mode_label": "Mode de correspondance", + "match_mode_substring": "Sous-chaîne", + "match_mode_regex": "Expression régulière", + "scope_label": "S’applique à", + "scope_everyone": "Tout le monde", + "scope_contacts": "Contacts uniquement", + "scope_non_contacts": "Non-contacts uniquement", + "graph_scope_everyone": "Tous", + "graph_scope_contacts": "Contacts", + "graph_scope_non_contacts": "Non-contacts", + "graph_match_peer": "pair", + "graph_match_message": "msg", + "graph_match_mode_substring": "sous-ch.", + "graph_match_mode_regex": "regex", + "action_label": "Alors", + "action_hide": "Masquer la conversation", + "action_ignore": "Ignorer (pas de notifications)", + "action_folder": "Déplacer vers le dossier", + "action_banish": "Bannir l’expéditeur (blocage complet)", + "folder_label": "Dossier", + "save": "Enregistrer", + "saving": "Enregistrement…", + "revert": "Recharger", + "saved": "Filtres tamis enregistrés", + "save_failed": "Impossible d’enregistrer les filtres tamis", + "load_failed": "Impossible de charger les filtres tamis", + "flow_heading": "Flux des règles", + "flow_source": "Pairs", + "flow_source_hint": "Champs pair : nom annoncé, nom personnalisé, contact ou LXMF.", + "flow_if": "Si", + "flow_hide": "Masquer", + "flow_banish": "Bannir", + "flow_folder": "Dossier", + "flow_no_rules": "Aucune règle" + }, "rnode_flasher": { "title": "Flasher RNode", "description": "Flash ou mettre à jour le micrologiciel RNode depuis le navigateur (matériel reconnu).", diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json index f85f6a1..f0d645b 100644 --- a/meshchatx/src/frontend/locales/it.json +++ b/meshchatx/src/frontend/locales/it.json @@ -855,7 +855,7 @@ "clear_cache": "Svuota Cache", "cache_cleared": "Cache tile svuotata", "tile_server_url": "URL Server Tile", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Usa {z}, {x}, {y} per zoom, colonna, riga", "tile_server_saved": "URL server tile salvato", "tile_server_openstreetmap": "OpenStreetMap", @@ -1394,6 +1394,60 @@ "title": "Inoltro", "description": "Inoltra LXMF tra indirizzi mantenendo il routing delle risposte." }, + "sieve_filters": { + "title": "Filtri a setaccio", + "description": "Confronta testo nei campi del peer e/o titolo e corpo del messaggio, poi nascondi la conversazione, silenzia le notifiche, sposta in cartella o bandisci il mittente (blocco completo).", + "subtitle": "Le regole sono valide in ordine. L’ambito sceglie tutti, solo contatti o solo non contatti. Sottostringa o espressione regolare. Vince la prima regola attiva che corrisponde.", + "back_tools": "Torna agli strumenti", + "rules_heading": "Regole", + "add_rule": "Aggiungi regola", + "order_hint": "Ordine dall’alto in basso: si applica la prima regola che corrisponde.", + "empty_rules": "Nessuna regola. Aggiungine una o salva un elenco vuoto per azzerare i filtri.", + "enabled": "Attiva", + "move_up": "Sposta su", + "move_down": "Sposta giù", + "remove_rule": "Rimuovi regola", + "terms_label": "Termini o pattern", + "terms_placeholder": "Uno per riga o separati da virgola. Sottostringhe senza distinzione maiuscole/minuscole. Regex: un pattern per riga; quelli non validi vengono rimossi al salvataggio.", + "match_targets_label": "Confronta in", + "match_peer_fields": "Nome visualizzato del peer, nome personalizzato, campi contatto", + "match_message": "Titolo e corpo del messaggio (se presenti)", + "match_targets_hint": "Almeno un obiettivo deve restare attivo.", + "match_mode_label": "Modalità di confronto", + "match_mode_substring": "Sottostringa", + "match_mode_regex": "Espressione regolare", + "scope_label": "Si applica a", + "scope_everyone": "Tutti", + "scope_contacts": "Solo contatti", + "scope_non_contacts": "Solo non contatti", + "graph_scope_everyone": "Tutti", + "graph_scope_contacts": "Contatti", + "graph_scope_non_contacts": "Non contatti", + "graph_match_peer": "peer", + "graph_match_message": "msg", + "graph_match_mode_substring": "sottostr.", + "graph_match_mode_regex": "regex", + "action_label": "Allora", + "action_hide": "Nascondi conversazione", + "action_ignore": "Ignora (senza notifiche)", + "action_folder": "Sposta nella cartella", + "action_banish": "Bandisci mittente (blocco completo)", + "folder_label": "Cartella", + "save": "Salva", + "saving": "Salvataggio…", + "revert": "Ricarica", + "saved": "Filtri a setaccio salvati", + "save_failed": "Impossibile salvare i filtri a setaccio", + "load_failed": "Impossibile caricare i filtri a setaccio", + "flow_heading": "Flusso delle regole", + "flow_source": "Peer", + "flow_source_hint": "Campi peer: nome annunciato, nome personalizzato, contatto o LXMF.", + "flow_if": "Se", + "flow_hide": "Nascondi", + "flow_banish": "Bandisci", + "flow_folder": "Cartella", + "flow_no_rules": "Nessuna regola" + }, "rnode_flasher": { "title": "Flasher RNode", "description": "Flash o aggiorna il firmware RNode dal browser (hardware supportato).", diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json index f83176e..e9c7e4a 100644 --- a/meshchatx/src/frontend/locales/nl.json +++ b/meshchatx/src/frontend/locales/nl.json @@ -803,7 +803,7 @@ "clear_cache": "Cache wissen", "cache_cleared": "Tegel cache gewist", "tile_server_url": "Tegelserver-URL", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "{z},{x},{y}gebruiken voor zoom, kolom, rij", "tile_server_saved": "Tegelserver-URL opgeslagen", "tile_server_openstreetmap": "OpenStreetMap", @@ -1342,6 +1342,60 @@ "title": "Stuurprogramma", "description": "Doorsturen LXMF tussen adressen met antwoord routing behouden." }, + "sieve_filters": { + "title": "Zeeffilters", + "description": "Tekst in peer-velden en/of berichttitel en -inhoud matchen; gesprek verbergen, geen meldingen, naar map verplaatsen of afzender verbannen (volledige blokkade).", + "subtitle": "Regels worden in volgorde toegepast. Bereik kiest iedereen, alleen contacten of alleen niet-contacten. Deelstring of regex. De eerste actieve regel die past, wint.", + "back_tools": "Terug naar gereedschap", + "rules_heading": "Regels", + "add_rule": "Regel toevoegen", + "order_hint": "Volgorde van boven naar beneden: de eerste passende regel geldt.", + "empty_rules": "Nog geen regels. Voeg een regel toe of sla een lege lijst op om filters te wissen.", + "enabled": "Ingeschakeld", + "move_up": "Omhoog", + "move_down": "Omlaag", + "remove_rule": "Regel verwijderen", + "terms_label": "Termen of patronen", + "terms_placeholder": "Eén per regel of komma-gescheiden. Deelstrings zijn hoofdletterongevoelig. Regex: één patroon per regel; ongeldige patronen worden bij opslaan verwijderd.", + "match_targets_label": "Matchen in", + "match_peer_fields": "Peer-weergavenaam, eigen naam, contactvelden", + "match_message": "Berichttitel en -inhoud (indien beschikbaar)", + "match_targets_hint": "Minstens één doel moet aan blijven staan.", + "match_mode_label": "Matchstijl", + "match_mode_substring": "Deelstring", + "match_mode_regex": "Reguliere expressie", + "scope_label": "Geldt voor", + "scope_everyone": "Iedereen", + "scope_contacts": "Alleen contacten", + "scope_non_contacts": "Alleen niet-contacten", + "graph_scope_everyone": "Iedereen", + "graph_scope_contacts": "Contacten", + "graph_scope_non_contacts": "Geen contact", + "graph_match_peer": "peer", + "graph_match_message": "msg", + "graph_match_mode_substring": "deelstr.", + "graph_match_mode_regex": "regex", + "action_label": "Dan", + "action_hide": "Gesprek verbergen", + "action_ignore": "Negeren (geen meldingen)", + "action_folder": "Verplaatsen naar map", + "action_banish": "Afzender verbannen (volledige blokkade)", + "folder_label": "Map", + "save": "Opslaan", + "saving": "Opslaan…", + "revert": "Herladen", + "saved": "Zeeffilters opgeslagen", + "save_failed": "Zeeffilters opslaan mislukt", + "load_failed": "Zeeffilters laden mislukt", + "flow_heading": "Regelstroom", + "flow_source": "Peers", + "flow_source_hint": "Peer-velden: aangekondigde naam, uw naam, contact of LXMF.", + "flow_if": "Als", + "flow_hide": "Verbergen", + "flow_banish": "Verbannen", + "flow_folder": "Map", + "flow_no_rules": "Geen regels" + }, "rnode_flasher": { "title": "RNode Flasher", "description": "Flash of update RNode firmware van de browser (ondersteunde hardware).", diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json index 041f0bd..04ec61d 100644 --- a/meshchatx/src/frontend/locales/ru.json +++ b/meshchatx/src/frontend/locales/ru.json @@ -855,7 +855,7 @@ "clear_cache": "Очистить кэш", "cache_cleared": "Кэш тайлов очищен", "tile_server_url": "URL сервера тайлов", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "Используйте {z}, {x}, {y} для масштаба, столбца, строки", "tile_server_saved": "URL сервера тайлов сохранен", "tile_server_openstreetmap": "OpenStreetMap", @@ -1282,6 +1282,60 @@ "title": "Forwarder", "description": "Пересылка LXMF между адресами с сохранением маршрута ответов." }, + "sieve_filters": { + "title": "Сито-фильтры", + "description": "Сопоставлять текст в полях пира и/или заголовке и теле сообщения, затем скрыть беседу, отключить уведомления, переместить в папку или изгнать отправителя (полная блокировка).", + "subtitle": "Правила применяются по порядку. Область задаёт всех, только контактов или только не контактов. Подстрока или регулярное выражение. Срабатывает первое включённое подходящее правило.", + "back_tools": "Назад к инструментам", + "rules_heading": "Правила", + "add_rule": "Добавить правило", + "order_hint": "Сверху вниз: применяется первое подходящее правило.", + "empty_rules": "Правил пока нет. Добавьте правило или сохраните пустой список, чтобы сбросить фильтры.", + "enabled": "Включено", + "move_up": "Вверх", + "move_down": "Вниз", + "remove_rule": "Удалить правило", + "terms_label": "Термины или шаблоны", + "terms_placeholder": "По одному в строке или через запятую. Подстроки без учёта регистра. Regex: один шаблон на строку; неверные шаблоны удаляются при сохранении.", + "match_targets_label": "Где искать", + "match_peer_fields": "Отображаемое имя пира, своё имя, поля контакта", + "match_message": "Заголовок и тело сообщения (если есть)", + "match_targets_hint": "Хотя бы одна цель должна оставаться включённой.", + "match_mode_label": "Способ сопоставления", + "match_mode_substring": "Подстрока", + "match_mode_regex": "Регулярное выражение", + "scope_label": "Действует для", + "scope_everyone": "Всех", + "scope_contacts": "Только контактов", + "scope_non_contacts": "Только не контактов", + "graph_scope_everyone": "Все", + "graph_scope_contacts": "Контакты", + "graph_scope_non_contacts": "Не контакты", + "graph_match_peer": "пир", + "graph_match_message": "сообщ.", + "graph_match_mode_substring": "подстр.", + "graph_match_mode_regex": "regex", + "action_label": "Тогда", + "action_hide": "Скрыть беседу", + "action_ignore": "Игнорировать (без уведомлений)", + "action_folder": "Переместить в папку", + "action_banish": "Изгнать отправителя (полная блокировка)", + "folder_label": "Папка", + "save": "Сохранить", + "saving": "Сохранение…", + "revert": "Перезагрузить", + "saved": "Сито-фильтры сохранены", + "save_failed": "Не удалось сохранить сито-фильтры", + "load_failed": "Не удалось загрузить сито-фильтры", + "flow_heading": "Схема правил", + "flow_source": "Пиры", + "flow_source_hint": "Поля пира: объявленное имя, ваше имя, контакт или LXMF.", + "flow_if": "Если", + "flow_hide": "Скрыть", + "flow_banish": "Изгнать", + "flow_folder": "Папка", + "flow_no_rules": "Нет правил" + }, "rnode_flasher": { "title": "RNode Flasher", "description": "Прошивка или обновление RNode из браузера (поддерживаемое оборудование).", diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json index 04b12ee..131b0b4 100644 --- a/meshchatx/src/frontend/locales/zh.json +++ b/meshchatx/src/frontend/locales/zh.json @@ -803,7 +803,7 @@ "clear_cache": "清除缓存", "cache_cleared": "瓦片缓存已清除", "tile_server_url": "瓦片服务器 URL", - "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_placeholder": "https://tiles.openfreemap.org/styles/bright", "tile_server_url_hint": "使用 {z}、{x}、{y} 表示缩放、列、行", "tile_server_saved": "瓦片服务器 URL 已保存", "tile_server_openstreetmap": "OpenStreetMap", @@ -1342,6 +1342,60 @@ "title": "转发器", "description": "在地址之间转发 LXMF, 并保留回执路径 。" }, + "sieve_filters": { + "title": "筛选规则", + "description": "在对等方字段和/或消息标题与正文中匹配文本,然后隐藏会话、关闭通知、移入文件夹或放逐发送方(完全屏蔽)。", + "subtitle": "规则按顺序执行。适用范围可选所有人、仅联系人或仅非联系人。可选子串或正则。第一条匹配且已启用的规则生效。", + "back_tools": "返回工具", + "rules_heading": "规则", + "add_rule": "添加规则", + "order_hint": "自上而下:先匹配的规则优先。", + "empty_rules": "尚无规则。添加规则或保存空列表以清除筛选。", + "enabled": "启用", + "move_up": "上移", + "move_down": "下移", + "remove_rule": "删除规则", + "terms_label": "词或模式", + "terms_placeholder": "每行一个或用逗号分隔。子串不区分大小写。正则每行一条;无效模式在保存时移除。", + "match_targets_label": "匹配范围", + "match_peer_fields": "对等方显示名、自定义名、联系人字段", + "match_message": "消息标题与正文(若有)", + "match_targets_hint": "至少保留一个匹配目标。", + "match_mode_label": "匹配方式", + "match_mode_substring": "子串", + "match_mode_regex": "正则表达式", + "scope_label": "适用于", + "scope_everyone": "所有人", + "scope_contacts": "仅联系人", + "scope_non_contacts": "仅非联系人", + "graph_scope_everyone": "所有人", + "graph_scope_contacts": "联系人", + "graph_scope_non_contacts": "非联系人", + "graph_match_peer": "对等方", + "graph_match_message": "消息", + "graph_match_mode_substring": "子串", + "graph_match_mode_regex": "正则", + "action_label": "则", + "action_hide": "隐藏会话", + "action_ignore": "忽略(无通知)", + "action_folder": "移入文件夹", + "action_banish": "放逐发送方(完全屏蔽)", + "folder_label": "文件夹", + "save": "保存", + "saving": "正在保存…", + "revert": "重新加载", + "saved": "筛选规则已保存", + "save_failed": "无法保存筛选规则", + "load_failed": "无法加载筛选规则", + "flow_heading": "规则流程", + "flow_source": "对等方", + "flow_source_hint": "对等方字段:广播显示名、自定义名、联系人或 LXMF。", + "flow_if": "若", + "flow_hide": "隐藏", + "flow_banish": "放逐", + "flow_folder": "文件夹", + "flow_no_rules": "无规则" + }, "rnode_flasher": { "title": "R 节点闪光器", "description": "从浏览器(支持的硬件)中闪出或更新RNode固件.",