Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
QuentinArguillere
f680e83299 Toast translations 2024-12-05 14:58:06 +01:00
QuentinArguillere
9d5e0765d4 Update call translations 2024-12-02 17:39:51 +01:00
QuentinArguillere
da838a5472 Update Login translations 2024-12-02 17:17:09 +01:00
QuentinArguillere
a386be6094 Fix translation for general terms and privacy policy 2024-12-02 16:57:52 +01:00
11 changed files with 647 additions and 266 deletions

View file

@ -294,8 +294,6 @@ final class CoreContext: ObservableObject {
} else if state == .Cleared { } else if state == .Cleared {
self.loggingInProgress = false self.loggingInProgress = false
self.loggedIn = false self.loggedIn = false
ToastViewModel.shared.toastMessage = "Success_account_logged_out"
ToastViewModel.shared.displayToast = true
} else { } else {
self.loggingInProgress = false self.loggingInProgress = false
self.loggedIn = false self.loggedIn = false

View file

@ -3,36 +3,12 @@
"strings" : { "strings" : {
"" : { "" : {
},
" et " : {
},
" has reacted by " : {
},
" or " : {
},
" to: " : {
}, },
": %@" : { ": %@" : {
},
"." : {
},
"[Forgotten password?](https://subscribe.linphone.org/)" : {
}, },
"[linphone.org/contact](https://linphone.org/contact)" : { "[linphone.org/contact](https://linphone.org/contact)" : {
},
"[nos conditions dutilisation](https://linphone.org/general-terms)" : {
},
"[notre politique de confidentialité](https://linphone.org/privacy-policy)" : {
}, },
"*" : { "*" : {
@ -64,9 +40,6 @@
} }
} }
} }
},
"%lld appels" : {
}, },
"%lld Book (Example)" : { "%lld Book (Example)" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -189,9 +162,6 @@
}, },
"A subject and at least one participant is required to create a meeting" : { "A subject and at least one participant is required to create a meeting" : {
},
"Accept all" : {
}, },
"Account successfully logged out" : { "Account successfully logged out" : {
@ -201,15 +171,9 @@
}, },
"Administrateur" : { "Administrateur" : {
},
"All calls will be removed from the history." : {
}, },
"All contacts" : { "All contacts" : {
},
"All modifications will be canceled." : {
}, },
"assistant_account_create" : { "assistant_account_create" : {
"localizations" : { "localizations" : {
@ -389,6 +353,118 @@
} }
} }
}, },
"assistant_dialog_general_terms_and_privacy_policy_message" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "By continuing, you accept our %@ and %@."
}
},
"fr" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "En continuant, vous acceptez nos %@ et %@."
}
}
}
},
"assistant_dialog_general_terms_and_privacy_policy_title" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "General terms & privacy policy"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Conditions de service & politique de confidentialité"
}
}
}
},
"assistant_dialog_general_terms_label" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "general terms"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "conditions de service"
}
}
}
},
"assistant_dialog_privacy_policy_label" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "privacy policy"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "politique de confidentialité"
}
}
}
},
"assistant_forgotten_password" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Forgotten password?"
}
},
"fr" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Mot de passe oublié ?"
}
}
}
},
"assistant_login_third_party_sip_account" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Use a third party SIP account"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Jai un compte SIP tiers"
}
}
}
},
"assistant_no_account_yet" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No account yet?"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pas encore de compte ?"
}
}
}
},
"assistant_permissions_access_camera_title" : { "assistant_permissions_access_camera_title" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@ -442,13 +518,13 @@
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "**Read contacts:** To display your contacts and find whom is using this app." "value" : "**Read contacts:** To display your contacts and find whom is using %@."
} }
}, },
"fr" : { "fr" : {
"stringUnit" : { "stringUnit" : {
"state" : "needs_review", "state" : "translated",
"value" : "**Contacts :** Pour vous afficher vos contacts et retrouver qui utilise cette application." "value" : "**Contacts :** Pour vous afficher vos contacts et retrouver qui utilise %@."
} }
} }
} }
@ -517,6 +593,22 @@
} }
} }
}, },
"assistant_scan_qr_code" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Scan QR code"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Scanner un QR code"
}
}
}
},
"assistant_web_platform_link" : { "assistant_web_platform_link" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@ -532,9 +624,6 @@
} }
} }
} }
},
"Attended transfer" : {
}, },
"Audio" : { "Audio" : {
@ -629,6 +718,70 @@
}, },
"Call transfer failed!" : { "Call transfer failed!" : {
},
"call_action_attended_transfer" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Attended transfer"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Transfert"
}
}
}
},
"call_action_blind_transfer" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Transfer"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Transfert"
}
}
}
},
"call_action_change_layout" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Layout"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Disposition"
}
}
}
},
"call_action_go_to_calls_list" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calls list"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Liste des appels"
}
}
}
}, },
"call_action_hang_up" : { "call_action_hang_up" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -647,11 +800,113 @@
} }
} }
}, },
"call_audio_device_type_speaker" : { "call_action_pause_call" : {
"localizations" : { "localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pause"
}
},
"fr" : { "fr" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "Mettre en pause"
}
}
}
},
"call_action_record_call" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Record"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Enregistrer"
}
}
}
},
"call_action_resume_call" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Resume"
}
},
"fr" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Reprendre"
}
}
}
},
"call_action_show_dialer" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dialer"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pavé"
}
}
}
},
"call_action_show_messages" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Messages"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Messages"
}
}
}
},
"call_action_start_new_call" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "New call"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nouvel appel"
}
}
}
},
"call_audio_device_type_speaker" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Speaker"
}
},
"fr" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Haut parleur" "value" : "Haut parleur"
} }
} }
@ -861,6 +1116,38 @@
} }
} }
}, },
"call_state_paused" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Paused"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "En pause"
}
}
}
},
"call_state_paused_by_remote" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Paused by remote"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Mis en pause par le correspondant"
}
}
}
},
"call_waiting_for_encryption_info" : { "call_waiting_for_encryption_info" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@ -929,7 +1216,7 @@
} }
} }
}, },
"Calls" : { "calls_count_label" : {
}, },
"calls_list_dialog_merge_into_conference_label" : { "calls_list_dialog_merge_into_conference_label" : {
@ -1003,8 +1290,53 @@
"Close" : { "Close" : {
}, },
"Conditions de service" : { "conference_action_screen_sharing" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Screen share"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Partage décran"
}
}
}
},
"conference_action_show_participants" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Participants"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Participants"
}
}
}
},
"conference_call_empty" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Waiting for other participants…"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "En attente dautres participants…"
}
}
}
}, },
"conference_failed_to_create_group_call_toast" : { "conference_failed_to_create_group_call_toast" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -1023,6 +1355,54 @@
} }
} }
}, },
"conference_participant_joining_text" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Joining…"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "En train de rejoindre…"
}
}
}
},
"conference_participant_paused_text" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Paused"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "En pause"
}
}
}
},
"conference_share_link_title" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Share invitation"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Partager le lien"
}
}
}
},
"Configuration failed" : { "Configuration failed" : {
}, },
@ -1173,6 +1553,12 @@
} }
} }
} }
},
"contact_dialog_delete_message" : {
},
"contact_dialog_delete_title" : {
}, },
"contact_dialog_pick_phone_number_or_sip_address_title" : { "contact_dialog_pick_phone_number_or_sip_address_title" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -1222,6 +1608,9 @@
} }
} }
} }
},
"contact_editor_dialog_abort_confirmation_message" : {
}, },
"contact_editor_first_name" : { "contact_editor_first_name" : {
"localizations" : { "localizations" : {
@ -1318,9 +1707,6 @@
} }
} }
} }
},
"Contacts" : {
}, },
"contacts_list_all_contacts_title" : { "contacts_list_all_contacts_title" : {
"localizations" : { "localizations" : {
@ -1402,6 +1788,9 @@
} }
} }
} }
},
"content_description_save_changes" : {
}, },
"Continue" : { "Continue" : {
"localizations" : { "localizations" : {
@ -2353,21 +2742,25 @@
}, },
"Default mode" : { "Default mode" : {
},
"Delete %@?" : {
},
"Delete all history" : {
},
"Deny all" : {
}, },
"Description" : { "Description" : {
}, },
"Dialer" : { "dialog_accept" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accept"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accepter"
}
}
}
}, },
"dialog_call" : { "dialog_call" : {
"localizations" : { "localizations" : {
@ -2401,6 +2794,22 @@
} }
} }
}, },
"dialog_deny" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Deny"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Refuser"
}
}
}
},
"dialog_ok" : { "dialog_ok" : {
"localizations" : { "localizations" : {
"en" : { "en" : {
@ -2419,18 +2828,9 @@
}, },
"Display Name" : { "Display Name" : {
},
"Disposition" : {
},
"Do you really want to delete all calls history?" : {
}, },
"Domain" : { "Domain" : {
},
"Dont save modifications?" : {
}, },
"drawer_menu_account_connection_status_cleared" : { "drawer_menu_account_connection_status_cleared" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -2555,21 +2955,9 @@
}, },
"Edit Contact" : { "Edit Contact" : {
},
"En attente d'autres participants..." : {
},
"En continuant, vous acceptez ces conditions, " : {
},
"En pause" : {
}, },
"Error" : { "Error" : {
},
"Error Name" : {
}, },
"Etes-vous sûr de vouloir supprimer %@ ?" : { "Etes-vous sûr de vouloir supprimer %@ ?" : {
@ -2685,6 +3073,12 @@
} }
} }
} }
},
"history_dialog_delete_all_call_logs_message" : {
},
"history_dialog_delete_all_call_logs_title" : {
}, },
"history_group_call_start_dialog_set_subject" : { "history_group_call_start_dialog_set_subject" : {
"localizations" : { "localizations" : {
@ -2802,9 +3196,6 @@
}, },
"Invalide URI" : { "Invalide URI" : {
},
"Joining..." : {
}, },
"list_filter_no_result_found" : { "list_filter_no_result_found" : {
"localizations" : { "localizations" : {
@ -2983,6 +3374,12 @@
} }
} }
} }
},
"meeting_schedule_cancel_dialog_message" : {
},
"meeting_schedule_cancel_dialog_title" : {
}, },
"meeting_schedule_description_hint" : { "meeting_schedule_description_hint" : {
"localizations" : { "localizations" : {
@ -3499,9 +3896,6 @@
} }
} }
} }
},
"Messages" : {
}, },
"Mettre en sourdine" : { "Mettre en sourdine" : {
@ -3517,9 +3911,6 @@
}, },
"Network is now reachable again" : { "Network is now reachable again" : {
},
"New call" : {
}, },
"new_conversation_create_group" : { "new_conversation_create_group" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -3580,29 +3971,46 @@
"Non" : { "Non" : {
}, },
"Not account yet?" : { "notification_chat_message_reaction_received" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ reacted by %@ to: %@"
}
}, },
"Ok" : { "fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ a réagi par %@ à : %@"
}
}
}
}, },
"Opération en cours..." : { "Opération en cours..." : {
},
"or" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "or"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "ou"
}
}
}
}, },
"Oui" : { "Oui" : {
},
"Partage d'écran" : {
},
"Partager le lien" : {
}, },
"Participant actif" : { "Participant actif" : {
},
"Participants" : {
}, },
"password" : { "password" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -3616,19 +4024,13 @@
"fr" : { "fr" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "Password en FR" "value" : "Mot de passe"
} }
} }
} }
},
"Pause" : {
}, },
"Paused" : { "Paused" : {
},
"Paused by remote" : {
}, },
"Personnalize your profil mode" : { "Personnalize your profil mode" : {
@ -3663,9 +4065,6 @@
}, },
"Réactiver les notifications" : { "Réactiver les notifications" : {
},
"Record" : {
}, },
"recordings_title" : { "recordings_title" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -3685,6 +4084,7 @@
} }
}, },
"Register" : { "Register" : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"fr" : { "fr" : {
"stringUnit" : { "stringUnit" : {
@ -3693,15 +4093,9 @@
} }
} }
} }
},
"Resume" : {
}, },
"Resuming" : { "Resuming" : {
},
"Scan QR code" : {
}, },
"Select %@ %@" : { "Select %@ %@" : {
"localizations" : { "localizations" : {
@ -3712,15 +4106,9 @@
} }
} }
} }
},
"Send cancellation notifications" : {
}, },
"Send Logs" : { "Send Logs" : {
},
"Send notification to participants ?" : {
}, },
"settings_title" : { "settings_title" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -3784,21 +4172,12 @@
}, },
"Temp Help" : { "Temp Help" : {
},
"The meeting will be cancelled" : {
}, },
"The user name or password is incorrects" : { "The user name or password is incorrects" : {
},
"This contact will be deleted definitively." : {
}, },
"TLS" : { "TLS" : {
},
"Transfer" : {
}, },
"Transfer call to" : { "Transfer call to" : {
@ -3817,9 +4196,6 @@
}, },
"Use a SIP account" : { "Use a SIP account" : {
},
"Use SIP Account" : {
}, },
"username" : { "username" : {
"extractionState" : "manual", "extractionState" : "manual",
@ -3833,7 +4209,7 @@
"fr" : { "fr" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "Username en FR" "value" : "Nom dutilisateur"
} }
} }
} }

