From 3f154651eaaf3bc68cdb50c9c58fafbc05fbb58c Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Thu, 21 Nov 2024 15:29:14 +0100 Subject: [PATCH] Replace text with translation keys in Meeting waiting room, meetings list, meeting scheduling fragments --- Linphone/Localizable.xcstrings | 320 +++++++++++++++--- .../UI/Call/MeetingWaitingRoomFragment.swift | 8 +- Linphone/UI/Main/ContentView.swift | 10 +- .../Meetings/Fragments/MeetingFragment.swift | 8 +- .../Meetings/Fragments/MeetingsFragment.swift | 6 +- .../Fragments/MeetingsListBottomSheet.swift | 2 +- .../Fragments/ScheduleMeetingFragment.swift | 21 +- 7 files changed, 307 insertions(+), 68 deletions(-) diff --git a/Linphone/Localizable.xcstrings b/Linphone/Localizable.xcstrings index 732930291..7dd7a7bfa 100644 --- a/Linphone/Localizable.xcstrings +++ b/Linphone/Localizable.xcstrings @@ -15,6 +15,9 @@ }, " to: " : { + }, + ": %@" : { + }, "." : { @@ -60,9 +63,6 @@ }, "%@" : { - }, - "%@ meeting" : { - }, "%lld" : { @@ -207,9 +207,6 @@ }, "Active" : { - }, - "Add a description" : { - }, "Add a picture" : { @@ -219,9 +216,6 @@ }, "Add the contact" : { - }, - "Add to calendar" : { - }, "Add to contacts" : { @@ -240,9 +234,6 @@ }, "All modifications will be canceled." : { - }, - "Annuler" : { - }, "Appel" : { @@ -442,6 +433,22 @@ }, "Bluetooth" : { + }, + "bottom_navigation_meetings_label" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meetings" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Réunions" + } + } + } }, "Call failed" : { @@ -477,6 +484,9 @@ } } } + }, + "call_audio_device_type_speaker" : { + }, "call_can_be_trusted_toast" : { "extractionState" : "manual", @@ -805,9 +815,6 @@ }, "Cancel for me only" : { - }, - "Cancelled" : { - }, "Categories" : { @@ -871,9 +878,6 @@ } } } - }, - "Connexion à la réunion" : { - }, "contact_details_actions_title" : { "extractionState" : "manual", @@ -1861,9 +1865,6 @@ }, "Delete this contact" : { - }, - "Delete this meeting" : { - }, "Demande d’autorisations" : { @@ -2257,9 +2258,6 @@ }, "Job title" : { - }, - "Join the meeting now" : { - }, "Joining..." : { @@ -2306,6 +2304,134 @@ }, "Meeting added to iPhone calendar" : { + }, + "meeting_info_cancelled_toast" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meeting has been cancelled" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "La réunion a été annulée" + } + } + } + }, + "meeting_info_delete" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete meeting" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Supprimer la réunion" + } + } + } + }, + "meeting_info_export_as_calendar_event" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create calendar event" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ajouter un évènement dans le calendrie" + } + } + } + }, + "meeting_info_join_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Join the meeting now" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Rejoindre la réunion" + } + } + } + }, + "meeting_info_organizer_label" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Organizer" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Organisateur" + } + } + } + }, + "meeting_schedule_add_participants_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add participants" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ajouter des participants" + } + } + } + }, + "meeting_schedule_description_hint" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add description" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ajouter une description" + } + } + } + }, + "meeting_schedule_edit_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit meeting" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Modifier la réunion" + } + } + } }, "meeting_schedule_meeting_label" : { "extractionState" : "manual", @@ -2324,6 +2450,86 @@ } } }, + "meeting_schedule_send_invitations_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send invitation to participants" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Envoyer une invitation aux participants" + } + } + } + }, + "meeting_schedule_subject_hint" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add title…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ajouter un titre…" + } + } + } + }, + "meeting_schedule_timezone_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Timezone" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuseau horaire" + } + } + } + }, + "meeting_schedule_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New meeting" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nouvelle réunion" + } + } + } + }, + "meeting_waiting_room_cancel" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Annuler" + } + } + } + }, "meeting_waiting_room_join" : { "extractionState" : "manual", "localizations" : { @@ -2341,6 +2547,38 @@ } } }, + "meeting_waiting_room_joining_subtitle" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You\\'ll be joining in a short moment" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Vous allez rejoindre la réunion dans quelques instants…" + } + } + } + }, + "meeting_waiting_room_joining_title" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connection in progress" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Connexion à la réunion" + } + } + } + }, "Meetings" : { }, @@ -2360,6 +2598,22 @@ } } }, + "meetings_list_no_meeting_for_today" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No meeting scheduled for today" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Aucune réunion aujourd\\'hui" + } + } + } + }, "menu_copy_chat_message" : { "extractionState" : "manual", "localizations" : { @@ -2633,9 +2887,6 @@ }, "Next" : { - }, - "No meeting today" : { - }, "No participant for the moment..." : { @@ -2654,9 +2905,6 @@ }, "Opération en cours..." : { - }, - "Organizer" : { - }, "Other actions" : { @@ -2804,9 +3052,6 @@ }, "Send cancellation notifications" : { - }, - "Send invitations to participants" : { - }, "Send Logs" : { @@ -2854,9 +3099,6 @@ }, "Start" : { - }, - "Subject" : { - }, "subscribe.linphone.org" : { @@ -2887,9 +3129,6 @@ }, "This contact will be deleted definitively." : { - }, - "Time Zone: %@" : { - }, "TLS" : { @@ -2955,9 +3194,6 @@ }, "Vos communications sont en sécurité grâce aux **Chiffrement de bout en bout**." : { - }, - "Vous allez rejoindre la réunion dans quelques instants..." : { - }, "Welcome" : { diff --git a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift index e1fae5807..6f53504f5 100644 --- a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift +++ b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift @@ -376,12 +376,12 @@ struct MeetingWaitingRoomFragment: View { VStack { Spacer() - Text("Connexion à la réunion") + Text("meeting_waiting_room_joining_title") .default_text_style_white_600(styleSize: 24) .multilineTextAlignment(.center) .padding(.bottom, 10) - Text("Vous allez rejoindre la réunion dans quelques instants...") + Text("meeting_waiting_room_joining_subtitle") .default_text_style_white(styleSize: 16) .multilineTextAlignment(.center) .padding(.bottom, 20) @@ -394,7 +394,7 @@ struct MeetingWaitingRoomFragment: View { Button(action: { meetingWaitingRoomViewModel.cancelMeeting() }, label: { - Text("Annuler") + Text("meeting_waiting_room_cancel") .default_text_style_white_600(styleSize: 20) .frame(height: 35) .frame(maxWidth: .infinity) @@ -502,7 +502,7 @@ struct MeetingWaitingRoomFragment: 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() diff --git a/Linphone/UI/Main/ContentView.swift b/Linphone/UI/Main/ContentView.swift index 6dd48d923..31ff1393e 100644 --- a/Linphone/UI/Main/ContentView.swift +++ b/Linphone/UI/Main/ContentView.swift @@ -260,10 +260,10 @@ struct ContentView: View { .foregroundStyle(self.index == 3 ? Color.orangeMain500 : Color.grayMain2c600) .frame(width: 25, height: 25) if self.index == 0 { - Text("Meetings") + Text("bottom_navigation_meetings_label") .default_text_style_700(styleSize: 10) } else { - Text("Meetings") + Text("bottom_navigation_meetings_label") .default_text_style(styleSize: 10) } } @@ -313,7 +313,7 @@ struct ContentView: View { openMenu() } - Text(index == 0 ? "Contacts" : (index == 1 ? "Calls" : (index == 2 ? "Conversations" : "Meetings"))) + Text(index == 0 ? "Contacts" : (index == 1 ? "Calls" : (index == 2 ? "Conversations" : "bottom_navigation_meetings_label"))) .default_text_style_white_800(styleSize: 20) .padding(.leading, 10) @@ -794,10 +794,10 @@ struct ContentView: View { .foregroundStyle(self.index == 3 ? Color.orangeMain500 : Color.grayMain2c600) .frame(width: 25, height: 25) if self.index == 3 { - Text("Meetings") + Text("bottom_navigation_meetings_label") .default_text_style_700(styleSize: 9) } else { - Text("Meetings") + Text("bottom_navigation_meetings_label") .default_text_style(styleSize: 9) } } diff --git a/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift b/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift index 1a5ce37d8..76bb40ee7 100644 --- a/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift @@ -55,7 +55,7 @@ struct MeetingFragment: View { .padding(.leading, 10) .padding(.trailing, 40) - Text("Organizer") + Text("meeting_info_organizer_label") .font(Font.custom("NotoSans-Light", size: 12)) .foregroundStyle(Color.grayMain2c600) .opacity(participant.isOrganizer ? 1 : 0) @@ -122,7 +122,7 @@ struct MeetingFragment: View { .renderingMode(.template) .resizable() .frame(width: 25, height: 25, alignment: .leading) - Text("Add to calendar") + Text("meeting_info_export_as_calendar_event") .default_text_style(styleSize: 16) Spacer() } @@ -144,7 +144,7 @@ struct MeetingFragment: View { .renderingMode(.template) .resizable() .frame(width: 25, height: 25, alignment: .leading) - Text("Delete this meeting") + Text("meeting_info_delete") .foregroundStyle(Color.redDanger500) .default_text_style(styleSize: 16) Spacer() @@ -301,7 +301,7 @@ struct MeetingFragment: View { Button(action: { meetingViewModel.joinMeeting(addressUri: meetingViewModel.displayedMeeting?.address ?? "") }, label: { - Text("Join the meeting now") + Text("meeting_info_join_title") .bold() .default_text_style_white_500(styleSize: 16) .frame(maxWidth: .infinity, maxHeight: 47, alignment: .center) diff --git a/Linphone/UI/Main/Meetings/Fragments/MeetingsFragment.swift b/Linphone/UI/Main/Meetings/Fragments/MeetingsFragment.swift index 7ee93ec3d..647ade66d 100644 --- a/Linphone/UI/Main/Meetings/Fragments/MeetingsFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/MeetingsFragment.swift @@ -49,7 +49,7 @@ struct MeetingsFragment: View { func createMeetingLine(model: MeetingsListItemModel) -> some View { VStack(alignment: .leading, spacing: 0) { if model.isToday { - Text("No meeting today") + Text("meetings_list_no_meeting_for_today") .fontWeight(.bold) .default_text_style_500(styleSize: 15) } else { @@ -71,7 +71,7 @@ struct MeetingsFragment: View { // this time string is formatted for the current device timezone, we use the selected timezone only when displaying details .default_text_style_500(styleSize: 15) } else { - Text("Cancelled") + Text("meeting_info_cancelled_toast") .foregroundStyle(Color.redDanger500) .default_text_style_500(styleSize: 15) } @@ -134,7 +134,7 @@ struct MeetingsFragment: View { } .frame(width: 35) if itemModel.isToday { - Text("No meeting today") + Text("meetings_list_no_meeting_for_today") .fontWeight(.bold) .padding(.leading, 20) .padding(.top, 15) diff --git a/Linphone/UI/Main/Meetings/Fragments/MeetingsListBottomSheet.swift b/Linphone/UI/Main/Meetings/Fragments/MeetingsListBottomSheet.swift index dd56924e0..094f7455e 100644 --- a/Linphone/UI/Main/Meetings/Fragments/MeetingsListBottomSheet.swift +++ b/Linphone/UI/Main/Meetings/Fragments/MeetingsListBottomSheet.swift @@ -85,7 +85,7 @@ struct MeetingsListBottomSheet: View { .foregroundStyle(Color.redDanger500) .frame(width: 25, height: 25, alignment: .leading) .padding(.all, 10) - Text("Delete this meeting") + Text("meeting_info_delete") .foregroundStyle(Color.redDanger500) .default_text_style(styleSize: 16) Spacer() diff --git a/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift b/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift index 59e18b074..1bce0c251 100644 --- a/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift @@ -83,7 +83,7 @@ struct ScheduleMeetingFragment: View { } } - Text("\(meetingViewModel.displayedMeeting != nil ? "Edit" : "New") meeting" ) + Text(meetingViewModel.displayedMeeting != nil ? "meeting_schedule_edit_title" : "meeting_schedule_title" ) .multilineTextAlignment(.leading) .default_text_style_orange_800(styleSize: 16) @@ -102,7 +102,7 @@ struct ScheduleMeetingFragment: View { .foregroundStyle(Color.grayMain2c800) .frame(width: 24, height: 24) .padding(.leading, 15) - TextField("Subject", text: $meetingViewModel.subject) + TextField("meeting_schedule_subject_hint", text: $meetingViewModel.subject) .focused($isSubjectTextFocused) .default_text_style_700(styleSize: 20) .frame(height: 29, alignment: .leading) @@ -156,15 +156,18 @@ struct ScheduleMeetingFragment: View { Spacer() } - - HStack(alignment: .center, spacing: 10) { + HStack(alignment: .center, spacing: 0) { Image("earth") .renderingMode(.template) .resizable() .foregroundStyle(Color.grayMain2c800) .frame(width: 24, height: 24) .padding(.leading, 15) - Text("Time Zone: \(meetingViewModel.selectedTimezone.formattedString())") + .padding(.trailing, 10) + Text("meeting_schedule_timezone_title") + .fontWeight(.bold) + .default_text_style_500(styleSize: 15) + Text(": \(meetingViewModel.selectedTimezone.formattedString())") .fontWeight(.bold) .default_text_style_500(styleSize: 15) .onTapGesture { @@ -202,7 +205,7 @@ struct ScheduleMeetingFragment: View { .padding(.leading, 16) if #available(iOS 16.0, *) { - TextField("Add a description", text: $meetingViewModel.description, axis: .vertical) + TextField("meeting_schedule_description_hint", text: $meetingViewModel.description, axis: .vertical) .default_text_style(styleSize: 15) .focused($isDescriptionTextFocused) .padding(.vertical, 5) @@ -216,7 +219,7 @@ struct ScheduleMeetingFragment: View { .focused($isDescriptionTextFocused) if meetingViewModel.description.isEmpty { - Text("Add a description") + Text("meeting_schedule_description_hint") .padding(.leading, 5) .foregroundStyle(Color.gray300) .default_text_style(styleSize: 15) @@ -248,7 +251,7 @@ struct ScheduleMeetingFragment: View { .frame(width: 24, height: 24) .padding(.leading, 16) - Text("Add participants") + Text("meeting_schedule_add_participants_title") .default_text_style_700(styleSize: 16) .frame(height: 29, alignment: .leading) Spacer() @@ -293,7 +296,7 @@ struct ScheduleMeetingFragment: View { .padding(.leading, 16) .labelsHidden() .tint(Color.orangeMain300) - Text("Send invitations to participants") + Text("meeting_schedule_send_invitations_title") .default_text_style_500(styleSize: 14) Spacer() }