From 4c97be177c0d0b243da1c034cc5be29a836293dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20J=C3=B6rgensen?= Date: Fri, 2 Jan 2026 11:15:24 +0100 Subject: [PATCH] Improve focus navigation on call history list #LINQT-2201 --- Linphone/data/languages/de.ts | 370 ++++++++++-------- Linphone/data/languages/en.ts | 370 ++++++++++-------- Linphone/data/languages/fr.ts | 370 ++++++++++-------- .../Display/Call/CallHistoryListView.qml | 66 +++- 4 files changed, 655 insertions(+), 521 deletions(-) diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 9952bee98..6e80a57ca 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -1026,11 +1026,35 @@ CallHistoryListView - + call_name_accessible_button Call %1 Anruf %1 + + + call_history_entry_accessible_name + %1 - %2 - %3 - right arrow for call-back button + + + + + notification_missed_call_title + "Appel manqué" + Verpasster Anruf + + + + call_outgoing + "Appel sortant" + Ausgehender Anruf + + + + call_audio_incoming + "Appel entrant" + Eingehender Anruf + CallLayout @@ -1236,101 +1260,101 @@ Anrufprotokoll leer - + history_dialog_delete_all_call_logs_title Supprimer l'historique d'appels ? Anrufprotokoll löschen? - + history_dialog_delete_all_call_logs_message "L'ensemble de votre historique d'appels sera définitivement supprimé." Das gesamte Anrufprotokoll wird dauerhaft gelöscht. - + history_dialog_delete_call_logs_title Supprimer l'historique d'appels ? Anrufprotokoll löschen? - + history_dialog_delete_call_logs_message "L'ensemble de votre historique d'appels avec ce correspondant sera définitivement supprimé." Das Anrufprotokoll mit diesem Benutzer wird dauerhaft gelöscht. - + call_history_call_list_title "Appels" Anrufe - + call_history_options_accessible_name Anrufverlaufsoptionen - - + + menu_delete_history "Supprimer l'historique" Verlauf löschen - + call_history_list_options_accessible_name Call history options Anrufverlaufsoptionen - + create_new_call_accessible_name Create new call Neuen Anruf erstellen - + call_search_in_history "Rechercher un appel" Anruf suchen - + call_forward_to_address_info Anrufe weiterleiten an: - + call_forward_to_address_info_voicemail Anrufbeantworter - + list_filter_no_result_found "Aucun résultat…" Kein Ergebnis gefunden… - + history_list_empty_history "Aucun appel dans votre historique" Anrufprotokoll leer - + return_to_call_history_accessible_name Return to call history Zum Anrufverlauf zurückkehren - + call_action_start_new_call "Nouvel appel" Neuer Anruf - + call_start_group_call_title "Appel de groupe" Gruppenanruf @@ -1344,7 +1368,7 @@ - + call_action_start_group_call "Lancer" Starten @@ -1360,74 +1384,74 @@ Erforderlich - - - + + + information_popup_error_title Fehler - + group_call_error_must_have_name "Un nom doit être donné à l'appel de groupe Es muss ein Name für den Anruf angegeben werden - + group_call_error_not_connected "Vous n'etes pas connecté" Sie sind nicht verbunden - + menu_see_existing_contact "Show contact" Kontakt anzeigen - + menu_add_address_to_contacts "Add to contacts" Zu Kontakten hinzufügen - + menu_copy_sip_address "Copier l'adresse SIP" SIP-Adresse kopieren - + sip_address_copied_to_clipboard_toast Adresse copiée SIP-Adresse kopiert - + sip_address_copied_to_clipboard_message L'adresse a été copié dans le presse_papiers Die Adresse wurde in die Zwischenablage kopiert - + sip_address_copy_to_clipboard_error "Erreur lors de la copie de l'adresse" Fehler beim Kopieren der Adresse - + notification_missed_call_title "Appel manqué" Verpasster Anruf - + call_outgoing "Appel sortant" Ausgehender Anruf - + call_audio_incoming "Appel entrant" Eingehender Anruf @@ -2540,91 +2564,91 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! Keine Chats - + info_popup_error_title Fehler - + info_popup_chatroom_creation_failed Chat room creation failed ! - + loading_popup_chatroom_creation_pending_message Chat room is being created... - + chat_dialog_delete_chat_title Supprimer la conversation ? Chat löschen? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." Dieser Chat und alle seine Nachrichten werden gelöscht. - + chat_list_title "Conversations" Konversationen - + menu_mark_all_as_read "mark all as read" Alle als gelesen markieren - + chat_search_in_history "Rechercher une conversation" Chat suchen - + list_filter_no_result_found "Aucun résultat…" Kein Ergebnis… - + chat_list_empty_history "Aucune conversation dans votre historique" Keine Chats in der Historie - + chat_action_start_new_chat "New chat" Neuer Chat - + chat_start_group_chat_title "Nouveau groupe" Neuer Gruppenchat - + chat_action_start_group_chat "Créer" Erstellen - - - + + + information_popup_error_title Fehler - + information_popup_chat_creation_failed_message "La création a échoué" Erstellen fehlgeschlagen @@ -2635,25 +2659,25 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! Der Codec konnte nicht installiert werden. - + group_chat_error_must_have_name "Un nom doit être donné au groupe Für den Gruppenchat muss ein Name festgelegt werden - + group_chat_error_no_participant "Please select at least one participant - + group_call_error_not_connected "Vous n'etes pas connecté" Sie sind nicht verbunden - + chat_creation_in_progress Creation de la conversation en cours … Chat-Erstellung ausstehend… @@ -3006,149 +3030,149 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! Zurzeit keine Kontakte - + contact_new_title "Nouveau contact" Neuer Kontakt - + create Erstellen - + contact_edit_title "Modifier contact" Kontakt bearbeiten - + save Speichern - + contact_dialog_delete_title Supprimer %1 ?" %1 löschen? - + contact_dialog_delete_message Ce contact sera définitivement supprimé. Dieser Kontakt wird dauerhaft gelöscht. - + contact_deleted_toast "Contact supprimé" Kontakt gelöscht - + contact_deleted_message "%1 a été supprimé" %1 wurde gelöscht - + contact_dialog_devices_trust_popup_title "Augmenter la confiance" Vertrauenslevel erhöhen - + contact_dialog_devices_trust_popup_message "Pour augmenter le niveau de confiance vous devez appeler les différents appareils de votre contact et valider un code.<br><br>Vous êtes sur le point d’appeler “%1” voulez vous continuer ?" Um das Vertrauenslevel zu erhöhen müssen Sie Ihren Kontakt anrufen und einen Code bestätigen.<br><br>Sie sind dabei, "%1" anzurufen. Möchten Sie fortfahren? - + popup_do_not_show_again Ne plus afficher Nicht mehr anzeigen - + cancel Abbrechen - + dialog_call "Appeler" Anrufen - + contact_dialog_devices_trust_help_title "Niveau de confiance" Vertrauenslevel - + contact_dialog_devices_trust_help_message "Vérifiez les appareils de votre contact pour confirmer que vos communications seront sécurisées et sans compromission. <br>Quand tous seront vérifiés, vous atteindrez le niveau de confiance maximal." Überprüfen Sie die Geräte Ihres Kontakts um sicherzustellen, dass Ihre Kommunikation sicher und unkompromittiert ist. Wenn alle Geräte überprüft sind, erreichen Sie das höchste Vertrauenslevel. - + dialog_ok "Ok" Ok - + bottom_navigation_contacts_label "Contacts" Kontakte - + create_contact_accessible_name Create new contact Neuen Kontakt erstellen - + search_bar_look_for_contact_text Rechercher un contact Kontakt suchen - + list_filter_no_result_found Aucun résultat… Kein Ergebnis… - + contact_list_empty Aucun contact pour le moment Zurzeit keine Kontakte - + more_info_accessible_name More info %1 Weitere Informationen %1 - + expand_accessible_name Expand %1 Vergrößern %1 - + shrink_accessible_name Shrink %1 Verkleinern %1 - - + + contact_details_edit Edit ---------- @@ -3156,19 +3180,19 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! Bearbeiten - + contact_call_action "Appel" Anrufen - + contact_message_action "Message" Nachricht - + contact_video_call_action "Appel vidéo" Videoanruf @@ -3194,133 +3218,133 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! Offline - + contact_details_numbers_and_addresses_title "Coordonnées" Kontaktinformationen - + call_adress_accessible_name Call address %1 Adresse %1 anrufen - + contact_details_company_name "Société :" Unternehmen : - + contact_details_job_title "Poste :" Beruf : - + contact_details_medias_title "Medias" Medien - - + + contact_details_medias_subtitle "Afficher les medias partagés" Geteilte Medien anzeigen - + contact_details_trust_title "Confiance" Vertrauen - + contact_dialog_devices_trust_title "Niveau de confiance - Appareils vérifiés" Vertrauenslevel - Verifizierte Geräte - + contact_details_no_device_found "Aucun appareil" Kein Gerät - + contact_device_without_name "Appareil inconnu" Unbekanntes Gerät - + contact_make_call_check_device_trust "Vérifier" Überprüfen - + verify_device_accessible_name Verify %1 device Gerät %1 verifizieren - + contact_details_actions_title "Autres actions" Weitere Aktionen - + contact_details_remove_from_favourites "Retirer des favoris" Aus Favoriten entfernen - + contact_details_add_to_favourites "Ajouter aux favoris" Zu Favoriten hinzufügen - + contact_details_share "Partager" Teilen - + information_popup_error_title Fehler - + contact_details_share_error_mesage "La création du fichier vcard a échoué" VCard-Erstellung fehlgeschlagen - + contact_details_share_success_title "VCard créée" VCard erstellt - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard wurde in %1 gespeichert - + contact_details_share_email_title "Partage de contact" Kontakt teilen - + contact_details_delete "Supprimer ce contact" Kontakt löschen @@ -4364,144 +4388,144 @@ Ablauf: %1 MainLayout - + bottom_navigation_calls_label "Appels" Anrufe - + open_calls_page_accessible_name "Open calls page" Anrufe öffnen - + bottom_navigation_contacts_label "Contacts" Kontakte - + open_contacts_page_accessible_name "Open contacts page" Kontakte öffnen - + bottom_navigation_conversations_label "Conversations" Konversationen - + open_conversations_page_accessible_name "Open conversations page" Chats öffnen - + bottom_navigation_meetings_label "Réunions" Besprechungen - + open_contact_page_accessible_name "Open meetings page" Meetings öffnen - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Kontakt suchen, %1 anrufen - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" oder eine Nachricht senden … - + do_not_disturb_accessible_name "Do not disturb" Nicht stören - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Nicht stören deaktivieren - + information_popup_error_title Fehler - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." Die Voicemail-URI ist nicht definiert. - + account_list_accessible_name "Account list" Kontoliste - + application_options_accessible_name "Application options" App-Einstellungen - + drawer_menu_manage_account Mon compte Mein Konto - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Nicht stören aktivieren - + settings_title Einstellungen - + recordings_title "Enregistrements" Aufnahmen - + help_title "Aide" Hilfe - + help_quit_title "Quitter l'application" App beenden - + quit_app_question "Quitter %1 ?" %1 beenden? - + drawer_menu_add_account "Ajouter un compte" Konto hinzufügen @@ -4669,158 +4693,158 @@ Ablauf: %1 Keine Besprechungen - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Möchten Sie diese Besprechung absagen und löschen? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Möchten Sie diese Besprechung löschen? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Absagen und löschen - + meeting_schedule_delete_only_action "Supprimer seulement" Nur löschen - + meeting_schedule_delete_action "Supprimer" Löschen - + back_action Retour Zurück - + meetings_list_title Réunions Besprechungen - + meetings_search_hint "Rechercher une réunion" Besprechung suchen - + list_filter_no_result_found "Aucun résultat…" Kein Ergebnis… - + meetings_empty_list "Aucune réunion" Keine Besprechungen - - + + meeting_schedule_title "Nouvelle réunion" Neue Besprechung - + create Erstellen - - - - - - + + + + + + information_popup_error_title Fehler - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Bitte Titel bestimmen und mindestens einen Teilnehmer auswählen - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" Das Ende der Besprechung muss nach dem Beginn liegen - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Besprechung wird erstellt… - + meeting_info_created_toast "Réunion planifiée avec succès" Besprechung erfolgreich erstellt - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Besprechung konnte nicht erstellt werden! - + save Speichern - - + + saved "Enregistré" Gespeichert - + meeting_info_updated_toast "Réunion mise à jour" Besprechung geändert - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Bersprechung wird geändert… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Besprechung konnte nicht geändert werden! - + meeting_schedule_add_participants_title "Ajouter des participants" Teilnehmer hinzufügen - + meeting_schedule_add_participants_apply Anwenden @@ -4829,7 +4853,7 @@ Ablauf: %1 Hinzufügen - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4838,31 +4862,31 @@ Ablauf: %1 - + meeting_info_delete "Supprimer la réunion" Besprechung löschen - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Besprechungs-URI kopiert - + meeting_schedule_timezone_title "Fuseau horaire" Zeitzone - + meeting_info_organizer_label "Organisateur" Organisator - + meeting_info_join_title "Rejoindre la réunion" Besprechung beitreten diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index 25239a1d9..31983ac25 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -1007,11 +1007,35 @@ CallHistoryListView - + call_name_accessible_button Call %1 Call %1 + + + call_history_entry_accessible_name + %1 - %2 - %3 - right arrow for call-back button + %1 - %2 - %3 - right arrow for call-back button + + + + notification_missed_call_title + "Appel manqué" + Missed call + + + + call_outgoing + "Appel sortant" + Outgoing call + + + + call_audio_incoming + "Appel entrant" + Incoming call + CallLayout @@ -1205,12 +1229,12 @@ CallPage - + call_forward_to_address_info Forward calls to: - + call_forward_to_address_info_voicemail Voicemail @@ -1227,170 +1251,170 @@ Empty call history - + history_dialog_delete_all_call_logs_title Supprimer l'historique d'appels ? Delete call history ? - + history_dialog_delete_all_call_logs_message "L'ensemble de votre historique d'appels sera définitivement supprimé." Call history will be permanently deleted. - + history_dialog_delete_call_logs_title Supprimer l'historique d'appels ? Delete call history ? - + history_dialog_delete_call_logs_message "L'ensemble de votre historique d'appels avec ce correspondant sera définitivement supprimé." Call history with this user will be permanently deleted. - + call_history_call_list_title "Appels" Calls - + call_history_options_accessible_name Call history options - - + + menu_delete_history "Supprimer l'historique" Delete history - + call_history_list_options_accessible_name Call history options Call history options - + create_new_call_accessible_name Create new call Create new call - + call_search_in_history "Rechercher un appel" Find call - + list_filter_no_result_found "Aucun résultat…" No result found… - + history_list_empty_history "Aucun appel dans votre historique" No call in history - + return_to_call_history_accessible_name Return to call history Return to call history - + call_action_start_new_call "Nouvel appel" New call - + call_start_group_call_title "Appel de groupe" Group call - + call_action_start_group_call "Lancer" Start - - - + + + information_popup_error_title Error - + group_call_error_must_have_name "Un nom doit être donné à l'appel de groupe A name must be provided for the call - + group_call_error_not_connected "Vous n'etes pas connecté" You are not connected - + menu_see_existing_contact "Show contact" Show contact - + menu_add_address_to_contacts "Add to contacts" Add to contacts - + menu_copy_sip_address "Copier l'adresse SIP" Copy SIP address - + sip_address_copied_to_clipboard_toast Adresse copiée SIP address copied - + sip_address_copied_to_clipboard_message L'adresse a été copié dans le presse_papiers The address has been copied to the clipboard - + sip_address_copy_to_clipboard_error "Erreur lors de la copie de l'adresse" Error copying address - + notification_missed_call_title "Appel manqué" Missed call - + call_outgoing "Appel sortant" Outgoing call - + call_audio_incoming "Appel entrant" Incoming call @@ -2498,115 +2522,115 @@ Only your correspondent can decrypt them. No conversation - + info_popup_error_title Error - + info_popup_chatroom_creation_failed Chat room creation failed ! Chat room creation failed ! - + loading_popup_chatroom_creation_pending_message Chat room is being created... Chat room is being created... - + chat_dialog_delete_chat_title Supprimer la conversation ? Delete conversation ? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." This conversation and all its messages will be deleted. - + chat_list_title "Conversations" Conversations - + menu_mark_all_as_read "mark all as read" Mark all as read - + chat_search_in_history "Rechercher une conversation" Search for a chat - + list_filter_no_result_found "Aucun résultat…" No result… - + chat_list_empty_history "Aucune conversation dans votre historique" No conversation in history - + chat_action_start_new_chat "New chat" New conversation - + chat_start_group_chat_title "Nouveau groupe" New group - + chat_action_start_group_chat "Créer" Create - - - + + + information_popup_error_title Error - + information_popup_chat_creation_failed_message "La création a échoué" Creation failed - + group_chat_error_must_have_name "Un nom doit être donné au groupe A name must be set for the group - + group_chat_error_no_participant "Please select at least one participant Please select at least one participant - + group_call_error_not_connected "Vous n'etes pas connecté" You are not connected - + chat_creation_in_progress Creation de la conversation en cours … Chat creation pending… @@ -2934,149 +2958,149 @@ Only your correspondent can decrypt them. No contact at the moment - + contact_new_title "Nouveau contact" New contact - + create Create - + contact_edit_title "Modifier contact" Edit contact - + save Save - + contact_dialog_delete_title Supprimer %1 ?" Delete %1? - + contact_dialog_delete_message Ce contact sera définitivement supprimé. This contact will be permanently deleted. - + contact_deleted_toast "Contact supprimé" Contact deleted - + contact_deleted_message "%1 a été supprimé" %1 has been deleted - + contact_dialog_devices_trust_popup_title "Augmenter la confiance" Increase trust level - + contact_dialog_devices_trust_popup_message "Pour augmenter le niveau de confiance vous devez appeler les différents appareils de votre contact et valider un code.<br><br>Vous êtes sur le point d’appeler “%1” voulez vous continuer ?" To increase trust level you must call your contact's devices and validate a code.<br><br>You are about to call "%1" do you want to continue? - + popup_do_not_show_again Ne plus afficher Do not show again - + cancel Cancel - + dialog_call "Appeler" Call - + contact_dialog_devices_trust_help_title "Niveau de confiance" Trust level - + contact_dialog_devices_trust_help_message "Vérifiez les appareils de votre contact pour confirmer que vos communications seront sécurisées et sans compromission. <br>Quand tous seront vérifiés, vous atteindrez le niveau de confiance maximal." Verify your contact's devices to confirm that your communications will be secure and uncompromised. When all are verified, you will reach the maximum trust level. - + dialog_ok "Ok" Ok - + bottom_navigation_contacts_label "Contacts" Contacts - + search_bar_look_for_contact_text Rechercher un contact Find contact - + list_filter_no_result_found Aucun résultat… No result… - + contact_list_empty Aucun contact pour le moment No contact at the moment - + expand_accessible_name Expand %1 Expand %1 - + shrink_accessible_name Shrink %1 Shrink %1 - + create_contact_accessible_name Create new contact Create new contact - + more_info_accessible_name More info %1 More info %1 - - + + contact_details_edit Edit ---------- @@ -3084,151 +3108,151 @@ Only your correspondent can decrypt them. Edit - + contact_call_action "Appel" Call - + contact_message_action "Message" Message - + contact_video_call_action "Appel vidéo" Video call - + contact_details_numbers_and_addresses_title "Coordonnées" Contact details - + call_adress_accessible_name Call address %1 Call address %1 - + contact_details_company_name "Société :" Company : - + contact_details_job_title "Poste :" Job : - + contact_details_medias_title "Medias" Medias - - + + contact_details_medias_subtitle "Afficher les medias partagés" Show shared media - + contact_details_trust_title "Confiance" Trust - + contact_dialog_devices_trust_title "Niveau de confiance - Appareils vérifiés" Trust Level - Verified Devices - + contact_details_no_device_found "Aucun appareil" No device - + contact_device_without_name "Appareil inconnu" Unknown device - + contact_make_call_check_device_trust "Vérifier" Verify - + verify_device_accessible_name Verify %1 device Verify %1 device - + contact_details_actions_title "Autres actions" Other actions - + contact_details_remove_from_favourites "Retirer des favoris" Remove from favorites - + contact_details_add_to_favourites "Ajouter aux favoris" Add to favorites - + contact_details_share "Partager" Share - + information_popup_error_title Error - + contact_details_share_error_mesage "La création du fichier vcard a échoué" VCard creation failed - + contact_details_share_success_title "VCard créée" VCard created - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard has been saved in %1 - + contact_details_share_email_title "Partage de contact" Share contact - + contact_details_delete "Supprimer ce contact" Delete contact @@ -4262,144 +4286,144 @@ Expiration : %1 MainLayout - + bottom_navigation_calls_label "Appels" Calls - + open_calls_page_accessible_name "Open calls page" Open calls pages - + bottom_navigation_contacts_label "Contacts" Contacts - + open_contacts_page_accessible_name "Open contacts page" Open contacts page - + bottom_navigation_conversations_label "Conversations" Conversations - + open_conversations_page_accessible_name "Open conversations page" Open conversations page - + bottom_navigation_meetings_label "Réunions" Meetings - + open_contact_page_accessible_name "Open meetings page" Open meetings page - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Find contact, call %1 - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" or send message … - + do_not_disturb_accessible_name "Do not disturb" Do not disturb - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Disable do not disturb - + information_popup_error_title Error - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." The voicemail URI is not defined. - + account_list_accessible_name "Account list" account list - + application_options_accessible_name "Application options" Application options - + drawer_menu_manage_account Mon compte My account - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Enable do not disturb - + settings_title Settings - + recordings_title "Enregistrements" Records - + help_title "Aide" Help - + help_quit_title "Quitter l'application" Quit the app - + quit_app_question "Quitter %1 ?" Quit %1 ? - + drawer_menu_add_account "Ajouter un compte" Add an account @@ -4567,163 +4591,163 @@ Expiration : %1 No meeting - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Would you like to cancel and delete this meeting? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Would you like to delete this meeting? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Cancel and delete - + meeting_schedule_delete_only_action "Supprimer seulement" Delete only - + meeting_schedule_delete_action "Supprimer" Delete - + back_action Retour Back - + meetings_list_title Réunions Meetings - + meetings_search_hint "Rechercher une réunion" Find meeting - + list_filter_no_result_found "Aucun résultat…" No result… - + meetings_empty_list "Aucune réunion" No meeting - - + + meeting_schedule_title "Nouvelle réunion" New meeting - + create Create - - - - - - + + + + + + information_popup_error_title Error - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Please fill the title and select at least one participant - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" The end of the conference must be more recent than its beginning - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Creation in progress… - + meeting_info_created_toast "Réunion planifiée avec succès" Meeting successfully created - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Failed to create meeting! - + save Save - - + + saved "Enregistré" Saved - + meeting_info_updated_toast "Réunion mise à jour" Meeting updated - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Meeting update in progress… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Failed to update meeting ! - + meeting_schedule_add_participants_title "Ajouter des participants" Add participants - + meeting_schedule_add_participants_apply Apply - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4732,31 +4756,31 @@ Expiration : %1 - + meeting_info_delete "Supprimer la réunion" Delete meeting - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Meeting URI copied - + meeting_schedule_timezone_title "Fuseau horaire" Timezone - + meeting_info_organizer_label "Organisateur" Organizer - + meeting_info_join_title "Rejoindre la réunion" Join meeting diff --git a/Linphone/data/languages/fr.ts b/Linphone/data/languages/fr.ts index d2f971af3..9b6b1c716 100644 --- a/Linphone/data/languages/fr.ts +++ b/Linphone/data/languages/fr.ts @@ -1002,11 +1002,35 @@ CallHistoryListView - + call_name_accessible_button Call %1 Appeler %1 + + + call_history_entry_accessible_name + %1 - %2 - %3 - right arrow for call-back button + %1 - %2 - %3 - flèche droite pour bouton de rappel + + + + notification_missed_call_title + "Appel manqué" + Appel manqué + + + + call_outgoing + "Appel sortant" + Appel sortant + + + + call_audio_incoming + "Appel entrant" + Appel entrant + CallLayout @@ -1212,180 +1236,180 @@ Historique d'appel vide - + history_dialog_delete_all_call_logs_title Supprimer l'historique d'appels ? Supprimer l'historique d'appels ? - + history_dialog_delete_all_call_logs_message "L'ensemble de votre historique d'appels sera définitivement supprimé." L'ensemble de votre historique d'appels sera définitivement supprimé. - + history_dialog_delete_call_logs_title Supprimer l'historique d'appels ? Supprimer l'historique d'appels ? - + history_dialog_delete_call_logs_message "L'ensemble de votre historique d'appels avec ce correspondant sera définitivement supprimé." L'ensemble de votre historique d'appels avec ce correspondant sera définitivement supprimé. - + call_history_call_list_title "Appels" Appels - + call_history_options_accessible_name Options de l' - - + + menu_delete_history "Supprimer l'historique" Supprimer l'historique - + call_history_list_options_accessible_name Call history options Options de la liste de l'historique d'appel - + create_new_call_accessible_name Create new call Créer un nouvel appel - + call_search_in_history "Rechercher un appel" Rechercher un appel - + call_forward_to_address_info Transférer l'appel à : - + call_forward_to_address_info_voicemail Boîte vocale - + list_filter_no_result_found "Aucun résultat…" Aucun résultat… - + history_list_empty_history "Aucun appel dans votre historique" Aucun appel dans votre historique - + return_to_call_history_accessible_name Return to call history Retourner à l'historique d'appels - + call_action_start_new_call "Nouvel appel" Nouvel appel - + call_start_group_call_title "Appel de groupe" Appel de groupe - + call_action_start_group_call "Lancer" Lancer - - - + + + information_popup_error_title Erreur - + group_call_error_must_have_name "Un nom doit être donné à l'appel de groupe Un nom doit être donné à l'appel de groupe - + group_call_error_not_connected "Vous n'etes pas connecté" Vous n'etes pas connecté - + menu_see_existing_contact "Show contact" Voir le contact - + menu_add_address_to_contacts "Add to contacts" Ajouter aux contacts - + menu_copy_sip_address "Copier l'adresse SIP" Copier l'adresse SIP - + sip_address_copied_to_clipboard_toast Adresse copiée Adresse copiée - + sip_address_copied_to_clipboard_message L'adresse a été copié dans le presse_papiers L'adresse a été copié dans le presse-papiers - + sip_address_copy_to_clipboard_error "Erreur lors de la copie de l'adresse" Erreur lors de la copie de l'adresse - + notification_missed_call_title "Appel manqué" Appel manqué - + call_outgoing "Appel sortant" Appel sortant - + call_audio_incoming "Appel entrant" Appel entrant @@ -2493,115 +2517,115 @@ en bout. Seul votre correspondant peut les déchiffrer. Aucune conversation - + info_popup_error_title Erreur - + info_popup_chatroom_creation_failed Chat room creation failed ! La création de la conversation a échoué ! - + loading_popup_chatroom_creation_pending_message Chat room is being created... Création de la conversation en cours... - + chat_dialog_delete_chat_title Supprimer la conversation ? Supprimer la conversation ? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." La conversation et tous ses messages seront supprimés. - + chat_list_title "Conversations" Conversations - + menu_mark_all_as_read "mark all as read" Tout marquer comme lu - + chat_search_in_history "Rechercher une conversation" Rechercher une conversation - + list_filter_no_result_found "Aucun résultat…" Aucun résultat… - + chat_list_empty_history "Aucune conversation dans votre historique" Aucune conversation dans votre historique - + chat_action_start_new_chat "New chat" Nouvelle conversation - + chat_start_group_chat_title "Nouveau groupe" Nouveau groupe - + chat_action_start_group_chat "Créer" Créer - - - + + + information_popup_error_title Erreur - + information_popup_chat_creation_failed_message "La création a échoué" La création a échoué - + group_chat_error_must_have_name "Un nom doit être donné au groupe Un nom doit être donné au groupe - + group_chat_error_no_participant "Please select at least one participant Veuillez sélectionner au moins un participant - + group_call_error_not_connected "Vous n'etes pas connecté" Vous n'êtes pas connecté - + chat_creation_in_progress Creation de la conversation en cours … Création de la conversation en cours… @@ -2929,149 +2953,149 @@ en bout. Seul votre correspondant peut les déchiffrer. Aucun contact pour le moment - + contact_new_title "Nouveau contact" Nouveau contact - + create Créer - + contact_edit_title "Modifier contact" Modifier contact - + save Enregistrer - + contact_dialog_delete_title Supprimer %1 ?" Supprimer %1 ? - + contact_dialog_delete_message Ce contact sera définitivement supprimé. Ce contact sera définitivement supprimé. - + contact_deleted_toast "Contact supprimé" Contact supprimé - + contact_deleted_message "%1 a été supprimé" %1 a été supprimé - + contact_dialog_devices_trust_popup_title "Augmenter la confiance" Augmenter la confiance - + contact_dialog_devices_trust_popup_message "Pour augmenter le niveau de confiance vous devez appeler les différents appareils de votre contact et valider un code.<br><br>Vous êtes sur le point d’appeler “%1” voulez vous continuer ?" Pour augmenter le niveau de confiance vous devez appeler les différents appareils de votre contact et valider un code.<br><br>Vous êtes sur le point d’appeler “%1” voulez vous continuer ? - + popup_do_not_show_again Ne plus afficher Ne plus afficher - + cancel Annuler - + dialog_call "Appeler" Appeler - + contact_dialog_devices_trust_help_title "Niveau de confiance" Niveau de confiance - + contact_dialog_devices_trust_help_message "Vérifiez les appareils de votre contact pour confirmer que vos communications seront sécurisées et sans compromission. <br>Quand tous seront vérifiés, vous atteindrez le niveau de confiance maximal." Vérifiez les appareils de votre contact pour confirmer que vos communications seront sécurisées et sans compromission. <br>Quand tous seront vérifiés, vous atteindrez le niveau de confiance maximal. - + dialog_ok "Ok" Ok - + bottom_navigation_contacts_label "Contacts" Contacts - + search_bar_look_for_contact_text Rechercher un contact Rechercher un contact - + list_filter_no_result_found Aucun résultat… Aucun résultat… - + contact_list_empty Aucun contact pour le moment Aucun contact pour le moment - + expand_accessible_name Expand %1 Étendre %1 - + shrink_accessible_name Shrink %1 Réduire %1 - + create_contact_accessible_name Create new contact Créer un nouveau contact - + more_info_accessible_name More info %1 Plus d'information %1 - - + + contact_details_edit Edit ---------- @@ -3079,151 +3103,151 @@ en bout. Seul votre correspondant peut les déchiffrer. Éditer - + contact_call_action "Appel" Appel - + contact_message_action "Message" Message - + contact_video_call_action "Appel vidéo" Appel vidéo - + contact_details_numbers_and_addresses_title "Coordonnées" Coordonnées - + call_adress_accessible_name Call address %1 Appeller l'adresse %1 - + contact_details_company_name "Société :" Société : - + contact_details_job_title "Poste :" Poste : - + contact_details_medias_title "Medias" Medias - - + + contact_details_medias_subtitle "Afficher les medias partagés" Afficher les medias partagés - + contact_details_trust_title "Confiance" Confiance - + contact_dialog_devices_trust_title "Niveau de confiance - Appareils vérifiés" Niveau de confiance - Appareils vérifiés - + contact_details_no_device_found "Aucun appareil" Aucun appareil - + contact_device_without_name "Appareil inconnu" Appareil inconnu - + contact_make_call_check_device_trust "Vérifier" Vérifier - + verify_device_accessible_name Verify %1 device Vérifier l'appareil %1 - + contact_details_actions_title "Autres actions" Autres actions - + contact_details_remove_from_favourites "Retirer des favoris" Retirer des favoris - + contact_details_add_to_favourites "Ajouter aux favoris" Ajouter aux favoris - + contact_details_share "Partager" Partager - + information_popup_error_title Erreur - + contact_details_share_error_mesage "La création du fichier vcard a échoué" La création du fichier vcard a échoué - + contact_details_share_success_title "VCard créée" VCard créée - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard du contact enregistrée dans %1 - + contact_details_share_email_title "Partage de contact" Partage de contact - + contact_details_delete "Supprimer ce contact" Supprimer ce contact @@ -4257,144 +4281,144 @@ Expiration : %1 MainLayout - + bottom_navigation_calls_label "Appels" Appels - + open_calls_page_accessible_name "Open calls page" Ouvrir la page des appels - + bottom_navigation_contacts_label "Contacts" Contacts - + open_contacts_page_accessible_name "Open contacts page" Ouvrir la page des contacts - + bottom_navigation_conversations_label "Conversations" Conversations - + open_conversations_page_accessible_name "Open conversations page" Ouvrir la page des conversations - + bottom_navigation_meetings_label "Réunions" Réunions - + open_contact_page_accessible_name "Open meetings page" Ouvrir la page des réunions - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Rechercher un contact, appeler %1 - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" ou envoyer un message … - + do_not_disturb_accessible_name "Do not disturb" Ne pas déranger - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Désactiver ne pas déranger - + information_popup_error_title Erreur - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." L'URI de messagerie vocale n'est pas définie. - + account_list_accessible_name "Account list" liste des comptes - + application_options_accessible_name "Application options" Options de l'application - + drawer_menu_manage_account Mon compte Mon compte - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Activer ne pas déranger - + settings_title Paramètres - + recordings_title "Enregistrements" Enregistrements - + help_title "Aide" Aide - + help_quit_title "Quitter l'application" Quitter l'application - + quit_app_question "Quitter %1 ?" Quitter %1 ? - + drawer_menu_add_account "Ajouter un compte" Ajouter un compte @@ -4562,163 +4586,163 @@ Expiration : %1 Aucune réunion - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Souhaitez-vous annuler et supprimer cette réunion ? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Souhaitez-vous supprimer cette réunion ? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Annuler et supprimer - + meeting_schedule_delete_only_action "Supprimer seulement" Supprimer seulement - + meeting_schedule_delete_action "Supprimer" Supprimer - + back_action Retour Retour - + meetings_list_title Réunions Réunions - + meetings_search_hint "Rechercher une réunion" Rechercher une réunion - + list_filter_no_result_found "Aucun résultat…" Aucun résultat… - + meetings_empty_list "Aucune réunion" Aucune réunion - - + + meeting_schedule_title "Nouvelle réunion" Nouvelle réunion - + create Créer - - - - - - + + + + + + information_popup_error_title Erreur - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Veuillez saisir un titre et sélectionner au moins un participant - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" La fin de la conférence doit être plus récente que son début - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Création de la réunion en cours… - + meeting_info_created_toast "Réunion planifiée avec succès" Réunion planifiée avec succès - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Échec de création de la réunion ! - + save Enregistrer - - + + saved "Enregistré" Enregistré - + meeting_info_updated_toast "Réunion mise à jour" Réunion mise à jour - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Modification de la réunion en cours… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Échec de la modification de la réunion ! - + meeting_schedule_add_participants_title "Ajouter des participants" Ajouter des participants - + meeting_schedule_add_participants_apply Appliquer - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4727,31 +4751,31 @@ Expiration : %1 - + meeting_info_delete "Supprimer la réunion" Supprimer la réunion - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Adresse de la réunion copiée - + meeting_schedule_timezone_title "Fuseau horaire" Fuseau horaire - + meeting_info_organizer_label "Organisateur" Organisateur - + meeting_info_join_title "Rejoindre la réunion" Rejoindre la réunion diff --git a/Linphone/view/Control/Display/Call/CallHistoryListView.qml b/Linphone/view/Control/Display/Call/CallHistoryListView.qml index 4b2c1ab3b..a6dfe8205 100644 --- a/Linphone/view/Control/Display/Call/CallHistoryListView.qml +++ b/Linphone/view/Control/Display/Call/CallHistoryListView.qml @@ -5,17 +5,22 @@ import QtQuick.Controls.Basic as Control import Linphone import UtilsCpp import SettingsCpp +import CustomControls 1.0 import "qrc:/qt/qml/Linphone/view/Style/buttonStyle.js" as ButtonStyle import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils ListView { id: mainItem clip: true + keyNavigationEnabled: false // We will reimplement the keyNavigation + activeFocusOnTab: true property SearchBar searchBar property bool loading: false property string searchText: searchBar?.text property real busyIndicatorSize: Utils.getSizeWithScreenRatio(60) + property bool keyboardFocus: FocusHelper.keyboardFocus + property bool lastFocusByNavigationKeyboard: false // Workaround to get the correct focusReason signal resultsReceived @@ -44,7 +49,26 @@ ListView { Keys.onPressed: event => { if (event.key == Qt.Key_Escape) { console.log("Back") - searchBar.forceActiveFocus() + searchBar.forceActiveFocus(Qt.BacktabFocusReason) + event.accepted = true + } + + // Re-implement key navigation to have Qt.TabFocusReason and Qt.BacktabFocusReason instead of Qt.OtherFocusReason when using arrows to navigate in listView + else if (event.key === Qt.Key_Up) { + if(currentIndex === 0){ + searchBar.forceActiveFocus(Qt.BacktabFocusReason) + lastFocusByNavigationKeyboard = false + }else{ + decrementCurrentIndex() + currentItem.forceActiveFocus(Qt.BacktabFocusReason) // The focusReason is created by QT later, need to create a workaround + lastFocusByNavigationKeyboard = true + } + event.accepted = true + } + else if(event.key === Qt.Key_Down){ + incrementCurrentIndex() + currentItem.forceActiveFocus(Qt.TabFocusReason) // The focusReason is created by QT later, need to create a workaround + lastFocusByNavigationKeyboard = true event.accepted = true } } @@ -121,6 +145,8 @@ ListView { delegate: FocusScope { width: mainItem.width height: Utils.getSizeWithScreenRatio(56) + Accessible.role: Accessible.ListItem + RowLayout { z: 1 anchors.fill: parent @@ -196,12 +222,14 @@ ListView { } } BigButton { + id: callButton visible: !modelData.core.isConference || !SettingsCpp.disableMeetingsFeature style: ButtonStyle.noBackground icon.source: AppIcons.phone - focus: true + focus: false activeFocusOnTab: false asynchronous: false + //: Call %1 Accessible.name: qsTr("call_name_accessible_button").arg(historyAvatar.displayNameVal) onClicked: { @@ -214,12 +242,38 @@ ListView { UtilsCpp.createCall(modelData.core.remoteAddress) } } + Keys.onPressed: event => { + if (event.key === Qt.Key_Left){ + backgroundMouseArea.forceActiveFocus(Qt.BacktabFocusReason) + lastFocusByNavigationKeyboard = true; + } + } + onActiveFocusChanged: { + if (!activeFocus) { + console.log("Unfocus button"); + callButton.focus = false // Make sure to be unfocusable (could be when called by forceActiveFocus) + backgroundMouseArea.focus = true + } + } } } MouseArea { + id: backgroundMouseArea hoverEnabled: true anchors.fill: parent focus: true + property bool keyboardFocus: FocusHelper.keyboardFocus || activeFocus && lastFocusByNavigationKeyboard + + //: %1 - %2 - %3 - right arrow for call-back button + Accessible.name: qsTr("call_history_entry_accessible_name").arg( + //: "Appel manqué" + modelData.core.status === LinphoneEnums.CallStatus.Missed ? qsTr("notification_missed_call_title") + //: "Appel sortant" + : modelData.core.isOutgoing ? qsTr("call_outgoing") + //: "Appel entrant" + : qsTr("call_audio_incoming") + ).arg(historyAvatar.displayNameVal).arg(UtilsCpp.formatDate(modelData.core.date)) + onContainsMouseChanged: { if (containsMouse) mainItem.lastMouseContainsIndex = index @@ -232,12 +286,20 @@ ListView { radius: Utils.getSizeWithScreenRatio(8) color: mainItem.currentIndex === index ? DefaultStyle.main2_200 : DefaultStyle.main2_100 + border.color: backgroundMouseArea.keyboardFocus ? DefaultStyle.main2_900 : "transparent" + border.width: backgroundMouseArea.keyboardFocus ? Utils.getSizeWithScreenRatio(3) : 0 visible: mainItem.lastMouseContainsIndex === index || mainItem.currentIndex === index } onPressed: { mainItem.currentIndex = model.index mainItem.forceActiveFocus() + mainItem.lastFocusByNavigationKeyboard = false + } + Keys.onPressed: event => { + if(event.key === Qt.Key_Right){ + callButton.forceActiveFocus(Qt.TabFocusReason) + } } } }