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 {
self.loggingInProgress = false
self.loggedIn = false
ToastViewModel.shared.toastMessage = "Success_account_logged_out"
ToastViewModel.shared.displayToast = true
} else {
self.loggingInProgress = false
self.loggedIn = false

View file

@ -3,36 +3,12 @@
"strings" : {
"" : {
},
" et " : {
},
" has reacted by " : {
},
" or " : {
},
" to: " : {
},
": %@" : {
},
"." : {
},
"[Forgotten password?](https://subscribe.linphone.org/)" : {
},
"[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)" : {
"extractionState" : "manual",
@ -189,9 +162,6 @@
},
"A subject and at least one participant is required to create a meeting" : {
},
"Accept all" : {
},
"Account successfully logged out" : {
@ -201,15 +171,9 @@
},
"Administrateur" : {
},
"All calls will be removed from the history." : {
},
"All contacts" : {
},
"All modifications will be canceled." : {
},
"assistant_account_create" : {
"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" : {
"localizations" : {
"en" : {
@ -442,13 +518,13 @@
"en" : {
"stringUnit" : {
"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" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "**Contacts :** Pour vous afficher vos contacts et retrouver qui utilise cette application."
"state" : "translated",
"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" : {
"localizations" : {
"en" : {
@ -532,9 +624,6 @@
}
}
}
},
"Attended transfer" : {
},
"Audio" : {
@ -629,6 +718,70 @@
},
"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" : {
"extractionState" : "manual",
@ -647,11 +800,113 @@
}
}
},
"call_audio_device_type_speaker" : {
"call_action_pause_call" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pause"
}
},
"fr" : {
"stringUnit" : {
"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"
}
}
@ -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" : {
"extractionState" : "manual",
"localizations" : {
@ -929,7 +1216,7 @@
}
}
},
"Calls" : {
"calls_count_label" : {
},
"calls_list_dialog_merge_into_conference_label" : {
@ -1003,8 +1290,53 @@
"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" : {
"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" : {
},
@ -1173,6 +1553,12 @@
}
}
}
},
"contact_dialog_delete_message" : {
},
"contact_dialog_delete_title" : {
},
"contact_dialog_pick_phone_number_or_sip_address_title" : {
"extractionState" : "manual",
@ -1222,6 +1608,9 @@
}
}
}
},
"contact_editor_dialog_abort_confirmation_message" : {
},
"contact_editor_first_name" : {
"localizations" : {
@ -1318,9 +1707,6 @@
}
}
}
},
"Contacts" : {
},
"contacts_list_all_contacts_title" : {
"localizations" : {
@ -1402,6 +1788,9 @@
}
}
}
},
"content_description_save_changes" : {
},
"Continue" : {
"localizations" : {
@ -2353,21 +2742,25 @@
},
"Default mode" : {
},
"Delete %@?" : {
},
"Delete all history" : {
},
"Deny all" : {
},
"Description" : {
},
"Dialer" : {
"dialog_accept" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accept"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accepter"
}
}
}
},
"dialog_call" : {
"localizations" : {
@ -2401,6 +2794,22 @@
}
}
},
"dialog_deny" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Deny"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Refuser"
}
}
}
},
"dialog_ok" : {
"localizations" : {
"en" : {
@ -2419,18 +2828,9 @@
},
"Display Name" : {
},
"Disposition" : {
},
"Do you really want to delete all calls history?" : {
},
"Domain" : {
},
"Dont save modifications?" : {
},
"drawer_menu_account_connection_status_cleared" : {
"extractionState" : "manual",
@ -2555,21 +2955,9 @@
},
"Edit Contact" : {
},
"En attente d'autres participants..." : {
},
"En continuant, vous acceptez ces conditions, " : {
},
"En pause" : {
},
"Error" : {
},
"Error Name" : {
},
"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" : {
"localizations" : {
@ -2802,9 +3196,6 @@
},
"Invalide URI" : {
},
"Joining..." : {
},
"list_filter_no_result_found" : {
"localizations" : {
@ -2983,6 +3374,12 @@
}
}
}
},
"meeting_schedule_cancel_dialog_message" : {
},
"meeting_schedule_cancel_dialog_title" : {
},
"meeting_schedule_description_hint" : {
"localizations" : {
@ -3499,9 +3896,6 @@
}
}
}
},
"Messages" : {
},
"Mettre en sourdine" : {
@ -3517,9 +3911,6 @@
},
"Network is now reachable again" : {
},
"New call" : {
},
"new_conversation_create_group" : {
"extractionState" : "manual",
@ -3580,29 +3971,46 @@
"Non" : {
},
"Not account yet?" : {
},
"Ok" : {
"notification_chat_message_reaction_received" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ reacted by %@ to: %@"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ a réagi par %@ à : %@"
}
}
}
},
"Opération en cours..." : {
},
"or" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "or"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "ou"
}
}
}
},
"Oui" : {
},
"Partage d'écran" : {
},
"Partager le lien" : {
},
"Participant actif" : {
},
"Participants" : {
},
"password" : {
"extractionState" : "manual",
@ -3616,19 +4024,13 @@
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Password en FR"
"value" : "Mot de passe"
}
}
}
},
"Pause" : {
},
"Paused" : {
},
"Paused by remote" : {
},
"Personnalize your profil mode" : {
@ -3663,9 +4065,6 @@
},
"Réactiver les notifications" : {
},
"Record" : {
},
"recordings_title" : {
"extractionState" : "manual",
@ -3685,6 +4084,7 @@
}
},
"Register" : {
"extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
@ -3693,15 +4093,9 @@
}
}
}
},
"Resume" : {
},
"Resuming" : {
},
"Scan QR code" : {
},
"Select %@ %@" : {
"localizations" : {
@ -3712,15 +4106,9 @@
}
}
}
},
"Send cancellation notifications" : {
},
"Send Logs" : {
},
"Send notification to participants ?" : {
},
"settings_title" : {
"extractionState" : "manual",
@ -3784,21 +4172,12 @@
},
"Temp Help" : {
},
"The meeting will be cancelled" : {
},
"The user name or password is incorrects" : {
},
"This contact will be deleted definitively." : {
},
"TLS" : {
},
"Transfer" : {
},
"Transfer call to" : {
@ -3817,9 +4196,6 @@
},
"Use a SIP account" : {
},
"Use SIP Account" : {
},
"username" : {
"extractionState" : "manual",
@ -3833,7 +4209,7 @@
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Username en FR"
"value" : "Nom dutilisateur"
}
}
}

View file

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

View file

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

View file

@ -182,7 +182,7 @@ struct CallsListFragment: View {
Text((callViewModel.selectedCall!.state == .PausedByRemote
|| 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)
Spacer()

View file

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

View file

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

View file

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

View file

@ -249,7 +249,7 @@ class NotificationService: UNNotificationServiceExtension {
if reactionContent == nil {
msgData.body = (message.subject != nil ? "\(from): " : "") + content
} 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 {
if let subject = message.subject {