Add all missing translation keys (not the corresponding translations yet)

This commit is contained in:
QuentinArguillere 2024-12-10 18:08:07 +01:00
parent 715b92ab3f
commit 8d96b08f14
39 changed files with 493 additions and 488 deletions

View file

@ -240,7 +240,7 @@ final class CoreContext: ObservableObject {
}
DispatchQueue.main.async {
if status == ConfiguringState.Successful {
ToastViewModel.shared.toastMessage = "Successful"
ToastViewModel.shared.toastMessage = "Success_qr_code_validated"
ToastViewModel.shared.displayToast = true
self.accounts = accountModels
}
@ -298,8 +298,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

File diff suppressed because it is too large Load diff

View file

@ -641,7 +641,7 @@ class TelecomManager: ObservableObject {
if UIApplication.shared.applicationState != .active && (callLog == nil || callLog?.status == .Missed || callLog?.status == .Aborted || callLog?.status == .EarlyAborted) {
// Configure the notification's payload.
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: NSLocalizedString("Missed call", comment: ""), arguments: nil)
content.title = NSString.localizedUserNotificationString(forKey: NSLocalizedString("notification_missed_call_title", comment: ""), arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: displayName, arguments: nil)
// Deliver the notification.

View file

@ -154,7 +154,7 @@ struct LoginFragment: View {
self.accountLoginViewModel.login()
coreContext.loggingInProgress = true
}, label: {
Text(coreContext.loggedIn ? "Log out" : "assistant_account_login")
Text(coreContext.loggedIn ? "manage_account_delete" : "assistant_account_login")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)
@ -293,8 +293,8 @@ struct LoginFragment: View {
}
if self.isShowPopup {
let generalTerms = String(format: "[%@](%@)", String(localized: "assistant_dialog_general_terms_label"), String(localized: "https://linphone.org/general-terms"))
let privacyPolicy = String(format: "[%@](%@)", String(localized: "assistant_dialog_privacy_policy_label"), String(localized: "https://linphone.org/en/privacy-policy"))
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]))

View file