View file

@ -167,7 +167,7 @@ struct LoginFragment: View {
.padding(.bottom) .padding(.bottom)
HStack { HStack {
Text("[Forgotten password?](https://subscribe.linphone.org/)") Text(.init(String(format: ("[%@](%@)"), String(localized: "assistant_forgotten_password"), "https://subscribe.linphone.org/")))
.underline() .underline()
.tint(Color.grayMain2c600) .tint(Color.grayMain2c600)
.default_text_style_600(styleSize: 15) .default_text_style_600(styleSize: 15)
@ -180,7 +180,7 @@ struct LoginFragment: View {
VStack { VStack {
Divider() Divider()
} }
Text(" or ") Text("or")
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.foregroundStyle(Color.grayMain2c500) .foregroundStyle(Color.grayMain2c500)
VStack { VStack {
@ -199,7 +199,7 @@ struct LoginFragment: View {
.foregroundStyle(Color.orangeMain500) .foregroundStyle(Color.orangeMain500)
.frame(width: 20, height: 20) .frame(width: 20, height: 20)
Text("Scan QR code") Text("assistant_scan_qr_code")
.default_text_style_orange_600(styleSize: 20) .default_text_style_orange_600(styleSize: 20)
.frame(height: 35) .frame(height: 35)
} }
@ -219,7 +219,7 @@ struct LoginFragment: View {
NavigationLink(isActive: $isLinkSIPActive, destination: { NavigationLink(isActive: $isLinkSIPActive, destination: {
ThirdPartySipAccountWarningFragment(accountLoginViewModel: accountLoginViewModel) ThirdPartySipAccountWarningFragment(accountLoginViewModel: accountLoginViewModel)
}, label: { }, label: {
Text("Use SIP Account") Text("assistant_login_third_party_sip_account")
.default_text_style_orange_600(styleSize: 20) .default_text_style_orange_600(styleSize: 20)
.frame(height: 35) .frame(height: 35)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@ -254,12 +254,12 @@ struct LoginFragment: View {
Spacer() Spacer()
Text("Not account yet?") Text("assistant_no_account_yet")
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.foregroundStyle(Color.grayMain2c700) .foregroundStyle(Color.grayMain2c700)
.padding(.horizontal, 10) .padding(.horizontal, 10)
NavigationLink(destination: RegisterFragment(registerViewModel: RegisterViewModel()), isActive: $isLinkREGActive, label: {Text("Register") NavigationLink(destination: RegisterFragment(registerViewModel: RegisterViewModel()), isActive: $isLinkREGActive, label: { Text("assistant_account_register")
.default_text_style_white_600(styleSize: 20) .default_text_style_white_600(styleSize: 20)
.frame(height: 35) .frame(height: 35)
}) })
@ -293,22 +293,39 @@ struct LoginFragment: View {
} }
if self.isShowPopup { if self.isShowPopup {
let contentPopup1 = Text("En continuant, vous acceptez ces conditions, ") let generalTerms = String(format: "[%@](%@)", String(localized: "assistant_dialog_general_terms_label"), "https://www.linphone.org/en/terms-of-use/")
let contentPopup2 = Text("[notre politique de confidentialité](https://linphone.org/privacy-policy)").underline() let privacyPolicy = String(format: "[%@](%@)", String(localized: "assistant_dialog_privacy_policy_label"), "https://linphone.org/en/privacy-policy")
let contentPopup3 = Text(" et ") let splitMsg = String(localized: "assistant_dialog_general_terms_and_privacy_policy_message").components(separatedBy: "%@")
let contentPopup4 = Text("[nos conditions dutilisation](https://linphone.org/general-terms)").underline() if splitMsg.count == 3 { // We expect form of STRING %A STRING %@ STRING
let contentPopup5 = Text(".") let contentPopup1 = Text(.init(splitMsg[0]))
let contentPopup2 = Text(.init(generalTerms)).underline()
let contentPopup3 = Text(.init(splitMsg[1]))
let contentPopup4 = Text(.init(privacyPolicy)).underline()
let contentPopup5 = Text(.init(splitMsg[2]))
PopupView(isShowPopup: $isShowPopup, PopupView(isShowPopup: $isShowPopup,
title: Text("Conditions de service"), title: Text("assistant_dialog_general_terms_and_privacy_policy_title"),
content: contentPopup1 + contentPopup2 + contentPopup3 + contentPopup4 + contentPopup5, content: contentPopup1 + contentPopup2 + contentPopup3 + contentPopup4 + contentPopup5,
titleFirstButton: Text("Deny all"), titleFirstButton: Text("dialog_deny"),
actionFirstButton: {self.isShowPopup.toggle()}, actionFirstButton: {self.isShowPopup.toggle()},
titleSecondButton: Text("Accept all"), titleSecondButton: Text("dialog_accept"),
actionSecondButton: {acceptGeneralTerms()}) actionSecondButton: {acceptGeneralTerms()})
.background(.black.opacity(0.65)) .background(.black.opacity(0.65))
.onTapGesture { .onTapGesture {
self.isShowPopup.toggle() self.isShowPopup.toggle()
} }
} else { // backup just in case
PopupView(isShowPopup: $isShowPopup,
title: Text("assistant_dialog_general_terms_and_privacy_policy_title"),
content: Text(.init(String(format: String(localized: "assistant_dialog_general_terms_and_privacy_policy_message"), generalTerms, privacyPolicy))),
titleFirstButton: Text("dialog_deny"),
actionFirstButton: {self.isShowPopup.toggle()},
titleSecondButton: Text("dialog_accept"),
actionSecondButton: {acceptGeneralTerms()})
.background(.black.opacity(0.65))
.onTapGesture {
self.isShowPopup.toggle()
}
}
} }
} }

View file

@ -103,8 +103,7 @@ struct PermissionsFragment: View {
.padding(16) .padding(16)
.background(Color.grayMain2c200) .background(Color.grayMain2c200)
.cornerRadius(40) .cornerRadius(40)
Text(.init(String(format: String(localized: "assistant_permissions_read_contacts_title"), Bundle.main.displayName)))
Text("assistant_permissions_read_contacts_title")
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(.leading, 10) .padding(.leading, 10)
} }

View file

@ -300,10 +300,10 @@ struct CallView: View {
} }
if callViewModel.isPaused { if callViewModel.isPaused {
Text("Paused") Text("call_state_paused")
.default_text_style_white_800(styleSize: 16) .default_text_style_white_800(styleSize: 16)
} else if telecomManager.isPausedByRemote { } else if telecomManager.isPausedByRemote {
Text("Paused by remote") Text("call_state_paused_by_remote")
.default_text_style_white_800(styleSize: 16) .default_text_style_white_800(styleSize: 16)
} }
} }
@ -645,7 +645,7 @@ struct CallView: View {
VStack { VStack {
Spacer() Spacer()
Text("En attente d'autres participants...") Text("conference_call_empty")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_300(styleSize: 25) .default_text_style_300(styleSize: 25)
@ -670,7 +670,7 @@ struct CallView: View {
.foregroundStyle(Color.grayMain2c400) .foregroundStyle(Color.grayMain2c400)
.frame(width: 30, height: 30) .frame(width: 30, height: 30)
Text("Partager le lien") Text("conference_share_link_title")
.foregroundStyle(Color.grayMain2c400) .foregroundStyle(Color.grayMain2c400)
.default_text_style(styleSize: 25) .default_text_style(styleSize: 25)
.frame(height: 40) .frame(height: 40)
@ -829,7 +829,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: 40, height: 40) .frame(width: 40, height: 40)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1015,7 +1015,7 @@ struct CallView: View {
.frame(width: 40, height: 40) .frame(width: 40, height: 40)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1034,7 +1034,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: 40, height: 40) .frame(width: 40, height: 40)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1182,7 +1182,7 @@ struct CallView: View {
.frame(width: 40, height: 40) .frame(width: 40, height: 40)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1201,7 +1201,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: 40, height: 40) .frame(width: 40, height: 40)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1325,7 +1325,7 @@ struct CallView: View {
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1344,7 +1344,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1441,7 +1441,7 @@ struct CallView: View {
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1460,7 +1460,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1561,7 +1561,7 @@ struct CallView: View {
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1580,7 +1580,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1677,7 +1677,7 @@ struct CallView: View {
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
.padding(.bottom, 5) .padding(.bottom, 5)
Text("Joining...") Text("conference_participant_joining_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -1696,7 +1696,7 @@ struct CallView: View {
.foregroundStyle(.white) .foregroundStyle(.white)
.frame(width: maxValue/4, height: maxValue/4) .frame(width: maxValue/4, height: maxValue/4)
Text("En pause") Text("conference_participant_paused_text")
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
.foregroundStyle(Color.white) .foregroundStyle(Color.white)
.default_text_style_500(styleSize: 14) .default_text_style_500(styleSize: 14)
@ -2035,7 +2035,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text(callViewModel.callsCounter < 2 ? "Transfer" : "Attended transfer") Text(callViewModel.callsCounter < 2 ? "call_action_blind_transfer" : "call_action_attended_transfer")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2068,7 +2068,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("New call") Text("call_action_start_new_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2091,7 +2091,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(true) .disabled(true)
Text("Partage d'écran") Text("conference_action_screen_sharing")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2116,7 +2116,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Participants") Text("conference_action_show_participants")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2171,7 +2171,7 @@ struct CallView: View {
} }
} }
Text("Call list") Text("call_action_go_to_calls_list")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2201,7 +2201,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Dialer") Text("call_action_show_dialer")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2224,7 +2224,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Disposition") Text("call_action_change_layout")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2266,7 +2266,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(!callViewModel.isOneOneCall) .disabled(!callViewModel.isOneOneCall)
Text("Messages") Text("call_action_show_messages")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2290,7 +2290,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(telecomManager.isPausedByRemote) .disabled(telecomManager.isPausedByRemote)
Text("Pause") Text("call_action_pause_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2315,7 +2315,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(callViewModel.isPaused || telecomManager.isPausedByRemote) .disabled(callViewModel.isPaused || telecomManager.isPausedByRemote)
Text("Record") Text("call_action_record_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2338,7 +2338,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(true) .disabled(true)
Text("Record") Text("call_action_record_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2361,7 +2361,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Disposition") Text("call_action_change_layout")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2404,7 +2404,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text(callViewModel.callsCounter < 2 ? "Transfer" : "Attended transfer") Text(callViewModel.callsCounter < 2 ? "call_action_blind_transfer" : "call_action_attended_transfer")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2437,7 +2437,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("New call") Text("call_action_start_new_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2461,7 +2461,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(true) .disabled(true)
Text("Partage d'écran") Text("conference_action_screen_sharing")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2487,7 +2487,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Participants") Text("conference_action_show_participants")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2543,7 +2543,7 @@ struct CallView: View {
} }
} }
Text("Call list") Text("call_action_go_to_calls_list")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2573,7 +2573,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Dialer") Text("call_action_show_dialer")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2596,7 +2596,7 @@ struct CallView: View {
.background(Color.gray500) .background(Color.gray500)
.cornerRadius(40) .cornerRadius(40)
Text("Disposition") Text("call_action_change_layout")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2635,7 +2635,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(!callViewModel.isOneOneCall) .disabled(!callViewModel.isOneOneCall)
Text("Messages") Text("call_action_show_messages")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2659,7 +2659,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(telecomManager.isPausedByRemote) .disabled(telecomManager.isPausedByRemote)
Text("Pause") Text("call_action_pause_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2684,7 +2684,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(callViewModel.isPaused || telecomManager.isPausedByRemote) .disabled(callViewModel.isPaused || telecomManager.isPausedByRemote)
Text("Record") Text("call_action_record_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }
@ -2707,7 +2707,7 @@ struct CallView: View {
.cornerRadius(40) .cornerRadius(40)
.disabled(true) .disabled(true)
Text("Record") Text("call_action_record_call")
.foregroundStyle(.white) .foregroundStyle(.white)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
} }

View file

@ -182,7 +182,7 @@ struct CallsListFragment: View {
Text((callViewModel.selectedCall!.state == .PausedByRemote Text((callViewModel.selectedCall!.state == .PausedByRemote
|| callViewModel.selectedCall!.state == .Pausing || callViewModel.selectedCall!.state == .Pausing
|| callViewModel.selectedCall!.state == .Paused) ? "Resume" : "Pause") || callViewModel.selectedCall!.state == .Paused) ? "call_action_resume_call" : "call_action_pause_call")
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
Spacer() Spacer()

View file

@ -92,7 +92,7 @@ struct ContentView: View {
.padding(.leading, 10) .padding(.leading, 10)
if callViewModel.callsCounter > 1 { if callViewModel.callsCounter > 1 {
Text("\(callViewModel.callsCounter) appels") Text(String(format: String(localized: "calls_count_label"), callViewModel.callsCounter))
.default_text_style_white(styleSize: 16) .default_text_style_white(styleSize: 16)
} else { } else {
Text("\(callViewModel.displayName)") Text("\(callViewModel.displayName)")
@ -102,7 +102,7 @@ struct ContentView: View {
Spacer() Spacer()
if callViewModel.callsCounter == 1 { if callViewModel.callsCounter == 1 {
Text("\(callViewModel.isPaused || telecomManager.isPausedByRemote ? "En pause" : "Actif")") Text("\(callViewModel.isPaused || telecomManager.isPausedByRemote ? "call_state_paused" : "call_state_connected")")
.default_text_style_white(styleSize: 16) .default_text_style_white(styleSize: 16)
.padding(.trailing, 10) .padding(.trailing, 10)
} }
@ -140,10 +140,10 @@ struct ContentView: View {
.foregroundStyle(self.index == 0 ? Color.orangeMain500 : Color.grayMain2c600) .foregroundStyle(self.index == 0 ? Color.orangeMain500 : Color.grayMain2c600)
.frame(width: 25, height: 25) .frame(width: 25, height: 25)
if self.index == 0 { if self.index == 0 {
Text("Contacts") Text("bottom_navigation_contacts_label")
.default_text_style_700(styleSize: 10) .default_text_style_700(styleSize: 10)
} else { } else {
Text("Contacts") Text("bottom_navigation_contacts_label")
.default_text_style(styleSize: 10) .default_text_style(styleSize: 10)
} }
} }
@ -188,10 +188,10 @@ struct ContentView: View {
.foregroundStyle(self.index == 1 ? Color.orangeMain500 : Color.grayMain2c600) .foregroundStyle(self.index == 1 ? Color.orangeMain500 : Color.grayMain2c600)
.frame(width: 25, height: 25) .frame(width: 25, height: 25)
if self.index == 1 { if self.index == 1 {
Text("Calls") Text("bottom_navigation_calls_label")
.default_text_style_700(styleSize: 10) .default_text_style_700(styleSize: 10)
} else { } else {
Text("Calls") Text("bottom_navigation_calls_label")
.default_text_style(styleSize: 10) .default_text_style(styleSize: 10)
} }
} }
@ -391,7 +391,7 @@ struct ContentView: View {
isShowDeleteAllHistoryPopup.toggle() isShowDeleteAllHistoryPopup.toggle()
} label: { } label: {
HStack { HStack {
Text("Delete all history") Text("menu_delete_history")
Spacer() Spacer()
Image("trash-simple-red") Image("trash-simple-red")
.resizable() .resizable()
@ -669,10 +669,10 @@ struct ContentView: View {
.foregroundStyle(self.index == 0 ? Color.orangeMain500 : Color.grayMain2c600) .foregroundStyle(self.index == 0 ? Color.orangeMain500 : Color.grayMain2c600)
.frame(width: 25, height: 25) .frame(width: 25, height: 25)
if self.index == 0 { if self.index == 0 {
Text("Contacts") Text("bottom_navigation_contacts_label")
.default_text_style_700(styleSize: 10) .default_text_style_700(styleSize: 10)
} else { } else {
Text("Contacts") Text("bottom_navigation_contacts_label")
.default_text_style(styleSize: 10) .default_text_style(styleSize: 10)
} }
} }
@ -719,10 +719,10 @@ struct ContentView: View {
.foregroundStyle(self.index == 1 ? Color.orangeMain500 : Color.grayMain2c600) .foregroundStyle(self.index == 1 ? Color.orangeMain500 : Color.grayMain2c600)
.frame(width: 25, height: 25) .frame(width: 25, height: 25)
if self.index == 1 { if self.index == 1 {
Text("Calls") Text("bottom_navigation_calls_label")
.default_text_style_700(styleSize: 9) .default_text_style_700(styleSize: 9)
} else { } else {
Text("Calls") Text("bottom_navigation_calls_label")
.default_text_style(styleSize: 9) .default_text_style(styleSize: 9)
} }
} }
@ -1001,17 +1001,15 @@ struct ContentView: View {
if isShowDeleteContactPopup { if isShowDeleteContactPopup {
PopupView(isShowPopup: $isShowDeleteContactPopup, PopupView(isShowPopup: $isShowDeleteContactPopup,
title: Text( title: Text(String(format: String(localized: "contact_dialog_delete_title"),
contactViewModel.selectedFriend != nil contactViewModel.selectedFriend != nil
? "Delete \(contactViewModel.selectedFriend!.name!)?" ? contactViewModel.selectedFriend!.name! : (contactViewModel.indexDisplayedFriend != nil
: (contactViewModel.indexDisplayedFriend != nil ? contactsManager.lastSearch[contactViewModel.indexDisplayedFriend!].friend!.name! : "Error Name"))),
? "Delete \(contactsManager.lastSearch[contactViewModel.indexDisplayedFriend!].friend!.name!)?" content: Text("contact_dialog_delete_message"),
: "Error Name")), titleFirstButton: Text("dialog_cancel"),
content: Text("This contact will be deleted definitively."),
titleFirstButton: Text("Cancel"),
actionFirstButton: { actionFirstButton: {
self.isShowDeleteContactPopup.toggle()}, self.isShowDeleteContactPopup.toggle()},
titleSecondButton: Text("Ok"), titleSecondButton: Text("dialog_ok"),
actionSecondButton: { actionSecondButton: {
if contactViewModel.selectedFriendToDelete != nil { if contactViewModel.selectedFriendToDelete != nil {
if contactViewModel.indexDisplayedFriend != nil { if contactViewModel.indexDisplayedFriend != nil {
@ -1043,20 +1041,20 @@ struct ContentView: View {
if isShowDeleteAllHistoryPopup { if isShowDeleteAllHistoryPopup {
PopupView(isShowPopup: $isShowDeleteContactPopup, PopupView(isShowPopup: $isShowDeleteContactPopup,
title: Text("Do you really want to delete all calls history?"), title: Text("history_dialog_delete_all_call_logs_title"),
content: Text("All calls will be removed from the history."), content: Text("history_dialog_delete_all_call_logs_message"),
titleFirstButton: Text("Cancel"), titleFirstButton: Text("dialog_cancel"),
actionFirstButton: { actionFirstButton: {
self.isShowDeleteAllHistoryPopup.toggle() self.isShowDeleteAllHistoryPopup.toggle()
historyListViewModel.callLogsAddressToDelete = "" historyListViewModel.callLogsAddressToDelete = ""
}, },
titleSecondButton: Text("Ok"), titleSecondButton: Text("dialog_ok"),
actionSecondButton: { actionSecondButton: {
historyListViewModel.removeCallLogs() historyListViewModel.removeCallLogs()
self.isShowDeleteAllHistoryPopup.toggle() self.isShowDeleteAllHistoryPopup.toggle()
historyViewModel.displayedCall = nil historyViewModel.displayedCall = nil
ToastViewModel.shared.toastMessage = "Success_remove_call_logs" ToastViewModel.shared.toastMessage = "call_history_deleted_toast"
ToastViewModel.shared.displayToast.toggle() ToastViewModel.shared.displayToast.toggle()
}) })
.background(.black.opacity(0.65)) .background(.black.opacity(0.65))
@ -1068,11 +1066,11 @@ struct ContentView: View {
if isShowDismissPopup { if isShowDismissPopup {
PopupView(isShowPopup: $isShowDismissPopup, PopupView(isShowPopup: $isShowDismissPopup,
title: Text("Dont save modifications?"), title: Text("content_description_save_changes"),
content: Text("All modifications will be canceled."), content: Text("contact_editor_dialog_abort_confirmation_message"),
titleFirstButton: Text("Cancel"), titleFirstButton: Text("dialog_cancel"),
actionFirstButton: {self.isShowDismissPopup.toggle()}, actionFirstButton: {self.isShowDismissPopup.toggle()},
titleSecondButton: Text("Ok"), titleSecondButton: Text("dialog_ok"),
actionSecondButton: { actionSecondButton: {
if editContactViewModel.selectedEditFriend == nil { if editContactViewModel.selectedEditFriend == nil {
self.isShowDismissPopup.toggle() self.isShowDismissPopup.toggle()
@ -1143,15 +1141,15 @@ struct ContentView: View {
if isShowSendCancelMeetingNotificationPopup { if isShowSendCancelMeetingNotificationPopup {
PopupView(isShowPopup: $isShowSendCancelMeetingNotificationPopup, PopupView(isShowPopup: $isShowSendCancelMeetingNotificationPopup,
title: Text("The meeting will be cancelled"), title: Text("meeting_schedule_cancel_dialog_title"),
content: Text("Send notification to participants ?"), content: Text("meeting_schedule_cancel_dialog_message"),
titleFirstButton: Text("Cancel for me only"), titleFirstButton: Text("Cancel for me only"),
actionFirstButton: { actionFirstButton: {
meetingViewModel.displayedMeeting = nil meetingViewModel.displayedMeeting = nil
meetingsListViewModel.deleteSelectedMeeting() meetingsListViewModel.deleteSelectedMeeting()
self.isShowSendCancelMeetingNotificationPopup.toggle( self.isShowSendCancelMeetingNotificationPopup.toggle(
) }, ) },
titleSecondButton: Text("Send cancellation notifications"), titleSecondButton: Text("meeting_schedule_cancel_dialog_title"),
actionSecondButton: { actionSecondButton: {
meetingViewModel.displayedMeeting = nil meetingViewModel.displayedMeeting = nil
if let meetingToDelete = self.meetingsListViewModel.selectedMeetingToDelete { if let meetingToDelete = self.meetingsListViewModel.selectedMeetingToDelete {
@ -1172,11 +1170,11 @@ struct ContentView: View {
isShowPopup: $isShowStartCallGroupPopup, isShowPopup: $isShowStartCallGroupPopup,
title: Text("conversation_info_confirm_start_group_call_dialog_title"), title: Text("conversation_info_confirm_start_group_call_dialog_title"),
content: Text("conversation_info_confirm_start_group_call_dialog_message"), content: Text("conversation_info_confirm_start_group_call_dialog_message"),
titleFirstButton: Text("Cancel"), titleFirstButton: Text("dialog_cancel"),
actionFirstButton: { actionFirstButton: {
self.isShowStartCallGroupPopup.toggle() self.isShowStartCallGroupPopup.toggle()
}, },
titleSecondButton: Text("Confirm"), titleSecondButton: Text("dialog_ok"),
actionSecondButton: { actionSecondButton: {
if conversationViewModel.displayedConversation != nil { if conversationViewModel.displayedConversation != nil {
conversationViewModel.displayedConversation!.createGroupCall() conversationViewModel.displayedConversation!.createGroupCall()
@ -1196,11 +1194,11 @@ struct ContentView: View {
isShowPopup: $isShowStartCallGroupPopup, isShowPopup: $isShowStartCallGroupPopup,
title: Text("conversation_info_confirm_start_group_call_dialog_title"), title: Text("conversation_info_confirm_start_group_call_dialog_title"),
content: Text("conversation_info_confirm_start_group_call_dialog_message"), content: Text("conversation_info_confirm_start_group_call_dialog_message"),
titleFirstButton: Text("Cancel"), titleFirstButton: Text("dialog_cancel"),
actionFirstButton: { actionFirstButton: {
self.isShowStartCallGroupPopup.toggle() self.isShowStartCallGroupPopup.toggle()
}, },
titleSecondButton: Text("Confirm"), titleSecondButton: Text("dialog_ok"),
actionSecondButton: { actionSecondButton: {
if conversationViewModel.displayedConversation != nil { if conversationViewModel.displayedConversation != nil {
conversationViewModel.displayedConversation!.createGroupCall() conversationViewModel.displayedConversation!.createGroupCall()

View file

@ -32,7 +32,7 @@ class HelpView { // TODO (basic debug moved here until halp view is implemented)
CoreContext.shared.doOnCoreQueue { _ in CoreContext.shared.doOnCoreQueue { _ in
Core.resetLogCollection() Core.resetLogCollection()
DispatchQueue.main.async { DispatchQueue.main.async {
ToastViewModel.shared.toastMessage = "Success_clear_logs" ToastViewModel.shared.toastMessage = "help_troubleshooting_debug_logs_cleaned_toast_message"
ToastViewModel.shared.displayToast = true ToastViewModel.shared.displayToast = true
} }
} }

View file

@ -60,35 +60,35 @@ struct ToastView: View {
.padding(8) .padding(8)
case "Success_remove_call_logs": case "Success_remove_call_logs":
Text("History has been deleted") Text("call_history_deleted_toast)
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_clear_logs": case "Success_clear_logs":
Text("Logs cleared") Text("help_troubleshooting_debug_logs_cleaned_toast_message")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_send_logs": case "Success_send_logs":
Text("Logs URL copied into clipboard") Text("debug_logs_copied_to_clipboard_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_address_copied_into_clipboard": case "Success_address_copied_into_clipboard":
Text("SIP address copied into clipboard") Text("sip_address_copied_to_clipboard_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_message_copied_into_clipboard": case "Success_message_copied_into_clipboard":
Text("Message copied into clipboard") Text("message_copied_to_clipboard_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
@ -109,63 +109,56 @@ struct ToastView: View {
.padding(8) .padding(8)
case "Failed": case "Failed":
Text("Invalid QR code!") Text("assistant_qr_code_invalid_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500) .foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Invalide URI": case "Invalide URI":
Text("Invalide URI") Text("assistant_invalid_uri_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500) .foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Registration_failed": case "Registration_failed":
Text("The user name or password is incorrects") Text("assistant_account_login_forbidden_error")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500) .foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Unavailable_network": case "Unavailable_network":
Text("Network is not reachable") Text("network_not_reachable")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500) .foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_toast_network_connected": case "Success_toast_network_connected":
Text("Network is now reachable again") Text("network_not_reachable_again")
.multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15)
.padding(8)
case "Success_account_logged_out":
Text("Account successfully logged out")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_toast_call_transfer_successful": case "Success_toast_call_transfer_successful":
Text("Call has been successfully transferred") Text("call_transfer_successful_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_toast_call_transfer_in_progress": case "Success_toast_call_transfer_in_progress":
Text("Call is being transferred") Text("call_transfer_in_progress_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
.padding(8) .padding(8)
case "Success_toast_meeting_deleted": case "Success_toast_meeting_deleted":
Text("Successfully removed meeting") Text("meeting_info_deleted_toast")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)
@ -254,7 +247,7 @@ struct ToastView: View {
.foregroundStyle(Color.redDanger500) .foregroundStyle(Color.redDanger500)
case "Meeting_added_to_calendar": case "Meeting_added_to_calendar":
Text("Meeting added to iPhone calendar") Text("meeting_exported_as_calendar_event")
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500) .foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15) .default_text_style(styleSize: 15)

View file

@ -433,7 +433,7 @@ struct ScheduleMeetingFragment: View {
HStack { HStack {
Spacer() Spacer()
Text("Cancel") Text("dialog_cancel")
.default_text_style_orange_500(styleSize: 16) .default_text_style_orange_500(styleSize: 16)
.onTapGesture { .onTapGesture {
if isTimeSelection { if isTimeSelection {
@ -442,7 +442,7 @@ struct ScheduleMeetingFragment: View {
showDatePicker.toggle() showDatePicker.toggle()
} }
} }
Text("Ok") Text("dialog_ok")
.default_text_style_orange_500(styleSize: 16) .default_text_style_orange_500(styleSize: 16)
.onTapGesture { .onTapGesture {
pickDate() pickDate()

View file

@ -249,7 +249,7 @@ class NotificationService: UNNotificationServiceExtension {
if reactionContent == nil { if reactionContent == nil {
msgData.body = (message.subject != nil ? "\(from): " : "") + content msgData.body = (message.subject != nil ? "\(from): " : "") + content
} else { } else {
msgData.body = from + NSLocalizedString(" has reacted by ", comment: "") + reactionContent! + NSLocalizedString(" to: ", comment: "") + content msgData.body = String(format: String(localized: "notification_chat_message_reaction_received"), from, reactionContent!, content)
} }
} else { } else {
if let subject = message.subject { if let subject = message.subject {