diff --git a/app/static/js/contacts.js b/app/static/js/contacts.js index ea09840..b722f0b 100644 --- a/app/static/js/contacts.js +++ b/app/static/js/contacts.js @@ -2661,7 +2661,7 @@ function handleManualKeyInput() { const input = document.getElementById('manualKey'); // Allow only hex characters input.value = input.value.replace(/[^0-9a-fA-F]/g, '').toLowerCase(); - document.getElementById('manualKeyCount').textContent = `${input.value.length} / 64 characters`; + document.getElementById('manualKeyCount').textContent = t('contacts.add.key_count', { n: input.value.length }); validateManualForm(); } @@ -2729,7 +2729,7 @@ function resetAddForm(mode) { } else if (mode === 'manual') { document.getElementById('manualName').value = ''; document.getElementById('manualKey').value = ''; - document.getElementById('manualKeyCount').textContent = '0 / 64 characters'; + document.getElementById('manualKeyCount').textContent = t('contacts.add.key_count', { n: 0 }); document.getElementById('addManualBtn').disabled = true; } } diff --git a/app/templates/base.html b/app/templates/base.html index 5354a9b..5c12ec2 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1040,7 +1040,7 @@
{{ t('settings.regions.registry') }}
-
Loading... +
{{ t('common.loading') }}
@@ -1065,7 +1065,7 @@
{{ t('settings.analyzer.services') }}
-
Loading... +
{{ t('common.loading') }}
@@ -59,7 +59,7 @@
{{ t('contacts.add.type_short') }}
@@ -70,10 +70,10 @@
@@ -91,7 +91,7 @@
@@ -105,7 +105,7 @@ - 0 / 64 characters + {{ t('contacts.add.key_count', n=0) }}
@@ -117,7 +117,7 @@
diff --git a/app/templates/contacts-manage.html b/app/templates/contacts-manage.html index fffa362..0c6aa5e 100644 --- a/app/templates/contacts-manage.html +++ b/app/templates/contacts-manage.html @@ -1,6 +1,6 @@ {% extends "contacts_base.html" %} -{% block title %}Contact Management Settings - mc-webui{% endblock %} +{% block title %}{{ t('contacts.manage.title') }} - mc-webui{% endblock %} {% block page_content %}
@@ -9,7 +9,7 @@ @@ -168,24 +168,25 @@ diff --git a/app/templates/contacts-pending.html b/app/templates/contacts-pending.html index 5a22a96..718946c 100644 --- a/app/templates/contacts-pending.html +++ b/app/templates/contacts-pending.html @@ -1,13 +1,13 @@ {% extends "contacts_base.html" %} -{% block title %}Pending Contacts - mc-webui{% endblock %} +{% block title %}{{ t('contacts.pending.title') }} - mc-webui{% endblock %} {% block page_content %}

- Pending Contacts + {{ t('contacts.pending.title') }}

@@ -18,7 +18,7 @@ {{ t('common.back') }}
@@ -27,7 +27,7 @@
- Filters + {{ t('pa.filters') }} @@ -46,10 +46,10 @@
@@ -59,7 +59,7 @@ @@ -89,12 +89,12 @@ @@ -121,24 +121,24 @@ diff --git a/app/translations/en.json b/app/translations/en.json index 27cbfde..5be3f34 100644 --- a/app/translations/en.json +++ b/app/translations/en.json @@ -127,6 +127,7 @@ "contacts.add.adding": "Adding contact...", "contacts.add.failed": "Failed to add contact.", "contacts.add.key": "Key:", + "contacts.add.key_count": "{n} / 64 characters", "contacts.add.name": "Name:", "contacts.add.name_ph": "Contact name", "contacts.add.preview": "Preview:", @@ -134,7 +135,11 @@ "contacts.add.pubkey_ph": "e.g. a1b2c3d4...", "contacts.add.qr_label": "Or upload a QR code image:", "contacts.add.scanned": "Scanned:", + "contacts.add.start_camera": "Start Camera", + "contacts.add.stop_camera": "Stop Camera", "contacts.add.success": "Contact added successfully!", + "contacts.add.tab_manual": "Manual", + "contacts.add.title": "Add Contact", "contacts.add.type": "Contact Type:", "contacts.add.type_short": "Type:", "contacts.add.uri_hint": "Paste a meshcore:// URI from the MeshCore mobile app", @@ -159,18 +164,25 @@ "contacts.card.add_desc": "Add from URI, QR code, or manual entry", "contacts.card.existing_desc": "Manage all stored contacts", "contacts.card.pending_desc": "Contacts awaiting manual approval", + "contacts.cleanup.confirm_title": "Confirm Contact Cleanup", "contacts.cleanup.date_field": "Date Field:", + "contacts.cleanup.days": "Days of Inactivity (0 = ignore):", "contacts.cleanup.days_hint": "Contacts inactive for more than this many days will be selected", + "contacts.cleanup.delete_btn": "Delete Contacts", + "contacts.cleanup.delete_confirm": "The following 0 contact(s) will be permanently deleted:", "contacts.cleanup.enable": "Enable Auto-Cleanup", "contacts.cleanup.enable_hint": "When enabled, contacts matching the above criteria will be automatically deleted daily at the specified hour", "contacts.cleanup.last_advert": "Last Advert", "contacts.cleanup.last_modified": "Last Modified", "contacts.cleanup.name_filter": "Name Filter (optional):", "contacts.cleanup.name_filter_ph": "Enter partial name to search...", + "contacts.cleanup.preview": "Preview Cleanup", "contacts.cleanup.run_at": "Run at:", + "contacts.cleanup.status_label": "Status:", "contacts.cleanup.title": "Cleanup Contacts", "contacts.cleanup.title_hint": "Remove contacts based on various filter criteria", "contacts.cleanup.types": "Contact Types:", + "contacts.cleanup.undo_warning": "This action cannot be undone!", "contacts.confirm.block": "Block this contact? Their messages will be hidden from chat.", "contacts.copy_title": "Click to copy", "contacts.delete.confirm": "Delete Contact", @@ -182,6 +194,7 @@ "contacts.existing.none_hint": "Contacts will appear here once added", "contacts.existing.search_ph": "Search by name or public key...", "contacts.existing.title": "Existing Contacts", + "contacts.filter.advanced": "Advanced Filters", "contacts.filter.all_sources": "All sources", "contacts.filter.all_types": "All Types", "contacts.filter.blocked": "Blocked", @@ -195,14 +208,22 @@ "contacts.inactive": "Inactive", "contacts.last_advert": "Last advert: {time}", "contacts.last_advert_unknown": "Last advert: Unknown", + "contacts.manage.title": "Contact Management Settings", "contacts.map.show": "Show:", "contacts.map.title": "Map", "contacts.never_seen": "Never seen", + "contacts.pending.approve_confirm": "You are about to approve 0 contacts:", + "contacts.pending.approve_note": "These contacts will be added to your device and can receive/send messages.", + "contacts.pending.confirm_approve_title": "Confirm Batch Approval", + "contacts.pending.confirm_ignore_title": "Confirm Batch Ignore", "contacts.pending.filter_hint": "Filter contacts by type or name, then approve or ignore them in bulk.", + "contacts.pending.ignore_confirm": "You are about to ignore 0 contacts:", + "contacts.pending.ignore_note": "Ignored contacts will not trigger new pending requests. You can unignore them later from the Existing Contacts page.", "contacts.pending.load_failed": "Failed to load pending contacts", "contacts.pending.loading": "Loading pending contacts...", "contacts.pending.none": "No pending requests", "contacts.pending.none_hint": "New contact requests will appear here when manual approval is enabled", + "contacts.pending.title": "Pending Contacts", "contacts.protected_cannot_block": "Cannot block protected contact", "contacts.protected_cannot_delete": "Cannot delete protected contact", "contacts.protected_cannot_ignore": "Cannot ignore protected contact", diff --git a/app/translations/pl.json b/app/translations/pl.json index 181d3b7..0f9803e 100644 --- a/app/translations/pl.json +++ b/app/translations/pl.json @@ -139,6 +139,7 @@ "contacts.add.adding": "Dodawanie kontaktu...", "contacts.add.failed": "Nie udało się dodać kontaktu.", "contacts.add.key": "Klucz:", + "contacts.add.key_count": "{n} / 64 znaki", "contacts.add.name": "Nazwa:", "contacts.add.name_ph": "Nazwa kontaktu", "contacts.add.preview": "Podgląd:", @@ -146,7 +147,11 @@ "contacts.add.pubkey_ph": "np. a1b2c3d4...", "contacts.add.qr_label": "Albo wgraj obraz z kodem QR:", "contacts.add.scanned": "Zeskanowano:", + "contacts.add.start_camera": "Włącz kamerę", + "contacts.add.stop_camera": "Wyłącz kamerę", "contacts.add.success": "Kontakt dodany pomyślnie!", + "contacts.add.tab_manual": "Ręcznie", + "contacts.add.title": "Dodaj kontakt", "contacts.add.type": "Typ kontaktu:", "contacts.add.type_short": "Typ:", "contacts.add.uri_hint": "Wklej URI meshcore:// z aplikacji mobilnej MeshCore", @@ -171,18 +176,25 @@ "contacts.card.add_desc": "Dodaj z URI, kodu QR lub ręcznie", "contacts.card.existing_desc": "Zarządzaj wszystkimi zapisanymi kontaktami", "contacts.card.pending_desc": "Kontakty oczekujące na ręczne zatwierdzenie", + "contacts.cleanup.confirm_title": "Potwierdź czyszczenie kontaktów", "contacts.cleanup.date_field": "Pole daty:", + "contacts.cleanup.days": "Dni nieaktywności (0 = pomiń):", "contacts.cleanup.days_hint": "Zaznaczone zostaną kontakty nieaktywne dłużej niż tyle dni", + "contacts.cleanup.delete_btn": "Usuń kontakty", + "contacts.cleanup.delete_confirm": "Następujące kontakty (0) zostaną trwale usunięte:", "contacts.cleanup.enable": "Włącz automatyczne czyszczenie", "contacts.cleanup.enable_hint": "Gdy włączone, kontakty spełniające powyższe kryteria będą usuwane codziennie o wskazanej godzinie", "contacts.cleanup.last_advert": "Ostatni advert", "contacts.cleanup.last_modified": "Ostatnia zmiana", "contacts.cleanup.name_filter": "Filtr nazwy (opcjonalnie):", "contacts.cleanup.name_filter_ph": "Wpisz fragment nazwy do wyszukania...", + "contacts.cleanup.preview": "Podgląd czyszczenia", "contacts.cleanup.run_at": "Uruchom o:", + "contacts.cleanup.status_label": "Status:", "contacts.cleanup.title": "Czyszczenie kontaktów", "contacts.cleanup.title_hint": "Usuń kontakty według różnych kryteriów", "contacts.cleanup.types": "Typy kontaktów:", + "contacts.cleanup.undo_warning": "Tej operacji nie można cofnąć!", "contacts.confirm.block": "Zablokować ten kontakt? Jego wiadomości będą ukryte w czacie.", "contacts.copy_title": "Kliknij, aby skopiować", "contacts.delete.confirm": "Usuń kontakt", @@ -194,6 +206,7 @@ "contacts.existing.none_hint": "Kontakty pojawią się tutaj po dodaniu", "contacts.existing.search_ph": "Szukaj po nazwie lub kluczu publicznym...", "contacts.existing.title": "Istniejące kontakty", + "contacts.filter.advanced": "Filtry zaawansowane", "contacts.filter.all_sources": "Wszystkie źródła", "contacts.filter.all_types": "Wszystkie typy", "contacts.filter.blocked": "Zablokowane", @@ -209,14 +222,22 @@ "contacts.inactive": "Nieaktywny", "contacts.last_advert": "Ostatni advert: {time}", "contacts.last_advert_unknown": "Ostatni advert: nieznany", + "contacts.manage.title": "Ustawienia zarządzania kontaktami", "contacts.map.show": "Pokaż:", "contacts.map.title": "Mapa", "contacts.never_seen": "Nigdy niewidziany", + "contacts.pending.approve_confirm": "Zamierzasz zatwierdzić 0 kontaktów:", + "contacts.pending.approve_note": "Te kontakty zostaną dodane do Twojego urządzenia i będą mogły odbierać i wysyłać wiadomości.", + "contacts.pending.confirm_approve_title": "Potwierdź zbiorcze zatwierdzenie", + "contacts.pending.confirm_ignore_title": "Potwierdź zbiorcze zignorowanie", "contacts.pending.filter_hint": "Filtruj kontakty po typie lub nazwie, a następnie zatwierdź lub zignoruj je zbiorczo.", + "contacts.pending.ignore_confirm": "Zamierzasz zignorować 0 kontaktów:", + "contacts.pending.ignore_note": "Ignorowane kontakty nie będą generować nowych oczekujących zgłoszeń. Możesz cofnąć ignorowanie później na stronie Istniejące kontakty.", "contacts.pending.load_failed": "Nie udało się wczytać oczekujących kontaktów", "contacts.pending.loading": "Wczytywanie oczekujących kontaktów...", "contacts.pending.none": "Brak oczekujących zgłoszeń", "contacts.pending.none_hint": "Nowe zgłoszenia kontaktów pojawią się tutaj, gdy włączone jest ręczne zatwierdzanie", + "contacts.pending.title": "Oczekujące kontakty", "contacts.protected_cannot_block": "Nie można zablokować chronionego kontaktu", "contacts.protected_cannot_delete": "Nie można usunąć chronionego kontaktu", "contacts.protected_cannot_ignore": "Nie można zignorować chronionego kontaktu",