@ -124,7 +124,7 @@ struct ProfileModeFragment: View {
Button(action: {
sharedMainViewModel.changeHideProfileMode()
}, label: {
Text("Continue")
Text("dialog_continue")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)
@ -156,7 +156,7 @@ struct ProfileModeFragment: View {
+ " Etiam velit sapien, egestas sit amet dictum eget, condimentum a ligula."),
titleFirstButton: nil,
actionFirstButton: {},
titleSecondButton: Text("Close"),
titleSecondButton: Text("dialog_close"),
actionSecondButton: {
self.isShowPopup.toggle()
}

View file

@ -107,7 +107,7 @@ struct RegisterFragment: View {
.default_text_style_600(styleSize: 15)
.padding(.bottom)
Text(String(localized: "Phone number")+"*")
Text(String(localized: "phone_number")+"*")
.default_text_style_700(styleSize: 15)
.padding(.bottom, -5)
@ -133,7 +133,7 @@ struct RegisterFragment: View {
Divider()
TextField("Phone number", text: $registerViewModel.phoneNumber)
TextField("phone_number", text: $registerViewModel.phoneNumber)
.default_text_style(styleSize: 15)
.disableAutocorrection(true)
.autocapitalization(.none)
@ -309,11 +309,11 @@ struct RegisterFragment: View {
isShowPopup: $isShowPopup,
title: titlePopup,
content: contentPopup,
titleFirstButton: Text("Cancel"),
titleFirstButton: Text("dialog_cancel"),
actionFirstButton: {
self.isShowPopup = false
},
titleSecondButton: Text("Continue"),
titleSecondButton: Text("dialog_continue"),
actionSecondButton: {
self.isShowPopup = false
registerViewModel.createInProgress = true

View file

@ -69,7 +69,7 @@ struct ThirdPartySipAccountLoginFragment: View {
}
.frame(width: geometry.size.width)
Text("Use a SIP account")
Text("assistant_login_third_party_sip_account")
.default_text_style_white_800(styleSize: 20)
.padding(.top, 20)
}
@ -139,7 +139,7 @@ struct ThirdPartySipAccountLoginFragment: View {
)
.padding(.bottom)
Text(String(localized: "Domain")+"*")
Text(String(localized: "sip_address_domain")+"*")
.default_text_style_700(styleSize: 15)
.padding(.bottom, -5)
@ -160,11 +160,11 @@ struct ThirdPartySipAccountLoginFragment: View {
.padding(.bottom)
.focused($isDomainFocused)
Text(String(localized: "Display Name"))
Text(String(localized: "sip_address_display_name"))
.default_text_style_700(styleSize: 15)
.padding(.bottom, -5)
TextField("Display Name", text: $accountLoginViewModel.displayName)
TextField("sip_address_display_name", text: $accountLoginViewModel.displayName)
.default_text_style(styleSize: 15)
.disableAutocorrection(true)
.autocapitalization(.none)
@ -181,7 +181,7 @@ struct ThirdPartySipAccountLoginFragment: View {
.padding(.bottom)
.focused($isDisplayNameFocused)
Text(String(localized: "Transport"))
Text(String(localized: "assistant_sip_account_transport_protocol"))
.default_text_style_700(styleSize: 15)
.padding(.bottom, -5)
@ -215,7 +215,7 @@ struct ThirdPartySipAccountLoginFragment: View {
Button(action: {
self.accountLoginViewModel.login()
}, label: {
Text(coreContext.loggedIn ? "Log out" : "assistant_account_login")
Text(coreContext.loggedIn ? "manage_account_delete" : "assistant_account_login")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)

View file

@ -61,7 +61,7 @@ struct ThirdPartySipAccountWarningFragment: View {
}
.frame(width: geometry.size.width)
Text("Use a SIP account")
Text("assistant_login_third_party_sip_account")
.default_text_style_white_800(styleSize: 20)
.padding(.top, 20)
}
@ -101,9 +101,7 @@ struct ThirdPartySipAccountWarningFragment: View {
}
.padding(.bottom, 40)
Text("Some features require a Linphone account, such as group messaging, video conferences...\n\n"
+ "These features are hidden when you register with a third party SIP account.\n\n"
+ "To enable it in a commercial projet, please contact us. ")
Text("assistant_third_party_sip_account_warning_explanation")
.default_text_style(styleSize: 15)
.multilineTextAlignment(.center)
.padding(.bottom)
@ -137,7 +135,7 @@ struct ThirdPartySipAccountWarningFragment: View {
Button(action: {
dismiss()
}, label: {
Text("I prefere create an account")
Text("assistant_third_party_sip_account_create_linphone_account")
.default_text_style_orange_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)
@ -156,7 +154,7 @@ struct ThirdPartySipAccountWarningFragment: View {
NavigationLink(destination: {
ThirdPartySipAccountLoginFragment(accountLoginViewModel: accountLoginViewModel)
}, label: {
Text("I understand")
Text("assistant_third_party_sip_account_warning_ok")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)

View file

@ -55,7 +55,7 @@ struct AudioRouteBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text(!callViewModel.isHeadPhoneAvailable() ? "Earpiece" : "Headphones")
Text(!callViewModel.isHeadPhoneAvailable() ? "call_audio_device_type_earpiece" : "call_audio_device_type_headphones")
.default_text_style_white(styleSize: 15)
Spacer()
@ -87,7 +87,7 @@ struct AudioRouteBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Speaker")
Text("call_audio_device_type_speaker")
.default_text_style_white(styleSize: 15)
Spacer()
@ -121,7 +121,8 @@ struct AudioRouteBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Bluetooth")
Text(String(format: String(localized: "call_audio_device_type_bluetooth"),
AVAudioSession.sharedInstance().currentRoute.outputs.first?.portName ?? ""))
.default_text_style_white(styleSize: 15)
Spacer()

View file

@ -37,7 +37,7 @@ struct CallStatisticsSheetBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
callStatisticsSheet = false
dismiss()
}
@ -50,7 +50,7 @@ struct CallStatisticsSheetBottomSheet: View {
.padding(15)
}
Text("Audio")
Text("call_stats_audio_title")
.default_text_style_white_600(styleSize: 15)
.padding(.top, 10)
@ -77,7 +77,7 @@ struct CallStatisticsSheetBottomSheet: View {
Spacer()
if callViewModel.callStatsModel.isVideoEnabled {
Text("Vidéo")
Text("call_stats_video_title")
.default_text_style_white_600(styleSize: 15)
.padding(.top, 10)

View file

@ -61,7 +61,7 @@ struct CallsListFragment: View {
}
}
Text("Call list")
Text("calls_list_title")
.multilineTextAlignment(.leading)
.default_text_style_orange_800(styleSize: 16)
@ -106,7 +106,7 @@ struct CallsListFragment: View {
PopupView(isShowPopup: $isShowPopup,
title: Text("calls_list_dialog_merge_into_conference_title"),
content: nil,
titleFirstButton: Text("Cancel"),
titleFirstButton: Text("dialog_cancel"),
actionFirstButton: {self.isShowPopup.toggle()},
titleSecondButton: Text("calls_list_dialog_merge_into_conference_label"),
actionSecondButton: {
@ -171,7 +171,7 @@ struct CallsListFragment: View {
HStack {
Image((callViewModel.selectedCall!.state == .PausedByRemote
|| callViewModel.selectedCall!.state == .Pausing
|| callViewModel.selectedCall!.state == .Paused) ? "play" : "pause")
|| callViewModel.selectedCall!.state == .Paused) ? String(localized: "call_action_resume_call") : String(localized: "call_action_pause_call"))
.resizable()
.frame(width: 30, height: 30)
@ -217,7 +217,7 @@ struct CallsListFragment: View {
.background(Color.redDanger500)
.cornerRadius(40)
Text("Hang up call")
Text("call_action_hang_up")
.foregroundStyle(Color.redDanger500)
.default_text_style_white(styleSize: 15)
@ -271,7 +271,7 @@ struct CallsListFragment: View {
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
} else {
Text(callViewModel.calls[index].callLog!.conferenceInfo!.subject ?? "Conference Name error")
Text(callViewModel.calls[index].callLog!.conferenceInfo!.subject ?? String(localized: "conference_name_error"))
.default_text_style(styleSize: 16)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
@ -284,7 +284,7 @@ struct CallsListFragment: View {
|| callViewModel.calls[index].state == .Pausing
|| callViewModel.calls[index].state == .Paused
|| callViewModel.calls[index].state == .Resuming {
Text(callViewModel.calls[index].state == .Resuming ? "Resuming" : "Paused")
Text(callViewModel.calls[index].state == .Resuming ? String(localized: "call_state_resuming") : String(localized: "call_state_paused"))
.default_text_style_300(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .trailing)
.lineLimit(1)
@ -294,7 +294,7 @@ struct CallsListFragment: View {
.resizable()
.frame(width: 25, height: 25)
} else {
Text("Active")
Text("call_state_connected")
.default_text_style_300(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .trailing)
.lineLimit(1)

View file

@ -46,7 +46,7 @@ struct ChangeLayoutBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Mosaïque")
Text("conference_layout_grid")
.foregroundStyle(callViewModel.participantList.count > 5 ? Color.gray500 : .white)
.default_text_style_white(styleSize: 15)
@ -77,7 +77,7 @@ struct ChangeLayoutBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Participant actif")
Text("conference_layout_active_speaker")
.default_text_style_white(styleSize: 15)
Spacer()
@ -109,7 +109,7 @@ struct ChangeLayoutBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Audio seulement")
Text("conference_layout_audio_only")
.default_text_style_white(styleSize: 15)
Spacer()

View file

@ -37,7 +37,7 @@ struct MediaEncryptedSheetBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
mediaEncryptedSheet = false
dismiss()
}
@ -50,7 +50,7 @@ struct MediaEncryptedSheetBottomSheet: View {
.padding(15)
}
Text("Chiffrement du média")
Text("call_stats_media_encryption_title")
.default_text_style_white_600(styleSize: 15)
.padding(.top, 10)
@ -92,7 +92,7 @@ struct MediaEncryptedSheetBottomSheet: View {
mediaEncryptedSheet = false
dismiss()
}, label: {
Text("Faire la validation à nouveau")
Text("call_do_zrtp_sas_validation_again")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)

View file

@ -107,13 +107,13 @@ struct ParticipantsListFragment: View {
.background(.white)
if self.isShowPopup {
let contentPopup = Text("Etes-vous sûr de vouloir supprimer \(callViewModel.participantList[indexToRemove].name) ?")
let contentPopup = Text(String(format: String(localized: "meeting_call_remove_participant_confirmation_message"), callViewModel.participantList[indexToRemove].name))
PopupView(isShowPopup: $isShowPopup,
title: Text("Supprimer un participant"),
title: Text("meeting_call_remove_participant_confirmation_title"),
content: contentPopup,
titleFirstButton: Text("Non"),
titleFirstButton: Text("dialog_no"),
actionFirstButton: {self.isShowPopup.toggle()},
titleSecondButton: Text("Oui"),
titleSecondButton: Text("dialog_yes"),
actionSecondButton: {
callViewModel.removeParticipant(index: indexToRemove)
self.isShowPopup.toggle()
@ -158,7 +158,7 @@ struct ParticipantsListFragment: View {
Spacer()
if callViewModel.myParticipantModel!.isAdmin {
Text("Administrateur")
Text("conversation_info_participant_is_admin_label")
.foregroundStyle(Color.grayMain2c300)
.default_text_style(styleSize: 12)
.frame(maxWidth: .infinity, alignment: .trailing)
@ -202,7 +202,7 @@ struct ParticipantsListFragment: View {
Spacer()
if callViewModel.participantList[index].isAdmin {
Text("Administrateur")
Text("conversation_info_participant_is_admin_label")
.foregroundStyle(Color.grayMain2c300)
.default_text_style(styleSize: 12)
.frame(maxWidth: .infinity, alignment: .trailing)
@ -250,7 +250,7 @@ struct ParticipantsListFragment: View {
.scaledToFit()
.clipped()
.padding(.all)
Text("No participant for the moment...")
Text("meeting_call_remove_no_participants")
.default_text_style_800(styleSize: 16)
Spacer()
Spacer()

View file

@ -470,7 +470,7 @@ struct MeetingWaitingRoomFragment: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text(!meetingWaitingRoomViewModel.isHeadPhoneAvailable() ? "Earpiece" : "Headphones")
Text(!meetingWaitingRoomViewModel.isHeadPhoneAvailable() ? "call_audio_device_type_earpiece" : "call_audio_device_type_headphones")
.default_text_style_white(styleSize: 15)
Spacer()
@ -536,7 +536,8 @@ struct MeetingWaitingRoomFragment: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Bluetooth")
Text(String(format: String(localized: "call_audio_device_type_bluetooth"),
AVAudioSession.sharedInstance().currentRoute.outputs.first?.portName ?? ""))
.default_text_style_white(styleSize: 15)
Spacer()

View file

@ -121,11 +121,11 @@ struct ContactInnerActionsFragment: View {
VStack {
if contactAvatarModel.friend!.phoneNumbersWithLabel[index].label != nil
&& !contactAvatarModel.friend!.phoneNumbersWithLabel[index].label!.isEmpty {
Text("Phone (\(contactAvatarModel.friend!.phoneNumbersWithLabel[index].label!)) :")
Text(String(localized: "phone_number") + " \(contactAvatarModel.friend!.phoneNumbersWithLabel[index].label!)) :")
.default_text_style_700(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .leading)
} else {
Text("Phone :")
Text(String(localized: "phone_number") + " :")
.default_text_style_700(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .leading)
}
@ -170,7 +170,7 @@ struct ContactInnerActionsFragment: View {
VStack {
if contactAvatarModel.friend!.organization != nil
&& !contactAvatarModel.friend!.organization!.isEmpty {
Text("**Company :** \(contactAvatarModel.friend!.organization!)")
Text(.init(String(format:"**%@ :** %@", String(localized: "contact_editor_company"), contactAvatarModel.friend!.organization!)))
.default_text_style(styleSize: 14)
.padding(.vertical, 15)
.padding(.horizontal, 20)
@ -179,7 +179,7 @@ struct ContactInnerActionsFragment: View {
if contactAvatarModel.friend!.jobTitle != nil
&& !contactAvatarModel.friend!.jobTitle!.isEmpty {
Text("**Job :** \(contactAvatarModel.friend!.jobTitle!)")
Text(.init(String(format:"**%@ :** %@", String(localized: "contact_editor_job_title"), contactAvatarModel.friend!.jobTitle!)))
.default_text_style(styleSize: 14)
.padding(.top,
contactAvatarModel.friend!.organization != nil

View file

@ -278,7 +278,7 @@ struct ContactInnerFragment: View {
.fullScreenCover(isPresented: $presentingEditContact) {
NavigationView {
EditContactView(contact: $cnContact)
.navigationBarTitle("Edit Contact")
.navigationBarTitle("contact_edit_title")
.navigationBarTitleDisplayMode(.inline)
.edgesIgnoringSafeArea(.vertical)
}

View file

@ -42,7 +42,7 @@ struct ContactListBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
if #available(iOS 16.0, *) {
showingSheet.toggle()
} else {
@ -147,7 +147,7 @@ struct ContactListBottomSheet: View {
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text(contactViewModel.stringToCopy.prefix(4) == "sip:"
? "Block the address" : "Block the number")
? "menu_block_address" : "menu_block_number")
.default_text_style(styleSize: 16)
Spacer()
}

View file

@ -43,7 +43,7 @@ struct ContactsListBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
if #available(iOS 16.0, *) {
showingSheet.toggle()
} else {

View file

@ -94,7 +94,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)")
@ -104,7 +104,7 @@ struct ContentView: View {
Spacer()
if callViewModel.callsCounter == 1 {
Text("\(callViewModel.isPaused || telecomManager.isPausedByRemote ? "En pause" : "Actif")")
Text(String(localized: "\(callViewModel.isPaused || telecomManager.isPausedByRemote ? "call_state_paused" : "call_state_connected")"))
.default_text_style_white(styleSize: 16)
.padding(.trailing, 10)
}
@ -142,10 +142,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)
}
}
@ -190,10 +190,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)
}
}
@ -315,7 +315,7 @@ struct ContentView: View {
openMenu()
}
Text(index == 0 ? "bottom_navigation_contacts_label" : (index == 1 ? "bottom_navigation_calls_label" : (index == 2 ? "bottom_navigation_conversations_label" : "bottom_navigation_meetings_label")))
Text(String(localized: index == 0 ? "bottom_navigation_contacts_label" : (index == 1 ? "bottom_navigation_calls_label" : (index == 2 ? "bottom_navigation_conversations_label" : "bottom_navigation_meetings_label"))))
.default_text_style_white_800(styleSize: 20)
.padding(.leading, 10)
@ -393,7 +393,7 @@ struct ContentView: View {
isShowDeleteAllHistoryPopup.toggle()
} label: {
HStack {
Text("Delete all history")
Text("menu_delete_history")
Spacer()
Image("trash-simple-red")
.resizable()
@ -671,10 +671,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)
}
}
@ -721,10 +721,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)
}
}
@ -1004,17 +1004,16 @@ struct ContentView: View {
if isShowDeleteContactPopup {
PopupView(isShowPopup: $isShowDeleteContactPopup,
title: Text(
contactViewModel.selectedFriend != nil
? "Delete \(contactViewModel.selectedFriend!.name!)?"
title: Text(String(format: String(localized: "contact_dialog_delete_title"), contactViewModel.selectedFriend != nil
? 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"),
? 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 {
@ -1046,14 +1045,14 @@ 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()
@ -1071,11 +1070,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("contact_editor_dialog_abort_confirmation_title"),
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()
@ -1155,15 +1154,15 @@ struct ContentView: View {
if isShowSendCancelMeetingNotificationPopup {
PopupView(isShowPopup: $isShowSendCancelMeetingNotificationPopup,
title: Text("The meeting will be cancelled"),
content: Text("Send notification to participants ?"),
titleFirstButton: Text("Cancel for me only"),
title: Text("meeting_schedule_cancel_dialog_title"),
content: Text("meeting_schedule_cancel_dialog_message"),
titleFirstButton: Text("dialog_cancel"),
actionFirstButton: {
meetingViewModel.displayedMeeting = nil
meetingsListViewModel.deleteSelectedMeeting()
self.isShowSendCancelMeetingNotificationPopup.toggle(
) },
titleSecondButton: Text("Send cancellation notifications"),
titleSecondButton: Text("dialog_ok"),
actionSecondButton: {
meetingViewModel.displayedMeeting = nil
if let meetingToDelete = self.meetingsListViewModel.selectedMeetingToDelete {
@ -1184,11 +1183,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()
@ -1208,11 +1207,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

@ -253,7 +253,7 @@ struct ChatBubbleView: View {
VStack(spacing: 2) {
if !eventLogMessage.message.messageConferenceInfo!.meetingDescription.isEmpty {
Text("Description")
Text("meeting_schedule_description_title")
.default_text_style(styleSize: 14)
.frame(maxWidth: .infinity, alignment: .leading)

View file

@ -296,7 +296,7 @@ struct ConversationForwardMessageFragment: View {
.frame(width: 45, height: 45)
.clipShape(Circle())
Text("Username error")
Text("username_error")
.default_text_style(styleSize: 16)
.frame(maxWidth: .infinity, alignment: .leading)
.foregroundStyle(Color.orangeMain500)

View file

@ -1028,7 +1028,7 @@ struct ImdnOrReactionsSheet: View {
var body: some View {
VStack {
Picker("Categories", selection: $selectedCategoryIndex) {
Picker("picker_categories", selection: $selectedCategoryIndex) {
ForEach(0..<conversationViewModel.sheetCategories.count, id: \.self) { index in
Text(conversationViewModel.sheetCategories[index].name)
}

View file

@ -40,7 +40,7 @@ struct ConversationsListBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
if #available(iOS 16.0, *) {
showingSheet.toggle()
} else {
@ -80,7 +80,7 @@ struct ConversationsListBottomSheet: View {
.foregroundStyle(Color.grayMain2c500)
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text("Marquer comme non lu")
Text("conversation_action_mark_as_read")
.default_text_style(styleSize: 16)
Spacer()
}
@ -118,7 +118,7 @@ struct ConversationsListBottomSheet: View {
.foregroundStyle(Color.grayMain2c500)
.frame(width: 25, height: 25, alignment: .leading)
.padding(.all, 10)
Text(conversationsListViewModel.selectedConversation!.isMuted ? "Réactiver les notifications" : "Mettre en sourdine")
Text(conversationsListViewModel.selectedConversation!.isMuted ? "conversation_action_unmute" : "conversation_action_mute")
.default_text_style(styleSize: 16)
Spacer()
}

View file

@ -176,7 +176,7 @@ struct StartConversationFragment: View {
ScrollView {
if !ContactsManager.shared.lastSearch.isEmpty {
HStack(alignment: .center) {
Text("All contacts")
Text("contacts_list_all_contacts_title")
.default_text_style_800(styleSize: 16)
Spacer()
@ -294,7 +294,7 @@ struct StartConversationFragment: View {
.frame(width: 45, height: 45)
.clipShape(Circle())
Text("Username error")
Text("username_error")
.default_text_style(styleSize: 16)
.frame(maxWidth: .infinity, alignment: .leading)
.foregroundStyle(Color.orangeMain500)

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

@ -34,7 +34,7 @@ struct PopupLoadingView: View {
.padding(.top)
.padding(.bottom)
Text("Opération en cours...")
Text("operation_in_progress_overlay")
.tint(Color.grayMain2c600)
.default_text_style(styleSize: 15)
.frame(maxWidth: .infinity)

View file

@ -40,7 +40,7 @@ struct PopupViewWithTextField: View {
Button(action: {
conversationViewModel.isShowConversationInfoPopup = false
}, label: {
Text("Cancel")
Text("dialog_cancel")
.default_text_style_orange_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)
@ -58,7 +58,7 @@ struct PopupViewWithTextField: View {
Button(action: {
conversationViewModel.setNewChatRoomSubject()
}, label: {
Text("Confirm")
Text("dialog_ok")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)

View file

@ -137,13 +137,13 @@ struct SideMenu: View {
showHelp = true
}
.confirmationDialog("Temp Help", isPresented: $showHelp, titleVisibility: .visible) {
Button("Send Logs") {
Button("help_troubleshooting_share_logs") {
HelpView.sendLogs()
}
Button("Clear Logs") {
Button("help_troubleshooting_clean_logs") {
HelpView.clearLogs()
}
Button("Logout") {
Button("manage_account_delete") {
HelpView.logout()
}
}

View file

@ -52,43 +52,43 @@ struct ToastView: View {
}
switch toastViewModel.toastMessage {
case "Successful":
Text("QR code validated!")
case "Success_qr_code_validated":
Text("qr_code_validated")
.multilineTextAlignment(.center)
.foregroundStyle(Color.greenSuccess500)
.default_text_style(styleSize: 15)
.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,105 +109,98 @@ 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)
.padding(8)
case "Failed_toast_call_transfer_failed":
Text("Call transfer failed!")
Text("call_transfer_failed_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)
.padding(8)
case "Failed_uri_handler_call_failed":
Text("Call failed")
Text("uri_handler_call_failed_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)
.padding(8)
case "Failed_uri_handler_config_failed":
Text("Configuration failed")
Text("uri_handler_config_failed_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)
.padding(8)
case "uri_handler_config_success":
Text("Configuration successfully applied")
Text("uri_handler_config_success_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)
.padding(8)
case "Failed_uri_handler_bad_call_address":
Text("Unable to call, invalid address")
Text("uri_handler_bad_call_address_failed_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)
.padding(8)
case "Failed_uri_handler_bad_config_address":
Text("Unable to retrieve configuration, invalid address")
Text("uri_handler_bad_config_address_failed_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.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)
@ -268,7 +261,7 @@ struct ToastView: View {
.padding(8)
case "Failed_no_subject_or_participant":
Text("A subject and at least one participant is required to create a meeting")
Text("meeting_schedule_failed_no_subject_or_participant_toast")
.multilineTextAlignment(.center)
.foregroundStyle(Color.redDanger500)
.default_text_style(styleSize: 15)

View file

@ -54,7 +54,7 @@ struct DialerBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
showingDialer.toggle()
dismiss()
}

View file

@ -48,7 +48,7 @@ struct HistoryListBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
if #available(iOS 16.0, *) {
showingSheet.toggle()
} else {

View file

@ -82,7 +82,7 @@ struct StartCallFragment: View {
}
}
Text(!callViewModel.isTransferInsteadCall ? "history_call_start_title" : "Transfer call to")
Text(!callViewModel.isTransferInsteadCall ? "history_call_start_title" : "call_transfer_current_call_title")
.multilineTextAlignment(.leading)
.default_text_style_orange_800(styleSize: 16)
@ -395,7 +395,7 @@ struct StartCallFragment: View {
.frame(width: 45, height: 45)
.clipShape(Circle())
Text("Username error")
Text("username_error")
.default_text_style(styleSize: 16)
.frame(maxWidth: .infinity, alignment: .leading)
.foregroundStyle(Color.orangeMain500)

View file

@ -148,23 +148,23 @@ class HistoryListViewModel: ObservableObject {
switch callStatus {
case Call.Status.Missed:
if isOutgoing {
"Outgoing Call"
String(localized: "call_outgoing")
} else {
"Missed Call"
String(localized: "notification_missed_call_title")
}
case Call.Status.Success:
if isOutgoing {
"Outgoing Call"
String(localized: "call_outgoing")
} else {
"Incoming Call"
String(localized: "call_audio_incoming")
}
default:
if isOutgoing {
"Outgoing Call"
String(localized: "call_outgoing")
} else {
"Incoming Call"
String(localized: "call_audio_incoming")
}
}
}

View file

@ -69,7 +69,7 @@ struct AddParticipantsFragment: View {
.multilineTextAlignment(.leading)
.default_text_style_orange_800(styleSize: 16)
.padding(.top, 20)
Text("\($addParticipantsViewModel.participantsToAdd.count) selected participants")
Text(String(format: String(localized: "selected_participants_count"), $addParticipantsViewModel.participantsToAdd.count))
.default_text_style_300(styleSize: 12)
}
Spacer()
@ -217,7 +217,7 @@ struct AddParticipantsFragment: View {
}
HStack(alignment: .center) {
Text("Suggestions")
Text("generic_address_picker_suggestions_list_title")
.default_text_style_800(styleSize: 16)
Spacer()
@ -278,7 +278,7 @@ struct AddParticipantsFragment: View {
.frame(width: 45, height: 45)
.clipShape(Circle())
Text("Username error")
Text("username_error")
.default_text_style(styleSize: 16)
.frame(maxWidth: .infinity, alignment: .leading)
.foregroundStyle(Color.orangeMain500)

View file

@ -40,7 +40,7 @@ struct MeetingsListBottomSheet: View {
Spacer()
HStack {
Spacer()
Button("Close") {
Button("dialog_close") {
if #available(iOS 16.0, *) {
showingSheet.toggle()
} else {

View file

@ -412,7 +412,9 @@ struct ScheduleMeetingFragment: View {
func getDatePopup(isTimeSelection: Bool) -> some View {
GeometryReader { geometry in
VStack(alignment: .leading) {
Text("Select \(setFromDate ? "start" : "end") \(isTimeSelection ? "time" : "date")")
Text(setFromDate ?
(isTimeSelection ? String(localized: "meeting_schedule_pick_start_time_title") : String(localized: "meeting_schedule_pick_start_date_title"))
: String(localized: "meeting_schedule_pick_end_time_title"))
.default_text_style_800(styleSize: 16)
.frame(alignment: .leading)
.padding(.bottom, 2)
@ -433,7 +435,7 @@ struct ScheduleMeetingFragment: View {
HStack {
Spacer()
Text("Cancel")
Text("dialog_cancel")
.default_text_style_orange_500(styleSize: 16)
.onTapGesture {
if isTimeSelection {
@ -442,7 +444,7 @@ struct ScheduleMeetingFragment: View {
showDatePicker.toggle()
}
}
Text("Ok")
Text("dialog_ok")
.default_text_style_orange_500(styleSize: 16)
.onTapGesture {
pickDate()

View file

@ -41,7 +41,7 @@ struct WelcomeView: View {
NavigationLink(destination: {
PermissionsFragment()
}, label: {
Text("Skip")
Text("welcome_carousel_skip")
.underline()
.default_text_style_600(styleSize: 15)
@ -98,7 +98,7 @@ struct WelcomeView: View {
NavigationLink(destination: {
PermissionsFragment()
}, label: {
Text("Start")
Text("start")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)
@ -117,7 +117,7 @@ struct WelcomeView: View {
index += 1
}
}, label: {
Text("Next")
Text("next")
.default_text_style_white_600(styleSize: 20)
.frame(height: 35)
.frame(maxWidth: .infinity)

View file

@ -165,7 +165,7 @@ class NotificationService: UNNotificationServiceExtension {
stopCore()
bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "msg.caf"))
bestAttemptContent.title = NSLocalizedString("Message received", comment: "")
bestAttemptContent.title = String(localized: "notification_chat_message_received_title")
if let subtitle = msgData?.subtitle {
bestAttemptContent.subtitle = subtitle
}
@ -221,11 +221,11 @@ class NotificationService: UNNotificationServiceExtension {
var content = ""
if message.isConferenceInvitationNew {
content = NSLocalizedString("📅 You are invited to a meeting", comment: "")
content = String(localized: "message_meeting_invitation_notification")
} else if message.isConferenceInvitationUpdate {
content = NSLocalizedString("📅 Meeting has been modified", comment: "")
content = String(localized: "message_meeting_invitation_updated_notification")
} else if message.isConferenceInvitationCancellation {
content = NSLocalizedString("📅 Meeting has been cancelled", comment: "")
content = String(localized: "message_meeting_invitation_cancelled_notification")
} else {
content = message.isText ? message.textContent! : "🗻"
}