From 1ed9d0d611f6358718fadfa98a94b3c100d30c4e Mon Sep 17 00:00:00 2001 From: Sudo-Ivan Date: Fri, 6 Mar 2026 00:36:58 -0600 Subject: [PATCH] Add localization for Contacts management --- meshchatx/src/frontend/locales/de.json | 56 +++++++++++++++++++++++++- meshchatx/src/frontend/locales/en.json | 56 +++++++++++++++++++++++++- meshchatx/src/frontend/locales/it.json | 56 +++++++++++++++++++++++++- meshchatx/src/frontend/locales/ru.json | 56 +++++++++++++++++++++++++- 4 files changed, 220 insertions(+), 4 deletions(-) diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json index 16beb31..a224dc1 100644 --- a/meshchatx/src/frontend/locales/de.json +++ b/meshchatx/src/frontend/locales/de.json @@ -31,6 +31,7 @@ "sync_messages": "Nachrichten synchronisieren", "compose": "Verfassen", "messages": "Nachrichten", + "contacts": "Kontakte", "nomad_network": "Nomad Network", "map": "Karte", "archives": "Archive", @@ -319,7 +320,59 @@ "failed_create": "Failed to create identity", "switch_scheduled": "Switch scheduled. Reloading application...", "failed_switch": "Failed to switch identity", - "failed_delete": "Failed to delete identity" + "failed_delete": "Failed to delete identity", + "key_control": "Identity key control", + "export_key_file": "Export key file", + "copy_base32": "Copy Base32 key", + "upload_key_file": "Upload key file", + "paste_base32": "Paste Base32", + "paste_base32_placeholder": "Paste your base32 identity key here...", + "confirm_restore": "Confirm restore", + "restoring": "Restoring...", + "identity_exported": "Identity key file exported", + "identity_copied": "Identity Base32 key copied to clipboard", + "identity_export_failed": "Failed to export identity", + "identity_copy_failed": "Failed to copy identity", + "identity_restored": "Identity imported.", + "identity_restore_failed": "Identity restore failed", + "no_identity_available": "No identity available", + "message_count": "{count} messages" + }, + "contacts": { + "title": "Kontakte", + "description": "Kontaktliste verwalten und Identitäten teilen/importieren.", + "search_placeholder": "Kontakte suchen...", + "actions": "Aktionen", + "no_contacts": "Keine Kontakte gefunden", + "load_more": "Mehr laden", + "add_contact": "Kontakt hinzufügen", + "contact_name_optional": "Kontaktname (optional)", + "contact_name_placeholder": "z.B. Feldknoten", + "hash_or_uri": "LXMF-Hash oder URI", + "hash_or_uri_placeholder": "32-Zeichen-Hash, lxmf://... oder lxma://...", + "paste": "Einfügen", + "failed_load_contacts": "Kontakte konnten nicht geladen werden", + "invalid_contact_input": "Ungültige Eingabe. 32-Zeichen-Hash oder lxma://-URI verwenden.", + "contact_already_exists": "Kontakt existiert bereits", + "contact_added": "Kontakt hinzugefügt", + "failed_add_contact": "Kontakt konnte nicht hinzugefügt werden", + "remove_contact": "Kontakt entfernen", + "remove_contact_confirm": "Diesen Kontakt entfernen?", + "contact_removed": "Kontakt entfernt", + "failed_remove_contact": "Kontakt konnte nicht entfernt werden", + "share_contact": "Kontakt-URI teilen", + "copy_contact_uri": "Kontakt-URI kopieren", + "contact_uri_copied": "Kontakt-URI in Zwischenablage kopiert", + "failed_build_contact_uri": "Share-URI für diesen Kontakt konnte nicht erstellt werden", + "share_my_identity": "Meine Identität teilen", + "identity_uri_copied": "Identitäts-URI in Zwischenablage kopiert", + "share": "Teilen", + "scan_qr": "QR-Code scannen", + "scanner_hint": "Kamera auf einen Identitäts-QR-Code richten.", + "camera_not_supported": "Kamera-QR-Scan wird in diesem Browser nicht unterstützt.", + "camera_failed": "Kamera konnte nicht gestartet werden.", + "qr_scanned": "QR-Code gescannt", + "importing_lxma": "LXMA-Kontakt wird importiert..." }, "about": { "title": "Über", @@ -396,6 +449,7 @@ "manage": "Verwalten", "description": "Suchen, filtern und exportieren Sie Ihre Reticulum-Adapter.", "add_interface": "Schnittstelle hinzufügen", + "edit_interface": "Schnittstelle bearbeiten", "import": "Importieren", "export_all": "Alle exportieren", "search_placeholder": "Suche nach Name, Typ, Host...", diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json index bdf72cc..9e351ab 100644 --- a/meshchatx/src/frontend/locales/en.json +++ b/meshchatx/src/frontend/locales/en.json @@ -31,6 +31,7 @@ "sync_messages": "Sync Messages", "compose": "Compose", "messages": "Messages", + "contacts": "Contacts", "nomad_network": "Nomad Network", "map": "Map", "archives": "Archives", @@ -319,7 +320,23 @@ "failed_create": "Failed to create identity", "switch_scheduled": "Switch scheduled. Reloading application...", "failed_switch": "Failed to switch identity", - "failed_delete": "Failed to delete identity" + "failed_delete": "Failed to delete identity", + "key_control": "Identity key control", + "export_key_file": "Export key file", + "copy_base32": "Copy Base32 key", + "upload_key_file": "Upload key file", + "paste_base32": "Paste Base32", + "paste_base32_placeholder": "Paste your base32 identity key here...", + "confirm_restore": "Confirm restore", + "restoring": "Restoring...", + "identity_exported": "Identity key file exported", + "identity_copied": "Identity Base32 key copied to clipboard", + "identity_export_failed": "Failed to export identity", + "identity_copy_failed": "Failed to copy identity", + "identity_restored": "Identity imported.", + "identity_restore_failed": "Identity restore failed", + "no_identity_available": "No identity available", + "message_count": "{count} messages" }, "about": { "title": "About", @@ -396,6 +413,7 @@ "manage": "Manage", "description": "Search, filter and export your Reticulum adapters.", "add_interface": "Add Interface", + "edit_interface": "Edit Interface", "import": "Import", "export_all": "Export all", "search_placeholder": "Search by name, type, host...", @@ -1382,6 +1400,42 @@ "ringtone_saved": "Ringtone saved successfully", "failed_save_ringtone": "Failed to save edited ringtone" }, + "contacts": { + "title": "Contacts", + "description": "Manage your contact list and share/import identities.", + "search_placeholder": "Search contacts...", + "actions": "Actions", + "no_contacts": "No contacts found", + "load_more": "Load more", + "add_contact": "Add Contact", + "contact_name_optional": "Contact Name (Optional)", + "contact_name_placeholder": "e.g. Field Node", + "hash_or_uri": "LXMF Hash or URI", + "hash_or_uri_placeholder": "32-char hash, lxmf://..., or lxma://...", + "paste": "Paste", + "failed_load_contacts": "Failed to load contacts", + "invalid_contact_input": "Invalid input. Use a 32-char hash or lxma:// URI.", + "contact_already_exists": "Contact already exists", + "contact_added": "Contact added", + "failed_add_contact": "Failed to add contact", + "remove_contact": "Remove Contact", + "remove_contact_confirm": "Remove this contact?", + "contact_removed": "Contact removed", + "failed_remove_contact": "Failed to remove contact", + "share_contact": "Share Contact URI", + "copy_contact_uri": "Copy Contact URI", + "contact_uri_copied": "Contact URI copied to clipboard", + "failed_build_contact_uri": "Could not build a share URI for this contact", + "share_my_identity": "Share My Identity", + "identity_uri_copied": "Identity URI copied to clipboard", + "share": "Share", + "scan_qr": "Scan QR Code", + "scanner_hint": "Point camera at an identity QR code.", + "camera_not_supported": "Camera QR scanning is not supported in this browser.", + "camera_failed": "Failed to start camera scanner.", + "qr_scanned": "QR code scanned", + "importing_lxma": "Importing LXMA contact..." + }, "tutorial": { "title": "Getting Started", "welcome": "Welcome to", diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json index 3fcc111..2622be9 100644 --- a/meshchatx/src/frontend/locales/it.json +++ b/meshchatx/src/frontend/locales/it.json @@ -31,6 +31,7 @@ "sync_messages": "Sincronizza Messaggi", "compose": "Componi", "messages": "Messaggi", + "contacts": "Contatti", "nomad_network": "Nomad Network", "map": "Mappa", "archives": "Archivi", @@ -319,7 +320,59 @@ "failed_create": "Impossibile creare l'identità", "switch_scheduled": "Cambio programmato. Ricaricando l'applicazione...", "failed_switch": "Impossibile cambiare identità", - "failed_delete": "Impossibile eliminare l'identità" + "failed_delete": "Impossibile eliminare l'identità", + "key_control": "Identity key control", + "export_key_file": "Export key file", + "copy_base32": "Copy Base32 key", + "upload_key_file": "Upload key file", + "paste_base32": "Paste Base32", + "paste_base32_placeholder": "Paste your base32 identity key here...", + "confirm_restore": "Confirm restore", + "restoring": "Restoring...", + "identity_exported": "Identity key file exported", + "identity_copied": "Identity Base32 key copied to clipboard", + "identity_export_failed": "Failed to export identity", + "identity_copy_failed": "Failed to copy identity", + "identity_restored": "Identity imported.", + "identity_restore_failed": "Identity restore failed", + "no_identity_available": "No identity available", + "message_count": "{count} messages" + }, + "contacts": { + "title": "Contatti", + "description": "Gestisci la tua rubrica e condividi/importa identità.", + "search_placeholder": "Cerca contatti...", + "actions": "Azioni", + "no_contacts": "Nessun contatto trovato", + "load_more": "Carica altri", + "add_contact": "Aggiungi contatto", + "contact_name_optional": "Nome contatto (opzionale)", + "contact_name_placeholder": "es. Nodo di campo", + "hash_or_uri": "Hash LXMF o URI", + "hash_or_uri_placeholder": "Hash 32 caratteri, lxmf://... o lxma://...", + "paste": "Incolla", + "failed_load_contacts": "Impossibile caricare i contatti", + "invalid_contact_input": "Input non valido. Usa un hash di 32 caratteri o URI lxma://.", + "contact_already_exists": "Il contatto esiste già", + "contact_added": "Contatto aggiunto", + "failed_add_contact": "Impossibile aggiungere il contatto", + "remove_contact": "Rimuovi contatto", + "remove_contact_confirm": "Rimuovere questo contatto?", + "contact_removed": "Contatto rimosso", + "failed_remove_contact": "Impossibile rimuovere il contatto", + "share_contact": "Condividi URI contatto", + "copy_contact_uri": "Copia URI contatto", + "contact_uri_copied": "URI contatto copiato negli appunti", + "failed_build_contact_uri": "Impossibile creare un URI per questo contatto", + "share_my_identity": "Condividi la mia identità", + "identity_uri_copied": "URI identità copiato negli appunti", + "share": "Condividi", + "scan_qr": "Scansiona QR", + "scanner_hint": "Inquadra il codice QR dell'identità con la fotocamera.", + "camera_not_supported": "La scansione QR con fotocamera non è supportata in questo browser.", + "camera_failed": "Impossibile avviare la fotocamera.", + "qr_scanned": "Codice QR scansionato", + "importing_lxma": "Importazione contatto LXMA..." }, "about": { "title": "Informazioni", @@ -396,6 +449,7 @@ "manage": "Gestisci", "description": "Cerca, filtra ed esporta i tuoi adattatori Reticulum.", "add_interface": "Aggiungi Interfaccia", + "edit_interface": "Modifica Interfaccia", "import": "Importa", "export_all": "Esporta tutto", "search_placeholder": "Cerca per nome, tipo, host...", diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json index 9f3d2e8..a9117d4 100644 --- a/meshchatx/src/frontend/locales/ru.json +++ b/meshchatx/src/frontend/locales/ru.json @@ -31,6 +31,7 @@ "sync_messages": "Синхронизировать сообщения", "compose": "Написать", "messages": "Сообщения", + "contacts": "Контакты", "nomad_network": "Nomad Network", "map": "Карта", "archives": "Архивы", @@ -319,7 +320,59 @@ "failed_create": "Failed to create identity", "switch_scheduled": "Switch scheduled. Reloading application...", "failed_switch": "Failed to switch identity", - "failed_delete": "Failed to delete identity" + "failed_delete": "Failed to delete identity", + "key_control": "Identity key control", + "export_key_file": "Export key file", + "copy_base32": "Copy Base32 key", + "upload_key_file": "Upload key file", + "paste_base32": "Paste Base32", + "paste_base32_placeholder": "Paste your base32 identity key here...", + "confirm_restore": "Confirm restore", + "restoring": "Restoring...", + "identity_exported": "Identity key file exported", + "identity_copied": "Identity Base32 key copied to clipboard", + "identity_export_failed": "Failed to export identity", + "identity_copy_failed": "Failed to copy identity", + "identity_restored": "Identity imported.", + "identity_restore_failed": "Identity restore failed", + "no_identity_available": "No identity available", + "message_count": "{count} messages" + }, + "contacts": { + "title": "Контакты", + "description": "Управление списком контактов и обмен/импорт идентичностей.", + "search_placeholder": "Поиск контактов...", + "actions": "Действия", + "no_contacts": "Контакты не найдены", + "load_more": "Загрузить еще", + "add_contact": "Добавить контакт", + "contact_name_optional": "Имя контакта (необязательно)", + "contact_name_placeholder": "например, Полевой узел", + "hash_or_uri": "LXMF-хэш или URI", + "hash_or_uri_placeholder": "32-символьный хэш, lxmf://... или lxma://...", + "paste": "Вставить", + "failed_load_contacts": "Не удалось загрузить контакты", + "invalid_contact_input": "Недопустимый ввод. Используйте 32-символьный хэш или URI lxma://.", + "contact_already_exists": "Контакт уже существует", + "contact_added": "Контакт добавлен", + "failed_add_contact": "Не удалось добавить контакт", + "remove_contact": "Удалить контакт", + "remove_contact_confirm": "Удалить этот контакт?", + "contact_removed": "Контакт удален", + "failed_remove_contact": "Не удалось удалить контакт", + "share_contact": "Поделиться URI контакта", + "copy_contact_uri": "Копировать URI контакта", + "contact_uri_copied": "URI контакта скопирован в буфер обмена", + "failed_build_contact_uri": "Не удалось создать URI для этого контакта", + "share_my_identity": "Поделиться моей идентичностью", + "identity_uri_copied": "URI идентичности скопирован в буфер обмена", + "share": "Поделиться", + "scan_qr": "Сканировать QR-код", + "scanner_hint": "Наведите камеру на QR-код идентичности.", + "camera_not_supported": "Сканирование QR камерой не поддерживается в этом браузере.", + "camera_failed": "Не удалось запустить камеру.", + "qr_scanned": "QR-код отсканирован", + "importing_lxma": "Импорт контакта LXMA..." }, "about": { "title": "О программе", @@ -396,6 +449,7 @@ "manage": "Управление", "description": "Поиск, фильтрация и экспорт ваших адаптеров Reticulum.", "add_interface": "Добавить интерфейс", + "edit_interface": "Редактировать интерфейс", "import": "Импорт", "export_all": "Экспорт всех", "search_placeholder": "Поиск по имени, типу, хосту...",