diff --git a/NotificationServiceExtension/Info.plist b/NotificationServiceExtension/Info.plist index 03163520a9..91510cdf7d 100644 --- a/NotificationServiceExtension/Info.plist +++ b/NotificationServiceExtension/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 3.8.0 + 3.8.1 CFBundleVersion - 3.8.0.35 + 3.8.1.2 NSAppTransportSecurity NSExceptionDomains diff --git a/Podfile.lock b/Podfile.lock index 4a2f051421..f2b611f660 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -222,8 +222,8 @@ PODS: - YYImage/Core (1.0.4) - YYImage/WebP (1.0.4): - YYImage/Core - - ZKGroup (0.6.0) - - ZKGroup/Tests (0.6.0) + - ZKGroup (0.7.0) + - ZKGroup/Tests (0.7.0) - ZXingObjC (3.6.5): - ZXingObjC/All (= 3.6.5) - ZXingObjC/All (3.6.5) @@ -361,7 +361,7 @@ CHECKOUT OPTIONS: :commit: e43ab163b2dcb4c817339c819b07dac545f05fea :git: https://github.com/signalapp/YapDatabase.git ZKGroup: - :commit: d3b36dbf7d08d922b3081818883945fef9cc2e3d + :commit: 78e7b2e081e2b44b7451a6b156c02ee518ba310b :git: https://github.com/signalapp/signal-zkgroup-swift ZXingObjC: :commit: fce3786177fd7032c62b230df8beeb206722d38e @@ -395,7 +395,7 @@ SPEC CHECKSUMS: SwiftProtobuf: 4fd9645e69b72cbae6ec8da5be0cdd20ca6565dd YapDatabase: b418a4baa6906e8028748938f9159807fd039af4 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 - ZKGroup: 30fc5406dba3aef20d36d9a38a86c1d775b6d64d + ZKGroup: 126835c7fe565afb02d457d2f18cee14e72b1090 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb PODFILE CHECKSUM: 6ac96ed037cb6453c2c66281ff1ffbbfefe565dd diff --git a/Pods b/Pods index 893823310f..004de9f300 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 893823310f696395d9a9ea7ac3c55ee90160ee72 +Subproject commit 004de9f30040a3625d0e66d31288aca8e0283a6c diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index 904681716d..0410b6819b 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.8.0 + 3.8.1 CFBundleSignature ???? CFBundleURLTypes @@ -45,7 +45,7 @@ CFBundleVersion - 3.8.0.35 + 3.8.1.2 ITSAppUsesNonExemptEncryption LOGS_EMAIL diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 1048280b1a..b3df12876a 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2277,6 +2277,9 @@ typedef enum : NSUInteger { if (self.threadViewModel.hasPendingMessageRequest) { return NO; } + if (viewItem.isViewOnceMessage) { + return NO; + } if ([viewItem.interaction isKindOfClass:[TSMessage class]]) { TSMessage *message = (TSMessage *)viewItem.interaction; diff --git a/Signal/src/ViewControllers/ThreadSettings/UpdateGroupViewController.m b/Signal/src/ViewControllers/ThreadSettings/UpdateGroupViewController.m index 8336b91b16..c88cbe3e1b 100644 --- a/Signal/src/ViewControllers/ThreadSettings/UpdateGroupViewController.m +++ b/Signal/src/ViewControllers/ThreadSettings/UpdateGroupViewController.m @@ -357,7 +357,7 @@ NS_ASSUME_NONNULL_BEGIN newTitle:newTitle newAvatarData:newAvatarData v1Members:memberSet]; - if ([self.oldGroupModel isEqualToGroupModel:newGroupModel]) { + if ([self.oldGroupModel isEqualToGroupModel:newGroupModel ignoreRevision:YES]) { return nil; } return newGroupModel; diff --git a/Signal/translations/ar.lproj/Localizable.strings b/Signal/translations/ar.lproj/Localizable.strings index 83017948b6..b247a166fe 100644 --- a/Signal/translations/ar.lproj/Localizable.strings +++ b/Signal/translations/ar.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/az.lproj/Localizable.strings b/Signal/translations/az.lproj/Localizable.strings index 9239e499da..2b6e378fd5 100644 --- a/Signal/translations/az.lproj/Localizable.strings +++ b/Signal/translations/az.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Bu Mesajı Cavabla"; diff --git a/Signal/translations/bg.lproj/Localizable.strings b/Signal/translations/bg.lproj/Localizable.strings index 0b93ead2c7..a075a4eead 100644 --- a/Signal/translations/bg.lproj/Localizable.strings +++ b/Signal/translations/bg.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/bn.lproj/Localizable.strings b/Signal/translations/bn.lproj/Localizable.strings index a54ecaeb68..1c243c855a 100644 --- a/Signal/translations/bn.lproj/Localizable.strings +++ b/Signal/translations/bn.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "এই বার্তা ফরোয়ার্ড করুন"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "এই বার্তার জবাব দিন"; diff --git a/Signal/translations/bs.lproj/Localizable.strings b/Signal/translations/bs.lproj/Localizable.strings index e5b1278121..d1310134b5 100644 --- a/Signal/translations/bs.lproj/Localizable.strings +++ b/Signal/translations/bs.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/ca.lproj/Localizable.strings b/Signal/translations/ca.lproj/Localizable.strings index d78ea5052f..ab5567e9f3 100644 --- a/Signal/translations/ca.lproj/Localizable.strings +++ b/Signal/translations/ca.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Sense membres"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 membre"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Reenvia aquest missatge"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Reenvia el missatge seleccionat"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Respon aquest missatge"; diff --git a/Signal/translations/cs.lproj/Localizable.strings b/Signal/translations/cs.lproj/Localizable.strings index 9b5f0a7d10..ecb616bbc8 100644 --- a/Signal/translations/cs.lproj/Localizable.strings +++ b/Signal/translations/cs.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Přeposlat tuto zprávu"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Odpovědět na tuto zprávu"; diff --git a/Signal/translations/da.lproj/Localizable.strings b/Signal/translations/da.lproj/Localizable.strings index 0e8b67abaa..c8ce798f27 100644 --- a/Signal/translations/da.lproj/Localizable.strings +++ b/Signal/translations/da.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Ingen medlemmer"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 medlem"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Videresend beskeden"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Videresend valgte beskeder"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Svar på denne besked"; diff --git a/Signal/translations/de.lproj/Localizable.strings b/Signal/translations/de.lproj/Localizable.strings index 627c9f0f7d..a8bad8a742 100644 --- a/Signal/translations/de.lproj/Localizable.strings +++ b/Signal/translations/de.lproj/Localizable.strings @@ -228,7 +228,7 @@ "ATTACHMENT_KEYBOARD_NO_PHOTO_ACCESS" = "Erlaube in den Einstellungen Zugriff auf deine Fotos, um sie hier versenden zu können."; /* A string indicating to the user that once they take photos, they'll be able to send them from this view. */ -"ATTACHMENT_KEYBOARD_NO_PHOTOS" = "Sobald du Fotos aufgenommen hast, kannst du diese hier versenden."; +"ATTACHMENT_KEYBOARD_NO_PHOTOS" = "Sobald du Fotos aufgenommen hast, kannst du sie hier versenden."; /* Accessibility label for attaching photos */ "ATTACHMENT_LABEL" = "Anhang"; @@ -336,7 +336,7 @@ "BLOCK_LIST_UNBLOCK_CONTACT_MESSAGE" = "Ihr werdet einander schreiben und euch anrufen können."; /* Action sheet body when confirming you want to unblock a group */ -"BLOCK_LIST_UNBLOCK_GROUP_BODY" = "Vorhandene Mitglieder werden dich wieder zur Gruppe hinzufügen können."; +"BLOCK_LIST_UNBLOCK_GROUP_BODY" = "Bestehende Mitglieder werden dich wieder zur Gruppe hinzufügen können."; /* An explanation of what unblocking a group means. */ "BLOCK_LIST_UNBLOCK_GROUP_MESSAGE" = "Gruppenmitglieder werden dich wieder zu dieser Gruppe hinzufügen können."; @@ -369,7 +369,7 @@ "BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE_FORMAT" = "%@ wurde freigegeben."; /* Alert body after unblocking a group. */ -"BLOCK_LIST_VIEW_UNBLOCKED_GROUP_ALERT_BODY" = "Vorhandene Mitglieder können dich jetzt wieder zur Gruppe hinzufügen."; +"BLOCK_LIST_VIEW_UNBLOCKED_GROUP_ALERT_BODY" = "Bestehende Mitglieder können dich jetzt wieder zur Gruppe hinzufügen."; /* Action sheet that will block an unknown user. */ "BLOCK_OFFER_ACTIONSHEET_BLOCK_ACTION" = "Blockieren"; @@ -735,7 +735,7 @@ "CONVERSATION_SETTINGS_ADD_MEMBERS" = "Mitglieder hinzufügen"; /* Label for 'new contact' button in conversation settings view. */ -"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Zu vorhandenem Kontakt hinzufügen"; +"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Zu bestehendem Kontakt hinzufügen"; /* button in conversation settings view. */ "CONVERSATION_SETTINGS_ADD_TO_SYSTEM_CONTACTS" = "Zu Systemkontakten hinzufügen"; @@ -801,10 +801,10 @@ "CONVERSATION_SETTINGS_MEMBERS_SECTION_TITLE_FORMAT" = "%@ Mitglieder"; /* Title of the 'mute this thread' action sheet. */ -"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Stumm"; +"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Stummschalten"; /* label for 'mute thread' cell in conversation settings */ -"CONVERSATION_SETTINGS_MUTE_LABEL" = "Stumm"; +"CONVERSATION_SETTINGS_MUTE_LABEL" = "Stummschalten"; /* Indicates that the current thread is not muted. */ "CONVERSATION_SETTINGS_MUTE_NOT_MUTED" = "Nicht stummgeschaltet"; @@ -915,7 +915,7 @@ "DATABASE_VIEW_OVERLAY_SUBTITLE" = "Dies kann einige Minuten dauern."; /* Title shown while the app is updating its database. */ -"DATABASE_VIEW_OVERLAY_TITLE" = "Datenbankoptimierung"; +"DATABASE_VIEW_OVERLAY_TITLE" = "Datenbank wird optimiert"; /* Format string for a relative time, expressed as a certain number of hours in the past. Embeds {{The number of hours}}. */ "DATE_HOURS_AGO_FORMAT" = "Vor %@ h"; @@ -1290,7 +1290,7 @@ "GRDB_MIGRATION_NOTIFICATION_BODY" = "Diese Signal-Version beinhaltet Datenbankoptimierungen und Leistungsverbesserungen. Möglicherweise musst du die App öffnen, um den Vorgang abzuschließen."; /* Title of notification shown during GRDB migration indicating that user may need to open app to view their content. */ -"GRDB_MIGRATION_NOTIFICATION_TITLE" = "Optimieren der Datenbank"; +"GRDB_MIGRATION_NOTIFICATION_TITLE" = "Datenbank wird optimiert"; /* Message indicating that the access to the group's attributes was changed by the local user. Embeds {{new access level}}. */ "GROUP_ACCESS_ATTRIBUTES_UPDATED_BY_LOCAL_USER_FORMAT" = "Du hast die Bearbeitungsberechtigten für Gruppendetails auf »%@« geändert."; @@ -1407,10 +1407,10 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Keine Mitglieder"; /* The 'group member count' indicator when there is 1 member in the group. */ -"GROUP_MEMBER_COUNT_LABEL_1" = "1 member"; +"GROUP_MEMBER_COUNT_LABEL_1" = "1 Mitglied"; /* Format for the 'group member count' indicator. Embeds {the number of group members}. */ "GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ Mitglieder"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Diese Nachricht weiterleiten"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Ausgewählte Nachricht weiterleiten"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Diese Nachricht beantworten"; diff --git a/Signal/translations/el.lproj/Localizable.strings b/Signal/translations/el.lproj/Localizable.strings index adf436ea81..82ea24f413 100644 --- a/Signal/translations/el.lproj/Localizable.strings +++ b/Signal/translations/el.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Προώθηση Μηνύματος"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Απάντηση σε αυτό το Μήνυμα"; diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index ab44d2b1ca..e189a6a553 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -1877,9 +1877,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/es.lproj/Localizable.strings b/Signal/translations/es.lproj/Localizable.strings index 1eac6952e1..d166fb718d 100644 --- a/Signal/translations/es.lproj/Localizable.strings +++ b/Signal/translations/es.lproj/Localizable.strings @@ -1407,10 +1407,10 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Sin participantes"; /* The 'group member count' indicator when there is 1 member in the group. */ -"GROUP_MEMBER_COUNT_LABEL_1" = "1 miembro"; +"GROUP_MEMBER_COUNT_LABEL_1" = "1 participante"; /* Format for the 'group member count' indicator. Embeds {the number of group members}. */ "GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ participantes"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Reenviar mensaje"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Reenviar mensaje seleccionado"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Responder a este mensaje"; diff --git a/Signal/translations/et.lproj/Localizable.strings b/Signal/translations/et.lproj/Localizable.strings index 90fc1c2913..75e04e4f88 100644 --- a/Signal/translations/et.lproj/Localizable.strings +++ b/Signal/translations/et.lproj/Localizable.strings @@ -225,7 +225,7 @@ "ATTACHMENT_KEYBOARD_LOCATION" = "Asukoht"; /* A string indicating to the user that they'll be able to send photos from this view once they enable photo access. */ -"ATTACHMENT_KEYBOARD_NO_PHOTO_ACCESS" = "Luba sätetes ligipääs enda fotodele, et saaksid neid siit saata."; +"ATTACHMENT_KEYBOARD_NO_PHOTO_ACCESS" = "Luba sätetes juurdepääs enda fotodele, et saaksid neid siit saata."; /* A string indicating to the user that once they take photos, they'll be able to send them from this view. */ "ATTACHMENT_KEYBOARD_NO_PHOTOS" = "Kui oled fotod pildistanud, siis saad neid siit saata."; @@ -405,10 +405,10 @@ "CALL_AGAIN_BUTTON_TITLE" = "Helista uuesti"; /* Alert message when calling and permissions for microphone are missing */ -"CALL_AUDIO_PERMISSION_MESSAGE" = "Kõnede ja häälsõnumite tegemiseks on vaja anda rakenduses Settings anda Signal-ile ligipääs mikrofonile."; +"CALL_AUDIO_PERMISSION_MESSAGE" = "Kõnede ja häälsõnumite tegemiseks on vaja anda rakenduses Settings anda Signal-ile juurdepääs mikrofonile."; /* Alert title when calling and permissions for microphone are missing */ -"CALL_AUDIO_PERMISSION_TITLE" = "Ligipääs mikrofonile on vajalik"; +"CALL_AUDIO_PERMISSION_TITLE" = "Juurdepääs mikrofonile on vajalik"; /* notification body */ "CALL_INCOMING_NOTIFICATION_BODY" = "Sissetulev kõne"; @@ -552,7 +552,7 @@ "COMPOSE_MESSAGE_USERNAME_SEARCH_SECTION_TITLE" = "Kasutajanime otsing"; /* Multi-line label explaining why compose-screen contact picker is empty. */ -"COMPOSE_SCREEN_MISSING_CONTACTS_PERMISSION" = "Sul on võimalik iOSi sätetes lubada ligipääs kontaktidele, et näha, kes sinu kontaktidest on Signal-i kasutajad."; +"COMPOSE_SCREEN_MISSING_CONTACTS_PERMISSION" = "iOS-i sätetes on võimalik lubada juurdepääs kontaktidele, et näha, kes sinu kontaktidest on Signal-i kasutajad."; /* No comment provided by engineer. */ "CONFIRM_ACCOUNT_DESTRUCTION_TEXT" = "See toiming lähtestab rakenduse, kustutades kõik sõnumid ja eemaldades serverist sinu registreerimise. Rakendus sulgub pärast andmete kustutamist."; @@ -1023,10 +1023,10 @@ "DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Tsenseerimisest möödahiilimise asukoht"; /* Alert body for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */ -"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "Ligipääsu on võimalik anda rakenduses Settings."; +"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "Juurdepääsu on võimalik anda rakenduses Settings."; /* Alert title for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */ -"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_TITLE" = "Kontakti info muutmiseks vajab Signal ligipääsu kontaktidele"; +"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_TITLE" = "Kontakti info muutmiseks vajab Signal juurdepääsu kontaktidele"; /* table cell label in conversation settings */ "EDIT_GROUP_ACTION" = "Muuda gruppi"; @@ -1080,7 +1080,7 @@ "EMPTY_CONTACTS_LABEL_LINE2" = "Miks mitte kutsuda keegi?"; /* Indicates that user should confirm their 'two factor auth pin'. */ -"ENABLE_2FA_VIEW_CONFIRM_PIN_INSTRUCTIONS" = "Kinnita enda PIN-kood."; +"ENABLE_2FA_VIEW_CONFIRM_PIN_INSTRUCTIONS" = "Kinnita PIN-kood."; /* Error indicating that attempt to disable 'two-factor auth' failed. */ "ENABLE_2FA_VIEW_COULD_NOT_DISABLE_2FA" = "Registreerimisluku keelamine ei õnnestunud."; @@ -1314,13 +1314,13 @@ "GROUP_ACCESS_LEVEL_UNKNOWN" = "Tundmatu"; /* Message indicating that the access to the group's members was changed by the local user. Embeds {{new access level}}. */ -"GROUP_ACCESS_MEMBERS_UPDATED_BY_LOCAL_USER_FORMAT" = "You changed who can edit group membership to “%@“."; +"GROUP_ACCESS_MEMBERS_UPDATED_BY_LOCAL_USER_FORMAT" = "Sa muutsid grupi liikmete muutmise tasemeks “%@“."; /* Message indicating that the access to the group's members was changed by a remote user. Embeds {{ %1$@ user who changed the access, %2$@ new access level}}. */ -"GROUP_ACCESS_MEMBERS_UPDATED_BY_REMOTE_USER_FORMAT" = "%1$@ changed who can edit group membership to “%2$@“."; +"GROUP_ACCESS_MEMBERS_UPDATED_BY_REMOTE_USER_FORMAT" = "%1$@ muutis grupi liikmete muutmise tasemeks “%2$@“."; /* Message indicating that the access to the group's members was changed. Embeds {{new access level}}. */ -"GROUP_ACCESS_MEMBERS_UPDATED_FORMAT" = "Group membership can be changed by “%@“."; +"GROUP_ACCESS_MEMBERS_UPDATED_FORMAT" = "Grupi liikmeid saavad muuta “%@“."; /* Error indicating that a member cannot be added to a group. */ "GROUP_CANNOT_ADD_INVALID_MEMBER" = "Seda kasutajat pole võimalik gruppi lisada."; @@ -1359,7 +1359,7 @@ "GROUP_LOCAL_USER_GRANTED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%@ tegi sind administraatoriks."; /* Message indicating that the local user accepted an invite to the group. */ -"GROUP_LOCAL_USER_INVITE_ACCEPTED" = "Sa aktsepteerisid grupiga liitumise kutset."; +"GROUP_LOCAL_USER_INVITE_ACCEPTED" = "Sa nõustusid grupiga liitumise kutsega."; /* Message indicating that the local user accepted an invite to the group. Embeds {{user who invited the local user}}. */ "GROUP_LOCAL_USER_INVITE_ACCEPTED_FORMAT" = "Sa nõustusid grupiga liitumise kutsega kasutajalt %@."; @@ -1371,10 +1371,10 @@ "GROUP_LOCAL_USER_INVITE_DECLINED_FORMAT" = "Sa keeldusid grupiga liitumise kutsest kasutajalt %@."; /* Message indicating that the local user's invite was revoked by another user. Embeds {{remote user name}}. */ -"GROUP_LOCAL_USER_INVITE_REVOKED_BY_REMOTE_USER_FORMAT" = "%@ võttis tagasi sinu grupiga liitumise kutse."; +"GROUP_LOCAL_USER_INVITE_REVOKED_BY_REMOTE_USER_FORMAT" = "%@ tühistas sinu grupiga liitumise kutse."; /* Message indicating that the local user's invite was revoked by an unknown user. */ -"GROUP_LOCAL_USER_INVITE_REVOKED_BY_UNKNOWN_USER" = "Sinu grupiga liitumise kutse võeti tagasi."; +"GROUP_LOCAL_USER_INVITE_REVOKED_BY_UNKNOWN_USER" = "Sinu grupiga liitumise kutse tühistati."; /* Message indicating that the local user was invited to the group by another user. Embeds {{remote user name}}. */ "GROUP_LOCAL_USER_INVITED_BY_REMOTE_USER_FORMAT" = "%@ kutsus sind."; @@ -1392,10 +1392,10 @@ "GROUP_LOCAL_USER_REMOVED_BY_UNKNOWN_USER" = "Sind eemaldati grupist."; /* Message indicating that the local user had their administrator role revoked. */ -"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR" = "Sinu administraatoriõigused eemaldati."; +"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR" = "Sinu administraatoriõigused tühistati."; /* Message indicating that the local user had their administrator role revoked by another user. Embeds {{remote user name}}. */ -"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%@ eemaldas sinu administraatoriõigused."; +"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%@ tühistas sinu administraatoriõigused."; /* Conversation settings table section title */ "GROUP_MANAGEMENT_SECTION" = "Grupi haldamine"; @@ -1407,10 +1407,10 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Liikmeid pole"; /* The 'group member count' indicator when there is 1 member in the group. */ -"GROUP_MEMBER_COUNT_LABEL_1" = "1 member"; +"GROUP_MEMBER_COUNT_LABEL_1" = "1 liige"; /* Format for the 'group member count' indicator. Embeds {the number of group members}. */ "GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ liiget"; @@ -1443,13 +1443,13 @@ "GROUP_NAME_PLACEHOLDER" = "Grupi nimi (kohustuslik)"; /* Message indicating that a remote user has accepted their invite. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_ACCEPTED_INVITE_FORMAT" = "%@ aktsepteeris grupiga liitumise kutse."; +"GROUP_REMOTE_USER_ACCEPTED_INVITE_FORMAT" = "%@ nõustus grupiga liitumise kutsega."; /* Message indicating that a remote user has accepted an invite from the local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_ACCEPTED_INVITE_FROM_LOCAL_USER_FORMAT" = "%@ aktsepteeris sinu grupiga liitumise kutse."; +"GROUP_REMOTE_USER_ACCEPTED_INVITE_FROM_LOCAL_USER_FORMAT" = "%@ nõustus sinu grupiga liitumise kutsega."; /* Message indicating that a remote user has accepted their invite. Embeds {{ %1$@ user who accepted their invite, %2$@ user who invited the user}}. */ -"GROUP_REMOTE_USER_ACCEPTED_INVITE_FROM_REMOTE_USER_FORMAT" = "%1$@ aktsepteeris grupiga liitumise kutse kasutajalt %2$@."; +"GROUP_REMOTE_USER_ACCEPTED_INVITE_FROM_REMOTE_USER_FORMAT" = "%1$@ nõustus grupiga liitumise kutsega kasutajalt %2$@."; /* Message indicating that a remote user was added to the group by the local user. Embeds {{remote user name}}. */ "GROUP_REMOTE_USER_ADDED_TO_GROUP_BY_LOCAL_USER_FORMAT" = "Sa lisasid kasutaja %@."; @@ -1479,19 +1479,19 @@ "GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ tegi kasutaja %2$@ administraatoriks."; /* Message indicating that a single remote user's invite was revoked. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_1" = "Kutse grupiga liitumiseks lükati 1 isiku poolt tagasi."; +"GROUP_REMOTE_USER_INVITE_REVOKED_1" = "1 isiku grupiga liitumise kutse tühistati."; /* Message indicating that a remote user's invite was revoked by the local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_LOCAL_USER_FORMAT" = "Grupiga liitumise kutse võeti tagasi %@ poolt."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_LOCAL_USER_FORMAT" = "Kasutaja %@ grupiga liitumise kutse tühistati."; /* Message indicating that a single remote user's invite was revoked by a remote user. Embeds {{ user who revoked the invite }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_1_FORMAT" = "%@ revoked an invitation to the group for 1 person."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_1_FORMAT" = "%@ tühistas 1 isiku grupiga liitumise kutse."; /* Message indicating that a group of remote users' invites were revoked by a remote user. Embeds {{ %1$@ user who revoked the invite, %2$@ number of users }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_N_FORMAT" = "%1$@ revoked an invitation to the group for %2$@ people."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_N_FORMAT" = "%1$@ tühistas %2$@ isiku grupiga liitumise kutse."; /* Message indicating that a group of remote users' invites were revoked. Embeds {{ number of users }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_N_FORMAT" = "Invitations to the group were revoked for %@ people."; +"GROUP_REMOTE_USER_INVITE_REVOKED_N_FORMAT" = " %@ isiku grupiga liitumise kutsed tühistati."; /* Message indicating that a single remote user was invited to the group. */ "GROUP_REMOTE_USER_INVITED_1" = "1 isik kutsuti gruppi."; @@ -1521,13 +1521,13 @@ "GROUP_REMOTE_USER_REMOVED_FROM_GROUP_BY_REMOTE_USER_FORMAT" = "%1$@ eemaldas kasutaja %2$@."; /* Message indicating that a remote user had their administrator role revoked. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR" = "%@ had their admin privileges revoked."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR" = "Kasutaja %@ administraatoriõigused tühistati."; /* Message indicating that a remote user had their administrator role revoked by local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_LOCAL_USER" = "Sa võtsid tagasi administraatori õigused kasutajalt %@."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_LOCAL_USER" = "Sa tühistasid kasutaja %@ administraatoriõigused."; /* Message indicating that a remote user had their administrator role revoked by another user. Embeds {{ %1$@ user who revoked, %2$@ user who was granted administrator role}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ revoked admin privileges from %2$@."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ tühistas kasutaja %2$@ administraatoriõigused."; /* Info message indicating that the group was updated by an unknown user. */ "GROUP_UPDATED" = "Grupp uuendatud."; @@ -1629,7 +1629,7 @@ "HOME_VIEW_MESSAGE_REQUEST_ADDED_TO_GROUP_FORMAT" = "%@ lisas sind gruppi"; /* Table cell subtitle label for a conversation the user has not accepted. */ -"HOME_VIEW_MESSAGE_REQUEST_CONVERSATION" = "Sõnumipäring"; +"HOME_VIEW_MESSAGE_REQUEST_CONVERSATION" = "Sõnumisoov"; /* Format string when search returns no results. Embeds {{search term}} */ "HOME_VIEW_SEARCH_NO_RESULTS_FORMAT" = "Otsingule '%@' ei leitud vasteid"; @@ -1668,7 +1668,7 @@ "INBOX_VIEW_EMPTY_INBOX" = "Lisa oma postkasti midagi, näiteks alusta sõbraga sõnumite vahetamist."; /* Multi-line label explaining how to show names instead of phone numbers in your inbox */ -"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "Sul on võimalik iOSi sätetes lubada juurdepääs kontaktidele, et näha Signal-i vestluste nimekirjas kontaktide nimesid."; +"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "iOS-i sätetes on võimalik lubada juurdepääs kontaktidele, et näha kontaktide nimesid Signal-i vestluste nimekirjas."; /* info message text in conversation view */ "INCOMING_CALL" = "Sissetulev kõne"; @@ -1698,10 +1698,10 @@ "INVALID_AUDIO_FILE_ALERT_ERROR_MESSAGE" = "Vigane audiofail."; /* Alert body when contacts disabled while trying to invite contacts to signal */ -"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "Sul on võimalik iOSi sätetes lubada juurdepääs kontaktidele, et saaksid kutsuda sõpru Signal-it kasutama."; +"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "iOS-i sätetes on võimalik lubada juurdepääs kontaktidele, et saaksid kutsuda sõpru Signal-it kasutama."; /* Alert title when contacts disabled while trying to invite contacts to signal */ -"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_TITLE" = "Ligipääs kontaktidele"; +"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_TITLE" = "Juurdepääs kontaktidele"; /* Label for the cell that presents the 'invite contacts' workflow. */ "INVITE_FRIENDS_CONTACT_TABLE_BUTTON" = "Kutsu sõpru Signalisse"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Edasta see sõnum"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Edasta valitud sõnum"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Vasta sellele sõnumile"; @@ -1938,7 +1935,7 @@ "MESSAGE_REQUEST_BLOCK_AND_DELETE_ACTION" = "Blokeeri ja kustuta"; /* Action sheet message to confirm blocking a conversation via a message request. */ -"MESSAGE_REQUEST_BLOCK_CONVERSATION_MESSAGE" = "Blokeeritud kasutajatel pole võimalik sulle helistada ega sõnumeid saata."; +"MESSAGE_REQUEST_BLOCK_CONVERSATION_MESSAGE" = "Blokeeritud isikutel pole võimalik sulle helistada ega sõnumeid saata."; /* Action sheet title to confirm blocking a contact via a message request. Embeds {{contact name or phone number}} */ "MESSAGE_REQUEST_BLOCK_CONVERSATION_TITLE_FORMAT" = "Kas blokeerida %@?"; @@ -1974,10 +1971,10 @@ "MESSAGE_REQUEST_VIEW_BLOCK_BUTTON" = "Blokeeri"; /* A prompt notifying that the user must unblock this conversation to continue. Embeds {{contact name}}. */ -"MESSAGE_REQUEST_VIEW_BLOCKED_CONTACT_PROMPT_FORMAT" = "Do you want to let %@ message you? You won't receive any messages until you unblock them."; +"MESSAGE_REQUEST_VIEW_BLOCKED_CONTACT_PROMPT_FORMAT" = "Kas sa lubad kasutajal %@ sulle sõnumeid saata? Sa ei saa enne sõnumeid kui oled blokeeringu eemaldanud."; /* A prompt notifying that the user must unblock this group to continue. Embeds {{group name}}. */ -"MESSAGE_REQUEST_VIEW_BLOCKED_GROUP_PROMPT_FORMAT" = "Do you want to let the group %@ message you? You won't receive any messages until you unblock them."; +"MESSAGE_REQUEST_VIEW_BLOCKED_GROUP_PROMPT_FORMAT" = "Kas sa lubad grupil %@ sulle sõnumeid saata? Sa ei saa enne sõnumeid kui oled blokeeringu eemaldanud."; /* incoming message request button text which deletes a conversation */ "MESSAGE_REQUEST_VIEW_DELETE_BUTTON" = "Kustuta"; @@ -1989,7 +1986,7 @@ "MESSAGE_REQUEST_VIEW_EXISTING_GROUP_PROMPT_FORMAT" = "Vestluse jätkamiseks kontaktiga %@ pead enda profiili jagama."; /* A prompt for the user to accept or decline an invite to a group. Embeds {{name of user who invited you}}. */ -"MESSAGE_REQUEST_VIEW_GROUP_INVITE_PROMPT_FORMAT" = "You were invited to this group by %@. Do you want to let members of this group message you?"; +"MESSAGE_REQUEST_VIEW_GROUP_INVITE_PROMPT_FORMAT" = "Sind kutsuti kasutaja %@ poolt sellesse gruppi . Kas sa lubad selle grupi liikmetel sulle sõnumeid saata?"; /* A prompt asking if the user wants to accept a conversation invite. Embeds {{contact name}}. */ "MESSAGE_REQUEST_VIEW_NEW_CONTACT_PROMPT_FORMAT" = "Kas sa lubad kasutajal %@ sulle sõnumeid saata? Nad ei saa teada, et sa oled nende sõnumeid näinud, kuni sa nõustud."; @@ -2010,7 +2007,7 @@ "MESSAGE_REQUESTS_SPLASH_ADD_PROFILE_NAME_BUTTON" = "Lisa profiilinimi"; /* Body text for message requests splash screen */ -"MESSAGE_REQUESTS_SPLASH_BODY" = "You can now choose to ”Accept” or ”Delete“ a new conversation. Names let people know who’s messaging them."; +"MESSAGE_REQUESTS_SPLASH_BODY" = "Nüüd saad valida, kas ”Nõustun” või ”Kustutan“ uue vestluse. Nimed võimaldavad inimestel teada saada, kes neile sõnumeid saadab."; /* Toast indicating that a profile name has been created. */ "MESSAGE_REQUESTS_SPLASH_MEGAPHONE_TOAST" = "Sinu profiilinimi on salvestatud."; @@ -2082,19 +2079,19 @@ "MISSING_CAMERA_PERMISSION_MESSAGE" = "Sul on võimalik iOSi sätetes lubada juurdepääs kaamerale, et teha Signal-iga videokõnesid."; /* Alert title */ -"MISSING_CAMERA_PERMISSION_TITLE" = "Signal vajab ligipääsu sinu kaamerale."; +"MISSING_CAMERA_PERMISSION_TITLE" = "Signal vajab juurdepääsu sinu kaamerale."; /* Alert body indicating the user has denied location permissios */ "MISSING_LOCATION_PERMISSION_MESSAGE" = "Sul on võimalik lubada see õigus iOSi sätete rakenduses."; /* Alert title indicating the user has denied location permissios */ -"MISSING_LOCATION_PERMISSION_TITLE" = "Selle funktsionaalsuse kasutamiseks vajab Signal ligipääsu su asukohale."; +"MISSING_LOCATION_PERMISSION_TITLE" = "Selle funktsionaalsuse kasutamiseks vajab Signal juurdepääsu su asukohale."; /* Alert body when user has previously denied media library access */ "MISSING_MEDIA_LIBRARY_PERMISSION_MESSAGE" = "Sul on võimalik lubada see õigus iOSi sätete rakenduses."; /* Alert title when user has previously denied media library access */ -"MISSING_MEDIA_LIBRARY_PERMISSION_TITLE" = "Selle funktsionaalsuse kasutamiseks vajab Signal ligipääsu sinu fotodele."; +"MISSING_MEDIA_LIBRARY_PERMISSION_TITLE" = "Selle funktsionaalsuse kasutamiseks vajab Signal juurdepääsu sinu fotodele."; /* alert title: cannot link - reached max linked devices */ "MULTIDEVICE_PAIRING_MAX_DESC" = "Rohkem seadmeid pole võimalik ühendada."; @@ -2130,7 +2127,7 @@ "NEW_GROUP_CREATION_FAILED" = "Uue grupi loomine ei õnnestunud."; /* Error indicating that a new group could not be created due to network connectivity problems. */ -"NEW_GROUP_CREATION_FAILED_DUE_TO_NETWORK" = "New group could not be created. Check your internet connection and try again."; +"NEW_GROUP_CREATION_FAILED_DUE_TO_NETWORK" = "Uue grupi loomine ei õnnestunud. Kontrolli internetiühendust ja proovi uuesti."; /* Message for error alert indicating that a group name is required. */ "NEW_GROUP_CREATION_MISSING_NAME_ALERT_MESSAGE" = "Grupi nimi on kohustuslik."; @@ -2226,10 +2223,10 @@ "ONBOARDING_2FA_CREATE_NEW_PIN" = "Loo uus PIN-kood"; /* Button asking if the user would like to enter an alphanumeric PIN */ -"ONBOARDING_2FA_ENTER_ALPHANUMERIC" = "Sisesta tähtnumbriline PIN"; +"ONBOARDING_2FA_ENTER_ALPHANUMERIC" = "Sisesta tähtnumbriline PIN-kood"; /* Button asking if the user would like to enter an numeric PIN */ -"ONBOARDING_2FA_ENTER_NUMERIC" = "Sisesta numbriline PIN"; +"ONBOARDING_2FA_ENTER_NUMERIC" = "Sisesta numbriline PIN-kood"; /* Label for the 'forgot 2FA PIN' link in the 'onboarding 2FA' view. */ "ONBOARDING_2FA_FORGOT_PIN_LINK" = "Kas vajad abi?"; @@ -2247,7 +2244,7 @@ "ONBOARDING_2FA_SKIP_AND_CREATE_NEW_PIN" = "Jäta vahele ja loo uus PIN-kood"; /* Explanation for the skip pin entry action sheet during onboarding. */ -"ONBOARDING_2FA_SKIP_PIN_ENTRY_MESSAGE" = "If you can’t remember your PIN, you can create a new one. You can register and use your account but you’ll lose some saved settings like your profile information."; +"ONBOARDING_2FA_SKIP_PIN_ENTRY_MESSAGE" = "Kui sa ei mäleta oma PIN-koodi, saad luua uue. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud seaded, näiteks oma profiiliteabe."; /* Title for the skip pin entry action sheet during onboarding. */ "ONBOARDING_2FA_SKIP_PIN_ENTRY_TITLE" = "Kas jätta PIN-koodi sisestamine vahele?"; @@ -2295,13 +2292,13 @@ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Vigane number"; /* Explanation of the 'onboarding pin attempts exhausted' view when reglock is disabled. */ -"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "You’ve run out of PIN guesses, but you can still access your Signal account by creating a new PIN. For your privacy and security your account will be restored without any saved profile information or settings."; +"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "PIN-koodi proovimised on otsa saanud, kuid pääsed siiski uue PIN-koodi loomisega oma Signal-i konto juurde. Privaatsuse ja turvalisuse huvides taastatakse sinu konto ilma salvestatud profiiliteabe või säteteta."; /* Label for the 'learn more' link when reglock is disabled in the 'onboarding pin attempts exhausted' view. */ "ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_LEARN_MORE" = "Uuri lähemalt PIN-koodide kohta"; /* Explanation of the 'onboarding pin attempts exhausted' view when reglock is enabled. */ -"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_REGLOCK_EXPLANATION" = "Sinu privaatsuse kaitseks ja sinu konto turvalisuse nimel oleme selle lukustanud 7 päevaks.\n\n7 päeva pärast on sul võimalik see telefoninumber uuesti registreerida ilma PIN-koodi vajamata. Kogu sisu eemaldatakse."; +"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_REGLOCK_EXPLANATION" = "Sinu privaatsuse kaitseks ja konto turvalisuse nimel oleme selle lukustanud 7 päevaks.\n\n7 päeva pärast on sul võimalik see telefoninumber uuesti registreerida ilma PIN-koodi vajamata. Kogu sisu eemaldatakse."; /* Label for the 'learn more' link when reglock is enabled in the 'onboarding pin attempts exhausted' view. */ "ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_REGLOCK_LEARN_MORE" = "Uuri lähemalt lukustatud kontode kohta."; @@ -2313,10 +2310,10 @@ "ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_TITLE" = "Sobimatu PIN-kood"; /* Title of the 'onboarding PIN' view. */ -"ONBOARDING_PIN_EXPLANATION" = "Sisesta PIN-kood, mille tegid enda konto jaoks. See erineb SMS-kontrollkoodist."; +"ONBOARDING_PIN_EXPLANATION" = "Sisesta oma konto jaoks loodud PIN-kood. See erineb teie SMS-i kinnituskoodist."; /* Title of the 'onboarding PIN' view. */ -"ONBOARDING_PIN_TITLE" = "Sisesta enda PIN-kood"; +"ONBOARDING_PIN_TITLE" = "Sisesta oma PIN-kood"; /* Link to the 'terms and privacy policy' in the 'onboarding splash' view. */ "ONBOARDING_SPLASH_TERM_AND_PRIVACY_POLICY" = "Tingimused ja privaatsuspoliitika"; @@ -2400,19 +2397,19 @@ "PENDING_GROUP_MEMBERS_NO_PENDING_MEMBERS" = "Kutseid pole."; /* Title of 'revoke invite' button. */ -"PENDING_GROUP_MEMBERS_REVOKE_INVITE_1_BUTTON" = "Võta kutse tagasi"; +"PENDING_GROUP_MEMBERS_REVOKE_INVITE_1_BUTTON" = "Tühista kutse"; /* Format for title of 'revoke invite' confirmation alert. Embeds {{ the name of the invited group member. }}. */ -"PENDING_GROUP_MEMBERS_REVOKE_INVITE_CONFIRMATION_TITLE_1_FORMAT" = "Kas võtta grupiga liitumise kutse kasutajale “%@“ tagasi?"; +"PENDING_GROUP_MEMBERS_REVOKE_INVITE_CONFIRMATION_TITLE_1_FORMAT" = "Kas tühistada kasutaja “%@“ grupiga liitumise kutse?"; /* Format for title of 'revoke invite' confirmation alert. Embeds {{ %1$@ the number of users they have invited, %2$@ name of the inviting group member. }}. */ -"PENDING_GROUP_MEMBERS_REVOKE_INVITE_CONFIRMATION_TITLE_N_FORMAT" = "Kas võtta tagasi %1$@ “%2$@“ poolt saadetud grupiga liitumise kutset?"; +"PENDING_GROUP_MEMBERS_REVOKE_INVITE_CONFIRMATION_TITLE_N_FORMAT" = "Kas tühistada kasutaja “%2$@“ poolt saadetud %1$@ grupiga liitumise kutset?"; /* Title of 'revoke invites' button. */ -"PENDING_GROUP_MEMBERS_REVOKE_INVITE_N_BUTTON" = "Võta kutsed tagasi"; +"PENDING_GROUP_MEMBERS_REVOKE_INVITE_N_BUTTON" = "Tühista kutsed"; /* Footer for the 'invites by other group members' section of the 'pending group members' view. */ -"PENDING_GROUP_MEMBERS_SECTION_FOOTER_INVITES_FROM_OTHER_MEMBERS" = "Details of people invited by other group members are not shown. If invitees choose to join, their information will be shared with the group at that time. They will not see any messages in the group until they join."; +"PENDING_GROUP_MEMBERS_SECTION_FOOTER_INVITES_FROM_OTHER_MEMBERS" = "Teiste grupiliikmete kutsutud inimeste üksikasju ei kuvata. Kui kutsutud soovivad liituda, jagatakse nende kohta grupile teavet pärast seda. Enne liitumist ei näe nad grupis ühtegi sõnumit."; /* Title for the 'invites by other group members' section of the 'pending group members' view. */ "PENDING_GROUP_MEMBERS_SECTION_TITLE_INVITES_FROM_OTHER_MEMBERS" = "Kutsed teiste grupi liikmete poolt"; @@ -2427,16 +2424,16 @@ "PER_MESSAGE_EXPIRATION_INVALID_CONTENT" = "Sissetuleva sõnumi käsitlemisel tekkis tõrge."; /* inbox cell and notification text for an already viewed view-once media message. */ -"PER_MESSAGE_EXPIRATION_NOT_VIEWABLE" = "Korra vaatamise meedia"; +"PER_MESSAGE_EXPIRATION_NOT_VIEWABLE" = "Ühekordne meedia"; /* Label for outgoing view-once messages. */ "PER_MESSAGE_EXPIRATION_OUTGOING_MESSAGE" = "Meedia"; /* inbox cell and notification text for a view-once photo. */ -"PER_MESSAGE_EXPIRATION_PHOTO_PREVIEW" = "Korra vaatamise foto"; +"PER_MESSAGE_EXPIRATION_PHOTO_PREVIEW" = "Ühekordne foto"; /* inbox cell and notification text for a view-once video. */ -"PER_MESSAGE_EXPIRATION_VIDEO_PREVIEW" = "Korra vaatamise video"; +"PER_MESSAGE_EXPIRATION_VIDEO_PREVIEW" = "Ühekordne video"; /* Label for view-once messages indicating that user can tap to view the message's contents. */ "PER_MESSAGE_EXPIRATION_VIEW_PHOTO" = "Vaata pilti"; @@ -2502,7 +2499,7 @@ "PIN_CREATION_ALPHANUMERIC_HINT" = "PIN-kood peab olema vähemalt 4 märgi pikkune"; /* Title of the 'pin creation' recreation view. */ -"PIN_CREATION_CHANGING_TITLE" = "Muuda enda PIN-koodi"; +"PIN_CREATION_CHANGING_TITLE" = "Muuda oma PIN-koodi"; /* Title of the 'pin creation' confirmation view. */ "PIN_CREATION_CONFIRM_TITLE" = "Kinnita PIN-kood"; @@ -2511,19 +2508,19 @@ "PIN_CREATION_CONFIRMATION_EXPLANATION" = "Sisesta PIN-kood uuesti"; /* Button asking if the user would like to create an alphanumeric PIN */ -"PIN_CREATION_CREATE_ALPHANUMERIC" = "Loo tähtnumbriline PIN"; +"PIN_CREATION_CREATE_ALPHANUMERIC" = "Loo tähtnumbriline PIN-kood"; /* Button asking if the user would like to create an numeric PIN */ -"PIN_CREATION_CREATE_NUMERIC" = "Loo numbriline PIN"; +"PIN_CREATION_CREATE_NUMERIC" = "Loo numbriline PIN-kood"; /* Error body indicating that the attempt to create a PIN failed. */ -"PIN_CREATION_ERROR_MESSAGE" = "Your PIN was not saved. We’ll prompt you to create a PIN later."; +"PIN_CREATION_ERROR_MESSAGE" = "PIN-koodi ei salvestatud. Pakume sulle PIN-koodi loomist hiljem uuesti."; /* Error title indicating that the attempt to create a PIN failed. */ "PIN_CREATION_ERROR_TITLE" = "PIN-koodi loomine ei õnnestunud"; /* The explanation in the 'pin creation' view. */ -"PIN_CREATION_EXPLANATION" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"PIN_CREATION_EXPLANATION" = "PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse."; /* Label indicating that the attempted PIN does not match the first PIN */ "PIN_CREATION_MISMATCH_ERROR" = "PIN-koodid pole samad. Proovi uuesti."; @@ -2535,10 +2532,10 @@ "PIN_CREATION_PIN_CONFIRMATION_HINT" = "Sisesta PIN-kood uuesti"; /* Indicates the work we are doing while creating the user's pin */ -"PIN_CREATION_PIN_PROGRESS" = "PINi loomine..."; +"PIN_CREATION_PIN_PROGRESS" = "PIN-koodi loomine..."; /* The re-creation explanation in the 'pin creation' view. */ -"PIN_CREATION_RECREATION_EXPLANATION" = "You can change your PIN as long as this device is registered."; +"PIN_CREATION_RECREATION_EXPLANATION" = "PIN-koodi saab muuta senikaua kuni see seade on registreeritud."; /* Title of the 'pin creation' recreation view. */ "PIN_CREATION_RECREATION_TITLE" = "Muuda enda PIN-koodi"; @@ -2553,16 +2550,16 @@ "PIN_REMINDER_FORGOT_PIN" = "Kas unustasid PIN-koodi?"; /* Action text for PIN reminder megaphone */ -"PIN_REMINDER_MEGAPHONE_ACTION" = "Kinnita PIN"; +"PIN_REMINDER_MEGAPHONE_ACTION" = "Kinnita PIN-kood"; /* Body for PIN reminder megaphone */ -"PIN_REMINDER_MEGAPHONE_BODY" = "We’ll occasionally ask you to verify your PIN so that you remember it."; +"PIN_REMINDER_MEGAPHONE_BODY" = "Aeg-ajalt palume sul PIN-koodi kinnitada, et see sulle meelde jääks."; /* Toast indicating that we'll ask you for your PIN again in 3 days. */ "PIN_REMINDER_MEGAPHONE_FEW_DAYS_TOAST" = "Tuletame paari päeva pärast uuesti meelde."; /* Title for PIN reminder megaphone */ -"PIN_REMINDER_MEGAPHONE_TITLE" = "Kinnita oma Signal-i PIN"; +"PIN_REMINDER_MEGAPHONE_TITLE" = "Kinnita oma Signal-i PIN-kood"; /* Toast indicating that we'll ask you for your PIN again tomorrow. */ "PIN_REMINDER_MEGAPHONE_TOMORROW_TOAST" = "Tuletame homme jälle meelde."; @@ -2583,16 +2580,16 @@ "PIN_REMINDER_TOO_SHORT_ERROR" = "PIN-kood peab olema vähemalt 4 numbri pikkune."; /* Action text for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_ACTION" = "Loo PIN"; +"PINS_MEGAPHONE_ACTION" = "Loo PIN-kood"; /* Body for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_BODY" = "PINs keep information that’s stored with Signal encrypted"; +"PINS_MEGAPHONE_BODY" = "PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna"; /* Toast indication that the user will be reminded later to setup their PIN. Embeds {{time until mandatory}} */ -"PINS_MEGAPHONE_SNOOZE_TOAST_FORMAT" = "We’ll remind you later. Creating a PIN will become mandatory in %ld days."; +"PINS_MEGAPHONE_SNOOZE_TOAST_FORMAT" = "Tuletame sulle hiljem meelde. PIN-koodi loomine muutub %ld päeva pärast kohustuslikuks."; /* Title for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_TITLE" = "Loo PIN"; +"PINS_MEGAPHONE_TITLE" = "Loo PIN-kood"; /* Toast indicating that a PIN has been created. */ "PINS_MEGAPHONE_TOAST" = "PIN-kood loodud. Saad seda sätetes muuta."; @@ -2637,7 +2634,7 @@ "PRIVACY_VERIFICATION_FAILURE_INVALID_QRCODE" = "Skannitud kood ei paista olema turvanumber. Kas te mõlemad kasutate uusimat Signal-i versiooni?"; /* Paragraph(s) shown alongside the safety number when verifying privacy with {{contact name}} */ -"PRIVACY_VERIFICATION_INSTRUCTIONS" = "Kui soovid kinnitada otspunktkrüpteerimist kasutajaga %@, siis võrdle ülalolevaid numbreid numbritega nende seadmes.\n\nTeise võimalusena saad skannida koodi tema telefonist või paluda tal sinu koodi skannida.."; +"PRIVACY_VERIFICATION_INSTRUCTIONS" = "Kui soovid kontrollida otspunktkrüptimise turvalisust kasutajaga %@, siis võrdle ülaltoodud numbreid nende seadme numbritega.\n\nTeise võimalusena saad skannida koodi tema telefonist või paluda tal sinu koodi skannida."; /* Navbar title */ "PRIVACY_VERIFICATION_TITLE" = "Kinnita turvanumber"; @@ -2652,13 +2649,13 @@ "PROFILE_NAME_REMINDER_MEGAPHONE_ACTION" = "Alustame"; /* Body for profile name reminder megaphone when user already has a profile name */ -"PROFILE_NAME_REMINDER_MEGAPHONE_HAS_NAME_BODY" = "Your profile can now include an optional last name."; +"PROFILE_NAME_REMINDER_MEGAPHONE_HAS_NAME_BODY" = "Nüüd saad lisada oma profiilie lisa-perekonnanime."; /* Title for profile name reminder megaphone when user already has a profile name */ "PROFILE_NAME_REMINDER_MEGAPHONE_HAS_NAME_TITLE" = "Kinnita enda profiilinimi"; /* Body for profile name reminder megaphone when user doesn't have a profile name */ -"PROFILE_NAME_REMINDER_MEGAPHONE_NO_NAME_BODY" = "This will be displayed when you start a new conversation or share it."; +"PROFILE_NAME_REMINDER_MEGAPHONE_NO_NAME_BODY" = "Seda kuvatakse, kui alustad uut vestlust või jagad seda."; /* Title for profile name reminder megaphone when user doesn't have a profile name */ "PROFILE_NAME_REMINDER_MEGAPHONE_NO_NAME_TITLE" = "Lisa profiilinimi"; @@ -2811,16 +2808,16 @@ "REGISTER_2FA_FORGOT_PIN_ALERT_TITLE" = "Kas vajad abi?"; /* Alert body for a forgotten SVR (V2) PIN */ -"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "Your PIN is a 4+ digit code you created that can be numeric or alphanumeric. If you can’t remember your PIN, you’ll have to wait 7 days to re-register your account."; +"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "Sinu PIN-kood on sinu loodud 4-kohaline numbriline kood, mis võib olla numbriline või tähtnumbriline. Kui sa ei mäleta oma PIN-koodi, siis pead oma konto uuesti registreerimiseks 7 päeva ootama."; /* Alert body for a forgotten SVR (V2) PIN when the user doesn't have reglock */ -"REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "Your PIN is a 4+ digit code you created that can be numeric or alphanumeric. If you can’t remember your PIN, you can create a new one. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "Sinu PIN-kood on sinu loodud 4-kohaline kood, mis võib olla numbriline või tähtnumbriline. Kui sa ei mäleta oma PIN-koodi, saad luua uue. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud sätted, näiteks oma profiiliteabe."; /* Alert body for a forgotten V1 PIN */ -"REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "Your PIN is a 4+ digit numeric code you created. If you can’t remember your PIN, you’ll have to wait 7 days to re-register your account."; +"REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "Sinu PIN-kood on sinu loodud 4-kohaline arvkood. Kui sa ei mäleta oma PIN-koodi, pead oma konto uuesti registreerimiseks ootama 7 päeva."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "You have %lu attempts remaining. If you run out of attempts, you can create a new PIN. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "Sul on jäänud %lu katsetust. Kui katsed otsa saavad, saad luua uue PIN-koodi. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud seaded, näiteks oma profiiliteabe."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock enabled. */ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_PLURAL_FORMAT" = "Sul on %lu katset jäänud. Kui katsete arv saab otsa, siis su konto blokeeritakse. 7 päeva pärast on sul võimalik konto uuesti registreerida ilma PIN-koodita, aga eelnevalt konto tühjendatakse ja sisu kustutatakse."; @@ -2829,10 +2826,10 @@ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_SINGLE" = "Sul on 1 katse jäänud. 7 päeva pärast on sul võimalik konto uuesti registreerida ilma PIN-koodita, aga eelnevalt konto tühjendatakse ja sisu kustutatakse."; /* Alert message explaining what happens if you get your pin wrong and have one attempt remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "You have 1 attempt remaining. If you run out of attempts, you can create a new PIN. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "Sul on jäänud 1 katsetus. Kui katsed otsa saavad, saad luua uue PIN-koodi. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud seaded, näiteks oma profiiliteabe."; /* Alert title explaining what happens if you forget your 'two-factor auth pin'. */ -"REGISTER_2FA_INVALID_PIN_ALERT_TITLE" = "Sobimatu PIN"; +"REGISTER_2FA_INVALID_PIN_ALERT_TITLE" = "Sobimatu PIN-kood"; /* Indicates the work we are doing while verifying the user's pin */ "REGISTER_2FA_PIN_PROGRESS" = "PIN-koodi kontrollimine..."; @@ -2955,7 +2952,7 @@ "SCREEN_LOCK_ACTIVITY_TIMEOUT_NONE" = "Kohe"; /* Indicates that an unknown error occurred while using Touch ID/Face ID/Phone Passcode. */ -"SCREEN_LOCK_ENABLE_UNKNOWN_ERROR" = "Autentimisele ligipääsemine ei õnnestunud."; +"SCREEN_LOCK_ENABLE_UNKNOWN_ERROR" = "Autentimisele juurdepääs ei õnnestunud."; /* Indicates that Touch ID/Face ID/Phone Passcode authentication failed. */ "SCREEN_LOCK_ERROR_LOCAL_AUTHENTICATION_FAILED" = "Autentimine ei õnnestunud."; @@ -3267,16 +3264,16 @@ "SETTINGS_NOTIFICATIONS" = "Teavitused"; /* Footer for the 'PINs' section of the privacy settings. */ -"SETTINGS_PINS_FOOTER" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"SETTINGS_PINS_FOOTER" = "PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse."; /* Label for the 'pins' item of the privacy settings when the user does have a pin. */ "SETTINGS_PINS_ITEM" = "Muuda enda PIN-koodi"; /* Label for the 'pins' item of the privacy settings when the user doesn't have a pin. */ -"SETTINGS_PINS_ITEM_CREATE" = "Loo PIN"; +"SETTINGS_PINS_ITEM_CREATE" = "Loo PIN-kood"; /* Title for the 'PINs' section of the privacy settings. */ -"SETTINGS_PINS_TITLE" = "SIGNAL PIN"; +"SETTINGS_PINS_TITLE" = "SIGNAL PIN-kood"; /* Label for 'CallKit privacy' preference */ "SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE" = "Näita helistaja nime ja numbrit"; @@ -3309,7 +3306,7 @@ "SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Lülita sisse"; /* Body for the alert confirming that the user wants to turn on registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "If you forget your Signal PIN when registering with Signal again, you’ll be locked out of your account for 7 days."; +"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "Kui unustad Signal-iga uuesti registreerumisel oma Signal PIN-koodi, lukustatakse sind 7 päevaks oma kontolt."; /* Title for the alert confirming that the user wants to turn on registration lock. */ "SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Kas lülitada registreerimislukk sisse?"; @@ -3372,7 +3369,7 @@ "SETTINGS_TWO_FACTOR_AUTH_TITLE" = "Registreerimislukk"; /* Footer for the 'two factor auth' section of the privacy settings when Signal PINs are available. */ -"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "For extra security, turn on registration lock, which will require your Signal PIN to register your phone number with Signal again."; +"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "Lisaturvalisuse huvides lülita sisse registreerimislukk, mis nõuab sinu telefoninumbri Signal-isse uuesti registreerimiseks Signal-i PIN-koodi ."; /* Label for the 'typing indicators' setting. */ "SETTINGS_TYPING_INDICATORS" = "Sisestamisindikaatorid"; @@ -3513,7 +3510,7 @@ "THREAD_DETAILS_MORE_MUTUAL_GROUP" = "Gruppide %@, %@ ja %lu muu grupi liige"; /* Subtitle appearing at the top of the users 'note to self' conversation */ -"THREAD_DETAILS_NOTE_TO_SELF_EXPLANATION" = "You can add notes for yourself in this conversation. If your account has any linked devices, new notes will be synced."; +"THREAD_DETAILS_NOTE_TO_SELF_EXPLANATION" = "Selles vestluses saate enda jaoks märkmeid lisada. Kui su kontol on lingitud seadmeid, sünkroonitakse uued märkmed."; /* A string indicating a mutual group the user shares with this contact. Embeds {{mutual group name}} */ "THREAD_DETAILS_ONE_MUTUAL_GROUP" = "Grupi %@ liige"; @@ -3654,13 +3651,13 @@ "UPDATE_GROUP_FAILED" = "Grupi uuendamine ei õnnestunud."; /* Error indicating that a group could not be updated due to network connectivity problems. */ -"UPDATE_GROUP_FAILED_DUE_TO_NETWORK" = "This action couldn’t be completed. Check your internet connection and try again."; +"UPDATE_GROUP_FAILED_DUE_TO_NETWORK" = "See tegevus ei õnnestunud. Kontrolli internetiühendust ja proovi uuesti."; /* Button to start a create pin flow from the one time splash screen that appears after upgrading */ "UPGRADE_EXPERIENCE_INTRODUCING_PINS_CREATE_BUTTON" = "Loo enda PIN-kood"; /* Body text for PINs splash screen */ -"UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_DESCRIPTION" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_DESCRIPTION" = "PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse."; /* Header for PINs splash screen */ "UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_TITLE" = "Tutvustame PIN-koode"; @@ -3681,7 +3678,7 @@ "USERNAME_INVALID_CHARACTERS_ERROR" = "Kasutajanimed võivad sisaldada a-z, 0-9 ja _"; /* A message indicating that username lookup failed. */ -"USERNAME_LOOKUP_ERROR" = "An error occurred while looking up the username. Please try again later."; +"USERNAME_LOOKUP_ERROR" = "Kasutajanime otsimisel tekkis tõrge. Palun proovi hiljem uuesti."; /* A message indicating that the given username is not a registered signal account. Embeds {{username}} */ "USERNAME_NOT_FOUND_FORMAT" = "%@ ei ole Signal-i kasutaja. Tee kindlaks, et sisestasid kasutajanime õigesti."; @@ -3744,7 +3741,7 @@ "VIEW_ONCE_MESSAGES_TOOLTIP" = "Koputa siia, et muuta see sõnum haihtuvaks pärast selle vaatamist."; /* Toast alert text shown when tapping on a view-once message that you have sent. */ -"VIEW_ONCE_OUTGOING_TOAST" = "Outgoing view-once media files are automatically removed after they are sent."; +"VIEW_ONCE_OUTGOING_TOAST" = "Väljuvad ühekordsed meediafailid kustutatakse automaatselt pärast nende saatmist."; /* Indicates how to cancel a voice message. */ "VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "Loobumiseks libista"; diff --git a/Signal/translations/fa.lproj/Localizable.strings b/Signal/translations/fa.lproj/Localizable.strings index 23c090a5b7..19e28e9d10 100644 --- a/Signal/translations/fa.lproj/Localizable.strings +++ b/Signal/translations/fa.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "ارسال این پیام"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "پاسخ به این پیام"; diff --git a/Signal/translations/fi.lproj/Localizable.strings b/Signal/translations/fi.lproj/Localizable.strings index e9d68e0356..51112f135d 100644 --- a/Signal/translations/fi.lproj/Localizable.strings +++ b/Signal/translations/fi.lproj/Localizable.strings @@ -312,7 +312,7 @@ "BACKUP_UNEXPECTED_ERROR" = "Odottamaton varmuuskopiointivirhe"; /* An explanation of the consequences of blocking a group. */ -"BLOCK_GROUP_BEHAVIOR_EXPLANATION" = "Et voi enää vastaanottaa viestejä tai päivityksiä tältä ryhmältä."; +"BLOCK_GROUP_BEHAVIOR_EXPLANATION" = "Et tule vastaanottamaan viestejä tai päivityksiä tältä ryhmältä."; /* Button label for the 'block' button */ "BLOCK_LIST_BLOCK_BUTTON" = "Estä"; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Ei jäseniä"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 jäsen"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Välitä tämä viesti"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Välitä valittu viesti"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Vastaa tähän viestiin"; @@ -2295,7 +2292,7 @@ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Virheellinen numero"; /* Explanation of the 'onboarding pin attempts exhausted' view when reglock is disabled. */ -"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "PIN-arvailut ovat loppuneet, mutta voit silti käyttää Signal-tiliäsi luomalla uuden PIN-koodin. Tietojesi ja turvallisuutesi vuoksi tili palautetaan ilman tallennettuja profiilitietoja tai asetuksia."; +"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "PIN-arvailut ovat loppuneet, mutta voit silti käyttää Signal-tiliäsi luomalla uuden PIN-koodin. Yksityisyytesi ja turvallisuutesi vuoksi tili palautetaan ilman tallennettuja profiilitietoja tai asetuksia."; /* Label for the 'learn more' link when reglock is disabled in the 'onboarding pin attempts exhausted' view. */ "ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_LEARN_MORE" = "Lisätietoja PIN-koodeista"; diff --git a/Signal/translations/fil.lproj/Localizable.strings b/Signal/translations/fil.lproj/Localizable.strings index 222ae8165e..06de5302f9 100644 --- a/Signal/translations/fil.lproj/Localizable.strings +++ b/Signal/translations/fil.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/fr.lproj/Localizable.strings b/Signal/translations/fr.lproj/Localizable.strings index f7682d528a..088cd129d3 100644 --- a/Signal/translations/fr.lproj/Localizable.strings +++ b/Signal/translations/fr.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Aucun membre"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 membre"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Transférer ce message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Transférer le message sélectionné"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Répondre à ce message"; diff --git a/Signal/translations/gl.lproj/Localizable.strings b/Signal/translations/gl.lproj/Localizable.strings index da6ff89a2e..7f137c7f5e 100644 --- a/Signal/translations/gl.lproj/Localizable.strings +++ b/Signal/translations/gl.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/he.lproj/Localizable.strings b/Signal/translations/he.lproj/Localizable.strings index a283762b3c..862a6d8b3d 100644 --- a/Signal/translations/he.lproj/Localizable.strings +++ b/Signal/translations/he.lproj/Localizable.strings @@ -1371,10 +1371,10 @@ "GROUP_LOCAL_USER_INVITE_DECLINED_FORMAT" = "סירבת הזמנה אל הקבוצה מן %@."; /* Message indicating that the local user's invite was revoked by another user. Embeds {{remote user name}}. */ -"GROUP_LOCAL_USER_INVITE_REVOKED_BY_REMOTE_USER_FORMAT" = "%@ פסל את ההזמנה שלך אל הקבוצה."; +"GROUP_LOCAL_USER_INVITE_REVOKED_BY_REMOTE_USER_FORMAT" = "%@ שלל את ההזמנה שלך אל הקבוצה."; /* Message indicating that the local user's invite was revoked by an unknown user. */ -"GROUP_LOCAL_USER_INVITE_REVOKED_BY_UNKNOWN_USER" = "ההזמנה שלך אל הקבוצה נפסלה."; +"GROUP_LOCAL_USER_INVITE_REVOKED_BY_UNKNOWN_USER" = "ההזמנה שלך אל הקבוצה נשללה."; /* Message indicating that the local user was invited to the group by another user. Embeds {{remote user name}}. */ "GROUP_LOCAL_USER_INVITED_BY_REMOTE_USER_FORMAT" = "%@ הזמין אותך."; @@ -1392,10 +1392,10 @@ "GROUP_LOCAL_USER_REMOVED_BY_UNKNOWN_USER" = "הוסרת מהקבוצה."; /* Message indicating that the local user had their administrator role revoked. */ -"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR" = "זכויות המינהל שלך נפסלו."; +"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR" = "זכויות המינהל שלך נשללו."; /* Message indicating that the local user had their administrator role revoked by another user. Embeds {{remote user name}}. */ -"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%@ פסל את זכויות המינהל שלך."; +"GROUP_LOCAL_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%@ שלל את זכויות המינהל שלך."; /* Conversation settings table section title */ "GROUP_MANAGEMENT_SECTION" = "פרטי קבוצה"; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "אין חברי קבוצה"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "חבר אחד"; @@ -1461,10 +1461,10 @@ "GROUP_REMOTE_USER_ADDED_TO_GROUP_FORMAT" = "%@ התווסף אל הקבוצה."; /* Message indicating that a remote user has declined their invite. */ -"GROUP_REMOTE_USER_DECLINED_INVITE" = "איש 1 סירב להזמנה אל הקבוצה."; +"GROUP_REMOTE_USER_DECLINED_INVITE" = "איש 1 סירב הזמנה אל הקבוצה."; /* Message indicating that a remote user has declined their invite. Embeds {{ user who invited them }}. */ -"GROUP_REMOTE_USER_DECLINED_INVITE_FORMAT" = "איש 1 שהוזמן על ידי %@ סירב להזמנה אל הקבוצה."; +"GROUP_REMOTE_USER_DECLINED_INVITE_FORMAT" = "איש 1 שהוזמן על ידי %@ סירב הזמנה אל הקבוצה."; /* Message indicating that a remote user has declined an invite to the group from the local user. Embeds {{remote user name}}. */ "GROUP_REMOTE_USER_DECLINED_INVITE_FROM_LOCAL_USER_FORMAT" = "%@ סירב להזמנה שלך אל הקבוצה."; @@ -1479,19 +1479,19 @@ "GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ עשה את %2$@ מינהלן."; /* Message indicating that a single remote user's invite was revoked. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_1" = "הזמנה אל הקבוצה נפסלה עבור איש 1."; +"GROUP_REMOTE_USER_INVITE_REVOKED_1" = "הזמנה אל הקבוצה נשללה עבור איש 1."; /* Message indicating that a remote user's invite was revoked by the local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_LOCAL_USER_FORMAT" = "הזמנה אל הקבוצה נפסלה עבור %@."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_LOCAL_USER_FORMAT" = "הזמנה אל הקבוצה נשללה עבור %@."; /* Message indicating that a single remote user's invite was revoked by a remote user. Embeds {{ user who revoked the invite }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_1_FORMAT" = "%@ פסל הזמנה אל הקבוצה עבור איש 1."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_1_FORMAT" = "%@ שלל הזמנה אל הקבוצה עבור איש 1."; /* Message indicating that a group of remote users' invites were revoked by a remote user. Embeds {{ %1$@ user who revoked the invite, %2$@ number of users }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_N_FORMAT" = "%1$@ פסל הזמנה אל הקבוצה עבור %2$@ אנשים."; +"GROUP_REMOTE_USER_INVITE_REVOKED_BY_REMOTE_USER_N_FORMAT" = "%1$@ שלל הזמנה אל הקבוצה עבור %2$@ אנשים."; /* Message indicating that a group of remote users' invites were revoked. Embeds {{ number of users }}. */ -"GROUP_REMOTE_USER_INVITE_REVOKED_N_FORMAT" = "הזמנות אל הקבוצה נפסלו עבור %@ אנשים."; +"GROUP_REMOTE_USER_INVITE_REVOKED_N_FORMAT" = "הזמנות אל הקבוצה נשללו עבור %@ אנשים."; /* Message indicating that a single remote user was invited to the group. */ "GROUP_REMOTE_USER_INVITED_1" = "איש 1 הוזמן אל הקבוצה."; @@ -1521,13 +1521,13 @@ "GROUP_REMOTE_USER_REMOVED_FROM_GROUP_BY_REMOTE_USER_FORMAT" = "%1$@ הסיר את %2$@."; /* Message indicating that a remote user had their administrator role revoked. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR" = "זכויות מינהל של %@ נפסלו."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR" = "זכויות מינהל של %@ נשללו."; /* Message indicating that a remote user had their administrator role revoked by local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_LOCAL_USER" = "פסלת זכויות מינהל מן %@."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_LOCAL_USER" = "שללת זכויות מינהל מן %@."; /* Message indicating that a remote user had their administrator role revoked by another user. Embeds {{ %1$@ user who revoked, %2$@ user who was granted administrator role}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ פסל זכויות מינהל מן %2$@."; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ שלל זכויות מינהל מן %2$@."; /* Info message indicating that the group was updated by an unknown user. */ "GROUP_UPDATED" = "קבוצה עודכנה."; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "העבר הלאה הודעה זו"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "העבר הלאה הודעות נבחרות"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "השב להודעה זו"; diff --git a/Signal/translations/hi.lproj/Localizable.strings b/Signal/translations/hi.lproj/Localizable.strings index 9eb979fa81..d41bd03cc5 100644 --- a/Signal/translations/hi.lproj/Localizable.strings +++ b/Signal/translations/hi.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "इस मेसेज को आगे भेजें"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "इस मेसेज का जवाब दें"; diff --git a/Signal/translations/hr.lproj/Localizable.strings b/Signal/translations/hr.lproj/Localizable.strings index 7f86b0b2e0..1c1518e246 100644 --- a/Signal/translations/hr.lproj/Localizable.strings +++ b/Signal/translations/hr.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/hu.lproj/Localizable.strings b/Signal/translations/hu.lproj/Localizable.strings index e73047d4c0..6c6c69637b 100644 --- a/Signal/translations/hu.lproj/Localizable.strings +++ b/Signal/translations/hu.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Nincsenek tagok"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 tag"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Üzenet továbbítása"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Továbbítod a kiválasztott üzeneteket?"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Válasz"; @@ -2250,7 +2247,7 @@ "ONBOARDING_2FA_SKIP_PIN_ENTRY_MESSAGE" = "Ha nem emlékszel PIN kódodra, készíthetsz újat. Regisztrálhatsz, majd használhatod a fiókodat, de mentett beállításaid egy része, mint profil információid elvesznek."; /* Title for the skip pin entry action sheet during onboarding. */ -"ONBOARDING_2FA_SKIP_PIN_ENTRY_TITLE" = "Skip PIN Entry?"; +"ONBOARDING_2FA_SKIP_PIN_ENTRY_TITLE" = "Kihagyod a PIN bevitelét?"; /* Title of the 'onboarding Captcha' view. */ "ONBOARDING_CAPTCHA_TITLE" = "Most bizonyíthatod emberi mivoltodat"; @@ -2295,7 +2292,7 @@ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Érvénytelen telefonszám"; /* Explanation of the 'onboarding pin attempts exhausted' view when reglock is disabled. */ -"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "You’ve run out of PIN guesses, but you can still access your Signal account by creating a new PIN. For your privacy and security your account will be restored without any saved profile information or settings."; +"ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_EXPLANATION" = "Kifogytál a PIN megadási lehetőségekből, de továbbra is hozzáférhetsz Signal fiókodhoz, amennyiben létrehozol egy új PIN-t. A magánszférád védelmének és saját biztonságod érdekében fiókod csak a mentett profilbeállítások nélkül állítható vissza."; /* Label for the 'learn more' link when reglock is disabled in the 'onboarding pin attempts exhausted' view. */ "ONBOARDING_PIN_ATTEMPTS_EXHAUSTED_LEARN_MORE" = "Bővebben a PIN kódokról"; @@ -2499,16 +2496,16 @@ "PHOTO_PICKER_UNNAMED_COLLECTION" = "Névtelen album"; /* Label indicating the user must use at least 4 characters */ -"PIN_CREATION_ALPHANUMERIC_HINT" = "PIN must be at least 4 characters"; +"PIN_CREATION_ALPHANUMERIC_HINT" = "A PIN kód hossza minimum 4 karakter"; /* Title of the 'pin creation' recreation view. */ "PIN_CREATION_CHANGING_TITLE" = "Adj meg egy új PIN kódot"; /* Title of the 'pin creation' confirmation view. */ -"PIN_CREATION_CONFIRM_TITLE" = "Confirm your PIN"; +"PIN_CREATION_CONFIRM_TITLE" = "PIN megerősítése"; /* The explanation of confirmation in the 'pin creation' view. */ -"PIN_CREATION_CONFIRMATION_EXPLANATION" = "Re-enter your PIN."; +"PIN_CREATION_CONFIRMATION_EXPLANATION" = "PIN újraellenőrzése"; /* Button asking if the user would like to create an alphanumeric PIN */ "PIN_CREATION_CREATE_ALPHANUMERIC" = "Hozz létre alfanumerikus PIN kódot"; @@ -2529,7 +2526,7 @@ "PIN_CREATION_MISMATCH_ERROR" = "PIN kódok nem egyeznek. Próbáld újra."; /* Label indicating the user must use at least 4 digits */ -"PIN_CREATION_NUMERIC_HINT" = "PIN must be at least 4 digits"; +"PIN_CREATION_NUMERIC_HINT" = "A PIN kód hossza minimum 4 számjegy"; /* Label indication the user must confirm their PIN. */ "PIN_CREATION_PIN_CONFIRMATION_HINT" = "PIN újraellenőrzése"; @@ -2586,7 +2583,7 @@ "PINS_MEGAPHONE_ACTION" = "PIN létrehozása"; /* Body for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_BODY" = "PINs keep information that’s stored with Signal encrypted"; +"PINS_MEGAPHONE_BODY" = "A PIN-nek köszönhetően a Signal által tárolt információk titkosítva vannak."; /* Toast indication that the user will be reminded later to setup their PIN. Embeds {{time until mandatory}} */ "PINS_MEGAPHONE_SNOOZE_TOAST_FORMAT" = "Később újra emlékeztetünk. PIN kódod létrehozása %ld nap múlva kötelezővé válik."; @@ -2811,16 +2808,16 @@ "REGISTER_2FA_FORGOT_PIN_ALERT_TITLE" = "Segítség?"; /* Alert body for a forgotten SVR (V2) PIN */ -"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "Your PIN is a 4+ digit code you created that can be numeric or alphanumeric. If you can’t remember your PIN, you’ll have to wait 7 days to re-register your account."; +"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "Signal PIN kódod 4+ karakter hosszú és szám, vagy alfanumerikus formátumú. Ha nem emlékszel rá, sajnos 7 napot várnod kell, míg újraregisztrálhatod a fiókodat."; /* Alert body for a forgotten SVR (V2) PIN when the user doesn't have reglock */ -"REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "Your PIN is a 4+ digit code you created that can be numeric or alphanumeric. If you can’t remember your PIN, you can create a new one. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "Signal PIN kódod egy általad létrehozott 4+ jegyű kód, amely lehet numerikus és alfanumerikus is. Amennyiben nem emlékszel PIN kódodra, lehetőséged van létrehozni egy újat. Ezután regisztrálhatsz, majd használhatod a fiókodat, de mentett beállításaid egy része, mint például a profilinformációid elvesznek."; /* Alert body for a forgotten V1 PIN */ "REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "Létrehozott PIN kódod egy 4+ karakter hosszú számsor. Ha nem emlékszel rá, sajnos 7 napot várnod kell, míg újraregisztrálhatod a fiókodat."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "You have %lu attempts remaining. If you run out of attempts, you can create a new PIN. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "Még %lu próbálkozásod maradt. Ha kifogysz belőlük, lehetőséged lesz új PIN létrehozására. Regisztrálhatsz újra, majd használatba veheted a fiókodat, de mentett beállításaid egy része, mint például a profilinformációid elvesznek. "; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock enabled. */ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_PLURAL_FORMAT" = "%lu próbálkozásod maradt. Ha mindet elrontod, a fiókot zárolásra kerül. 7 inaktív nap után újraregisztrálhatsz - immár PIN kód nélkül. A fiókod mindenestül törlésre kerül."; @@ -2829,7 +2826,7 @@ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_SINGLE" = "1 próbálkozásod maradt. Ha elrontod, a fiókot zárolásra kerül. 7 inaktív nap után újraregisztrálhatsz - immár PIN kód nélkül. A fiókod mindenestül törlésre kerül."; /* Alert message explaining what happens if you get your pin wrong and have one attempt remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "You have 1 attempt remaining. If you run out of attempts, you can create a new PIN. You can register and use your account but you’ll lose some saved settings like your profile information."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "Még 1 próbálkozásod maradt. Ha elrontod, lehetőséged lesz új PIN létrehozására. Regisztrálhatsz újra, majd használatba veheted a fiókodat, de mentett beállításaid egy része, mint például a profilinformációid elvesznek. "; /* Alert title explaining what happens if you forget your 'two-factor auth pin'. */ "REGISTER_2FA_INVALID_PIN_ALERT_TITLE" = "Hibás PIN"; @@ -3300,19 +3297,19 @@ "SETTINGS_READ_RECEIPTS_SECTION_FOOTER" = "Bekapcsolt állapotban ismerőseid értesítést kapnak, amint elolvastad az üzenetüket. Ez a beállítás opcionális és minden beszélgetésre vonatkozik."; /* Action to turn off registration lock */ -"SETTINGS_REGISTRATION_LOCK_TURN_OFF" = "Turn Off"; +"SETTINGS_REGISTRATION_LOCK_TURN_OFF" = "Kikapcsolás"; /* Title for the alert confirming that the user wants to turn off registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_OFF_TITLE" = "Turn Off Registration Lock?"; +"SETTINGS_REGISTRATION_LOCK_TURN_OFF_TITLE" = "Kikapcsolod a regisztrációs zárat?"; /* Action to turn on registration lock */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Turn On"; +"SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Bekapcsolás"; /* Body for the alert confirming that the user wants to turn on registration lock. */ "SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "Amennyiben elfelejted Signal PIN kódodat a következő Signal regisztáció alkalmával, 7 napra ki leszel zárva a fiókodból."; /* Title for the alert confirming that the user wants to turn on registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Turn On Registration Lock?"; +"SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Bekapcsolod a regisztrációs zárat?"; /* Label for re-link button. */ "SETTINGS_RELINK_BUTTON" = "Újratársítás"; @@ -3372,7 +3369,7 @@ "SETTINGS_TWO_FACTOR_AUTH_TITLE" = "Regisztrációs zár"; /* Footer for the 'two factor auth' section of the privacy settings when Signal PINs are available. */ -"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "For extra security, turn on registration lock, which will require your Signal PIN to register your phone number with Signal again."; +"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "Növeld a biztonságot azáltal, hogy a telefonszámod regisztrációját Signal PIN kódod megadásához kötöd."; /* Label for the 'typing indicators' setting. */ "SETTINGS_TYPING_INDICATORS" = "Gépelés mutatása"; diff --git a/Signal/translations/id.lproj/Localizable.strings b/Signal/translations/id.lproj/Localizable.strings index e483136627..6453a9ecdd 100644 --- a/Signal/translations/id.lproj/Localizable.strings +++ b/Signal/translations/id.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Teruskan Pesan Ini"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Balas Pesan Ini"; diff --git a/Signal/translations/it.lproj/Localizable.strings b/Signal/translations/it.lproj/Localizable.strings index a067ff9cbb..4c89a7673b 100644 --- a/Signal/translations/it.lproj/Localizable.strings +++ b/Signal/translations/it.lproj/Localizable.strings @@ -1407,10 +1407,10 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Nessun membro"; /* The 'group member count' indicator when there is 1 member in the group. */ -"GROUP_MEMBER_COUNT_LABEL_1" = "1 partecipante"; +"GROUP_MEMBER_COUNT_LABEL_1" = "1 membro"; /* Format for the 'group member count' indicator. Embeds {the number of group members}. */ "GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ membri"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Inoltra questo messaggio"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Inoltra messaggio selezionato"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Rispondi a questo messaggio"; diff --git a/Signal/translations/ja.lproj/Localizable.strings b/Signal/translations/ja.lproj/Localizable.strings index d4e22ab32d..0e6f1e427d 100644 --- a/Signal/translations/ja.lproj/Localizable.strings +++ b/Signal/translations/ja.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "このメッセージを転送"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "このメッセージに返信"; diff --git a/Signal/translations/km.lproj/Localizable.strings b/Signal/translations/km.lproj/Localizable.strings index ab84f28b39..0666ade6f4 100644 --- a/Signal/translations/km.lproj/Localizable.strings +++ b/Signal/translations/km.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "បញ្ជូនសារនេះបន្ត"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "ឆ្លើយតបទៅកាន់សារនេះ"; diff --git a/Signal/translations/ko.lproj/Localizable.strings b/Signal/translations/ko.lproj/Localizable.strings index d398571b45..a0f0ef0e4d 100644 --- a/Signal/translations/ko.lproj/Localizable.strings +++ b/Signal/translations/ko.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/lt.lproj/Localizable.strings b/Signal/translations/lt.lproj/Localizable.strings index 2eea2f88a9..6439b48c09 100644 --- a/Signal/translations/lt.lproj/Localizable.strings +++ b/Signal/translations/lt.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Persiųsti šią žinutę"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Persiųsti pažymėtą žinutę"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Atsakyti į šią žinutę"; diff --git a/Signal/translations/lv.lproj/Localizable.strings b/Signal/translations/lv.lproj/Localizable.strings index a86c5ea85a..d3e9b38bad 100644 --- a/Signal/translations/lv.lproj/Localizable.strings +++ b/Signal/translations/lv.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/mk.lproj/Localizable.strings b/Signal/translations/mk.lproj/Localizable.strings index 4919e84022..5adaffb7ca 100644 --- a/Signal/translations/mk.lproj/Localizable.strings +++ b/Signal/translations/mk.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Одговори на оваа порака"; diff --git a/Signal/translations/mr.lproj/Localizable.strings b/Signal/translations/mr.lproj/Localizable.strings index 53dd6f38dc..cf25cbb210 100644 --- a/Signal/translations/mr.lproj/Localizable.strings +++ b/Signal/translations/mr.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "ह्या संदेशाला प्रत्युत्तर द्या"; diff --git a/Signal/translations/ms.lproj/Localizable.strings b/Signal/translations/ms.lproj/Localizable.strings index 2f4d9f51ba..9658aa66df 100644 --- a/Signal/translations/ms.lproj/Localizable.strings +++ b/Signal/translations/ms.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Majukan Mesej Ini"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Balas Mesej Ini"; diff --git a/Signal/translations/my.lproj/Localizable.strings b/Signal/translations/my.lproj/Localizable.strings index 716176a17a..474ff25fce 100644 --- a/Signal/translations/my.lproj/Localizable.strings +++ b/Signal/translations/my.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/nb.lproj/Localizable.strings b/Signal/translations/nb.lproj/Localizable.strings index 3956d0a29e..98dd8ab1a3 100644 --- a/Signal/translations/nb.lproj/Localizable.strings +++ b/Signal/translations/nb.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Videresend denne meldingen"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Svar på denne meldingen"; diff --git a/Signal/translations/nb_NO.lproj/Localizable.strings b/Signal/translations/nb_NO.lproj/Localizable.strings index 4b62e98b3e..ace6b9ef4b 100644 --- a/Signal/translations/nb_NO.lproj/Localizable.strings +++ b/Signal/translations/nb_NO.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Svar på denne meldingen"; diff --git a/Signal/translations/nl.lproj/Localizable.strings b/Signal/translations/nl.lproj/Localizable.strings index 6bc9c096cf..614edfbe1f 100644 --- a/Signal/translations/nl.lproj/Localizable.strings +++ b/Signal/translations/nl.lproj/Localizable.strings @@ -747,7 +747,7 @@ "CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_MEMBER" = "Alles"; /* Footer for the 'attributes access' section in conversation settings view. */ -"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_SECTION_FOOTER" = "Kies wie de groepsnaam, groepsafbeelding en zelf-wissende-berichten-timer mag aanpassen."; +"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_SECTION_FOOTER" = "Kies wie de groepsnaam, groepsafbeelding en de timer voor zelfwissende berichten mag aanpassen."; /* Footer text for the 'block and leave' section of conversation settings view. */ "CONVERSATION_SETTINGS_BLOCK_AND_LEAVE_SECTION_FOOTER" = "Je zult niet langer berichten of meldingen van deze groep ontvangen."; @@ -777,7 +777,7 @@ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_ADMINISTRATORS_BUTTON" = "Uitsluitend beheerders"; /* Description for the 'edit group attributes access' alert. */ -"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_DESCRIPTION" = "Kies wie de groepsnaam, groepsafbeelding en zelf-wissende-berichten-timer mag aanpassen:"; +"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_DESCRIPTION" = "Kies wie de groepsnaam, groepsafbeelding en de timer voor zelfwissende berichten mag aanpassen:"; /* Label for button that sets 'group attributes access' to 'members-only'. */ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_MEMBERS_BUTTON" = "Alle groepsleden"; @@ -849,7 +849,7 @@ "CONVERSATION_SETTINGS_SEARCH" = "Zoek gesprek"; /* Label for button that opens conversation settings. */ -"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tik om te wijzigen"; +"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tik hier om te wijzigen"; /* Label for 'unblock group' action in conversation settings view. */ "CONVERSATION_SETTINGS_UNBLOCK_GROUP" = "Groep deblokkeren"; @@ -1002,19 +1002,19 @@ "DEVICE_LIST_UPDATE_FAILED_TITLE" = "Het bijwerken van de lijst met apparaten is mislukt."; /* table cell label in conversation settings */ -"DISAPPEARING_MESSAGES" = "Zelf-wissende berichten"; +"DISAPPEARING_MESSAGES" = "Zelfwissende berichten"; /* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ "DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Berichten in dit gesprek zullen na %@ zichzelf wissen."; /* subheading in conversation settings */ -"DISAPPEARING_MESSAGES_DESCRIPTION" = "Indien ingeschakeld zullen nieuwe verzonden en ontvangen berichten in dit gesprek zichzelf wissen nadat ze zijn gelezen."; +"DISAPPEARING_MESSAGES_DESCRIPTION" = "Indien ingeschakeld zal elk nieuwe bericht zichzelf wissen nadat de ingestelde tijd is verlopen. Voor iedere deelnemer aan het gesprek begint de tijd pas te lopen als hij het bericht heeft gezien. – Gebruik zelfwissende berichten niet ter beveiliging, want Signal kan niet garanderen dat een bericht op het apparaat van een ander daadwerkelijk wordt gewist."; /* Accessibility hint that contains current timeout information */ -"DISAPPEARING_MESSAGES_HINT" = "Momenteel wissen berichten zichzelf na %@"; +"DISAPPEARING_MESSAGES_HINT" = "Momenteel wissen nieuwe berichten zichzelf na %@"; /* Accessibility label for disappearing messages */ -"DISAPPEARING_MESSAGES_LABEL" = "Instellingen voor zelf-wissende berichten"; +"DISAPPEARING_MESSAGES_LABEL" = "Instellingen voor zelfwissende berichten"; /* Short text to dismiss current modal / actionsheet / screen */ "DISMISS_BUTTON_TEXT" = "Sluiten"; @@ -1104,16 +1104,16 @@ "ENABLE_2FA_VIEW_PIN_TOO_LONG" = "Pincode kan niet langer zijn dan 20 cijfers."; /* Error indicating that the entered 'two-factor auth PIN' is too short. */ -"ENABLE_2FA_VIEW_PIN_TOO_SHORT" = "Je pincode moet ten minste 4 getallen lang zijn."; +"ENABLE_2FA_VIEW_PIN_TOO_SHORT" = "Je pincode moet ten minste 4 cijfers lang zijn."; /* Indicates that user should select a 'two factor auth pin'. */ "ENABLE_2FA_VIEW_SELECT_PIN_INSTRUCTIONS" = "Voer een pincode in voor de registratievergrendeling. De volgende keer dat je dit telefoonnummer probeert te registreren bij Signal, zal je gevraagd worden deze pincode in te voeren."; /* Indicates that user has 'two factor auth pin' disabled. */ -"ENABLE_2FA_VIEW_STATUS_DISABLED_INSTRUCTIONS" = "Schakel voor verhoogde veiligheid een registratievergrendeling in. Door dit in te schakelen kan niemand Signal met jouw telefoonnummer registreren zonder eerst een pincode in te voeren."; +"ENABLE_2FA_VIEW_STATUS_DISABLED_INSTRUCTIONS" = "Schakel voor verhoogde veiligheid een registratievergrendeling in. Door dit in te schakelen kan niemand met jouw telefoonnummer Signal registreren zonder eerst je Signal-pincode in te voeren."; /* Indicates that user has 'two factor auth pin' enabled. */ -"ENABLE_2FA_VIEW_STATUS_ENABLED_INSTRUCTIONS" = "Registratievergrendeling is ingeschakeld. Je zult je registratievergrendelingspincode moeten invoeren als je je nummer opnieuw registreert bij Signal. Dit voorkomt dat een ander jouw nummer kan registreren."; +"ENABLE_2FA_VIEW_STATUS_ENABLED_INSTRUCTIONS" = "Registratievergrendeling is ingeschakeld. Je zult je pincode moeten invoeren als je je nummer opnieuw registreert bij Signal. Dit voorkomt dat een ander jouw telefoonnummer kan registreren."; /* Title for the 'enable two factor auth PIN' views. */ "ENABLE_2FA_VIEW_TITLE" = "Registratievergrendeling"; @@ -1296,7 +1296,7 @@ "GROUP_ACCESS_ATTRIBUTES_UPDATED_BY_LOCAL_USER_FORMAT" = "Je hebt de instelling voor wie de groepsinformatie kan wijzigen op ‘%@’ ingesteld."; /* Message indicating that the access to the group's attributes was changed by a remote user. Embeds {{ %1$@ user who changed the access, %2$@ new access level}}. */ -"GROUP_ACCESS_ATTRIBUTES_UPDATED_BY_REMOTE_USER_FORMAT" = "%1$@ heeft aangepast wie de groepsinformatie mogen wijzigen. Vanaf nu mogen %2$@ de groepsinformatie wijzigen."; +"GROUP_ACCESS_ATTRIBUTES_UPDATED_BY_REMOTE_USER_FORMAT" = "%1$@ heeft de instelling voor wie de groepsinformatie kan wijzigen op ‘%2$@’ ingesteld."; /* Message indicating that the access to the group's attributes was changed. Embeds {{new access level}}. */ "GROUP_ACCESS_ATTRIBUTES_UPDATED_FORMAT" = "De groepsinformatie kan vanaf nu door %@ worden gewijzigd."; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Er zijn geen leden in deze groep"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 lid"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Dit bericht doorsturen"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Geselecteerde bericht doorsturen"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Op dit bericht reageren"; @@ -2364,10 +2361,10 @@ "OPEN_SETTINGS_BUTTON" = "Instellingen"; /* Info Message when another user disabled disappearing messages. Embeds {{name of other user}}. */ -"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ heeft zelf-wissende berichten uitgeschakeld."; +"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ heeft zelfwissende berichten uitgeschakeld."; /* Info Message when another user enabled disappearing messages. Embeds {{name of other user}} and {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ -"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ heeft de timer voor zelf-wissende berichten op %@ ingesteld."; +"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ heeft de timer voor zelfwissende berichten op %@ ingesteld."; /* Label warning the user that the Signal service may be down. */ "OUTAGE_WARNING" = "Signal ondervindt momenteel technische problemen. We zijn hard aan het werk om zo snel als mogelijk de dienst te hervatten."; @@ -2529,7 +2526,7 @@ "PIN_CREATION_MISMATCH_ERROR" = "De pincodes komen niet overeen. Probeer het opnieuw."; /* Label indicating the user must use at least 4 digits */ -"PIN_CREATION_NUMERIC_HINT" = "Je pincode moet uit ten minste 4 getallen bestaan"; +"PIN_CREATION_NUMERIC_HINT" = "Je pincode moet uit ten minste 4 cijfers bestaan"; /* Label indication the user must confirm their PIN. */ "PIN_CREATION_PIN_CONFIRMATION_HINT" = "Voer pincode opnieuw in"; @@ -2580,7 +2577,7 @@ "PIN_REMINDER_TITLE" = "Voer je Signal-pincode in"; /* Label indicating that the attempted PIN is too short */ -"PIN_REMINDER_TOO_SHORT_ERROR" = "Je pincode moet uit ten minste 4 getallen bestaan."; +"PIN_REMINDER_TOO_SHORT_ERROR" = "Je pincode moet uit ten minste 4 cijfers bestaan."; /* Action text for PIN megaphone when user doesn't have a PIN */ "PINS_MEGAPHONE_ACTION" = "Pincode aanmaken"; @@ -2817,7 +2814,7 @@ "REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "Je pincode is een code welke je zelf hebt aangemaakt en welke bestaat uit vier of meer cijfers of een combinatie van cijfers en letters. Als je je je pincode niet kunt herinneren, dan kun je een nieuwe pincode aanmaken. Je kunt Signal dan wel weer registreren met dit telefoonnummer, maar sommige instellingen zoals je profielnaam en -afbeelding zullen dan verloren gaan."; /* Alert body for a forgotten V1 PIN */ -"REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "Je pincode is een getal welke je zelf hebt aangemaakt bestaande uit 4 of meer cijfers. Als je je pincode niet hebt onthouden, dan zul je 7 dagen moeten wachten voor je je telefoonnummer opnieuw kunt registreren."; +"REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "Je pincode is een code welke je zelf hebt aangemaakt bestaande uit 4 of meer cijfers. Als je je pincode niet hebt onthouden, dan zul je 7 dagen moeten wachten voor je je telefoonnummer opnieuw kunt registreren."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock disabled. */ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "Je hebt nog %lu pogingen resterend. Als je geen pogingen meer over hebt, dan kun je nog wel een nieuwe pincode aanmaken. Je kunt Signal dan wel weer registreren met dit telefoonnummer, maar sommige instellingen zoals je profielnaam en -afbeelding zullen dan verloren gaan."; @@ -3372,7 +3369,7 @@ "SETTINGS_TWO_FACTOR_AUTH_TITLE" = "Registratievergrendeling"; /* Footer for the 'two factor auth' section of the privacy settings when Signal PINs are available. */ -"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "Schakel registratievergrendeling in voor extra beveiliging. Als je dat doet zal vanaf dan een je Signal-pincode worden nodig zijn om dit telefoonnummer opnieuw te registreren bij Signal. Hiermee voorkom je dat iemand wie je telefoonnummer kaapt ook onder jouw naam Signal kan gebruiken."; +"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "Door registratievergrendeling in te schakelen voeg je extra beveiliging toe. Je zult dan wanneer je je huidige telefoonnummer opnieuw probeert te registreren pas na 7 dagen het invoeren van je pincode kunnen overslaan. Hierdoor kan niemand behalve jij Signal registreren met je huidige telefoonnummer."; /* Label for the 'typing indicators' setting. */ "SETTINGS_TYPING_INDICATORS" = "Typindicatoren"; @@ -3609,10 +3606,10 @@ "UNKNOWN_USER" = "Gebruiker niet bekend"; /* Info Message when an unknown user disabled disappearing messages. */ -"UNKNOWN_USER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Zelf-wissende berichten zijn uitgeschakeld."; +"UNKNOWN_USER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Zelfwissende berichten zijn uitgeschakeld."; /* Info Message when an unknown user enabled disappearing messages. Embeds {{time amount}} before messages disappear. see the *_TIME_AMOUNT strings for context. */ -"UNKNOWN_USER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "De timer voor zelf-wissende berichten is op %@ ingesteld."; +"UNKNOWN_USER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "De timer voor zelfwissende berichten is op %@ ingesteld."; /* Indicates an unknown or unrecognizable value. */ "UNKNOWN_VALUE" = "Onbekend"; @@ -3696,7 +3693,7 @@ "USERNAME_PREFIX" = "@"; /* An error indicating that the supplied username cannot start with a number. */ -"USERNAME_STARTS_WITH_NUMBER_ERROR" = "Gebruikersnamen mogen niet met een getal beginnen."; +"USERNAME_STARTS_WITH_NUMBER_ERROR" = "Gebruikersnamen mogen niet met een cijfer beginnen."; /* The title for the username view. */ "USERNAME_TITLE" = "Gebruikersnaam"; @@ -3744,7 +3741,7 @@ "VIEW_ONCE_MESSAGES_TOOLTIP" = "Tik hier om er voor te zorgen dat dit bericht wordt gewist nadat het is gezien."; /* Toast alert text shown when tapping on a view-once message that you have sent. */ -"VIEW_ONCE_OUTGOING_TOAST" = "Uitgaande eenmaligeweergave-mediabestanden worden automatisch gewist zodra ze zijn verzonden. Je kunt ze dus niet terugzien.\n"; +"VIEW_ONCE_OUTGOING_TOAST" = "Uitgaande eenmaligeweergave-media worden onmiddellijk gewist zodra ze zijn verzonden. Je kunt je eigen media dus niet terugzien. – Gebruik eenmaligeweergave-berichten niet ter beveiliging, want Signal kan niet garanderen dat een bericht op het apparaat van een ander daadwerkelijk wordt gewist."; /* Indicates how to cancel a voice message. */ "VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "Veeg om te annuleren"; @@ -3762,10 +3759,10 @@ "WAITING_TO_COMPLETE_DEVICE_LINK_TEXT" = "Vervolledig de installatie op Signal Desktop."; /* Info Message when you disabled disappearing messages. */ -"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Je hebt zelf-wissende berichten uitgeschakeld."; +"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Je hebt zelfwissende berichten uitgeschakeld."; /* alert body shown when trying to use features in the app before completing registration-related setup. */ "YOU_MUST_COMPLETE_ONBOARDING_BEFORE_PROCEEDING" = "Je moet de configuratie voltooien voor je verder kunt gaan."; /* Info Message when you disabled disappearing messages. Embeds a {{time amount}} before messages disappear. see the *_TIME_AMOUNT strings for context. */ -"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Je hebt de timer voor zelf-wissende berichten op %@ ingesteld."; +"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Je hebt de timer voor zelfwissende berichten op %@ ingesteld."; diff --git a/Signal/translations/pl.lproj/Localizable.strings b/Signal/translations/pl.lproj/Localizable.strings index e9f0345a47..beaf933dea 100644 --- a/Signal/translations/pl.lproj/Localizable.strings +++ b/Signal/translations/pl.lproj/Localizable.strings @@ -1407,13 +1407,13 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Brak członków"; /* The 'group member count' indicator when there is 1 member in the group. */ -"GROUP_MEMBER_COUNT_LABEL_1" = "1 uczestnik"; +"GROUP_MEMBER_COUNT_LABEL_1" = "1 członek"; /* Format for the 'group member count' indicator. Embeds {the number of group members}. */ -"GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ członek(ów)"; +"GROUP_MEMBER_COUNT_LABEL_FORMAT" = "%@ członków"; /* Label indicating the local user. */ "GROUP_MEMBER_LOCAL_USER" = "Ty"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Przekaż tą wiadomość"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Przekaż wybraną wiadomość"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Odpowiedz na wiadomość"; @@ -2796,7 +2793,7 @@ "REACTION_INCOMING_NOTIFICATION_TO_VOICE_MESSAGE_BODY_FORMAT" = "Zareagował(a) w ten sposób %@ na Twoją wiadomość"; /* Body for the megaphone introducing reactions */ -"REACTION_MEGAPHONE_BODY" = "Stuknij i przytrzymaj wiadomość, aby szybko pokazać jak się czujesz. "; +"REACTION_MEGAPHONE_BODY" = "Stuknij i przytrzymaj wiadomość, aby szybko pokazać co czujesz. "; /* Title for the megaphone introducing reactions */ "REACTION_MEGAPHONE_TITLE" = "Przedstawiamy reakcje"; @@ -3465,7 +3462,7 @@ "STICKERS_MANAGE_VIEW_AVAILABLE_BUILT_IN_PACKS_SECTION_TITLE" = "Seria Artystów Signal"; /* Title for the 'available known stickers' section of the 'manage stickers' view. */ -"STICKERS_MANAGE_VIEW_AVAILABLE_KNOWN_PACKS_SECTION_TITLE" = "Naklejki, które odebrano"; +"STICKERS_MANAGE_VIEW_AVAILABLE_KNOWN_PACKS_SECTION_TITLE" = "Odebrane naklejki"; /* Label indicating that one or more known sticker packs failed to load. */ "STICKERS_MANAGE_VIEW_FAILED_KNOWN_PACKS" = "Niektóre pakiety naklejek nie zostały pobrane"; diff --git a/Signal/translations/pt_BR.lproj/Localizable.strings b/Signal/translations/pt_BR.lproj/Localizable.strings index eaf590ddeb..3693f65f2d 100644 --- a/Signal/translations/pt_BR.lproj/Localizable.strings +++ b/Signal/translations/pt_BR.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Encaminhar essa mensagem"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Responder à mensagem"; diff --git a/Signal/translations/pt_PT.lproj/Localizable.strings b/Signal/translations/pt_PT.lproj/Localizable.strings index 9d7a364d69..0bb70528ba 100644 --- a/Signal/translations/pt_PT.lproj/Localizable.strings +++ b/Signal/translations/pt_PT.lproj/Localizable.strings @@ -72,7 +72,7 @@ "ADD_USER_TO_PROFILE_WHITELIST_OFFER" = "Deseja partilhar o seu perfil com este utilizador?"; /* generic button text to acknowledge that the corresponding text was read. */ -"ALERT_ACTION_ACKNOWLEDGE" = "Percebido"; +"ALERT_ACTION_ACKNOWLEDGE" = "Entendido"; /* The label for the 'discard' button in alerts and action sheets. */ "ALERT_DISCARD_BUTTON" = "Descartar"; @@ -303,7 +303,7 @@ "BACKUP_RESTORE_DESCRIPTION" = "A restaurar cópia de segurança"; /* Label for the backup restore progress. */ -"BACKUP_RESTORE_PROGRESS" = "Progresso"; +"BACKUP_RESTORE_PROGRESS" = "Evolução"; /* Label for the backup restore status. */ "BACKUP_RESTORE_STATUS" = "Estado"; @@ -336,7 +336,7 @@ "BLOCK_LIST_UNBLOCK_CONTACT_MESSAGE" = "Poderá enviar mensagens e ligar um para o outro."; /* Action sheet body when confirming you want to unblock a group */ -"BLOCK_LIST_UNBLOCK_GROUP_BODY" = "Os membros actuais poderão voltar a adicionar o seu contacto ao grupo."; +"BLOCK_LIST_UNBLOCK_GROUP_BODY" = "Os membros atuais poderão voltar a adicionar o seu contacto ao grupo."; /* An explanation of what unblocking a group means. */ "BLOCK_LIST_UNBLOCK_GROUP_MESSAGE" = "Os membros do grupo serão capazes de o adicionar novamente a este grupo."; @@ -360,7 +360,7 @@ "BLOCK_LIST_VIEW_BLOCKED_GROUP_ALERT_TITLE" = "Grupo bloqueado"; /* The message of the 'You can't block yourself' alert. */ -"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "Não se pode bloquear a si mesmo(a)."; +"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "Não se pode bloquear-se a si mesmo(a)."; /* The title of the 'You can't block yourself' alert. */ "BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "Erro"; @@ -402,7 +402,7 @@ "BUTTON_SUBMIT" = "Submeter"; /* Label for button that lets users call a contact again. */ -"CALL_AGAIN_BUTTON_TITLE" = "Chamar novamente"; +"CALL_AGAIN_BUTTON_TITLE" = "Ligar novamente"; /* Alert message when calling and permissions for microphone are missing */ "CALL_AUDIO_PERMISSION_MESSAGE" = "Pode dar ao Signal acesso ao seu microfone na aplicação de Definições para poder realizar chamadas e gravar mensagens de voz."; @@ -414,7 +414,7 @@ "CALL_INCOMING_NOTIFICATION_BODY" = "☎️ A receber chamada"; /* Accessibility label for placing call button */ -"CALL_LABEL" = "Chamar"; +"CALL_LABEL" = "Ligar"; /* notification body */ "CALL_MISSED_BECAUSE_OF_IDENTITY_CHANGE_NOTIFICATION_BODY" = "☎️ Chamada perdida porque o número de segurança do contacto mudou."; @@ -429,13 +429,13 @@ "CALL_STATUS_FORMAT" = "Signal %@"; /* Label for call button for alert offering to call a user. */ -"CALL_USER_ALERT_CALL_BUTTON" = "Chamar"; +"CALL_USER_ALERT_CALL_BUTTON" = "Ligar"; /* Message format for alert offering to call a user. Embeds {{the user's display name or phone number}}. */ -"CALL_USER_ALERT_MESSAGE_FORMAT" = "Deseja chamar %@?"; +"CALL_USER_ALERT_MESSAGE_FORMAT" = "Deseja ligar a %@?"; /* Title for alert offering to call a user. */ -"CALL_USER_ALERT_TITLE" = "Chamar?"; +"CALL_USER_ALERT_TITLE" = "Ligar?"; /* Accessibility label for accepting incoming calls */ "CALL_VIEW_ACCEPT_INCOMING_CALL_LABEL" = "Aceitar chamada"; @@ -447,7 +447,7 @@ "CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "Rejeitar chamada"; /* tooltip label when remote party has enabled their video */ -"CALL_VIEW_ENABLE_VIDEO_HINT" = "Toque aqui para activar a sua câmara"; +"CALL_VIEW_ENABLE_VIDEO_HINT" = "Toque aqui para ativar a sua câmara"; /* Accessibility label for hang up call */ "CALL_VIEW_HANGUP_LABEL" = "Terminar chamada"; @@ -492,7 +492,7 @@ "CAMERA_BUTTON_LABEL" = "Câmara"; /* Message for alert explaining that a user cannot be verified. */ -"CANT_VERIFY_IDENTITY_ALERT_MESSAGE" = "Este utilizador não pode ser verificado antes de terem trocado mensagens."; +"CANT_VERIFY_IDENTITY_ALERT_MESSAGE" = "Este utilizador não pode ser verificado antes de ter trocado mensagens com ele."; /* Title for alert explaining that a user cannot be verified. */ "CANT_VERIFY_IDENTITY_ALERT_TITLE" = "Erro"; @@ -642,13 +642,13 @@ "CONTACT_FIELD_ORGANIZATION" = "Organização"; /* Label for a contact's phone number. */ -"CONTACT_PHONE" = "Telefone"; +"CONTACT_PHONE" = "Telemóvel"; /* table cell subtitle when contact card has no email */ -"CONTACT_PICKER_NO_EMAILS_AVAILABLE" = "Nenhum e-mail disponível."; +"CONTACT_PICKER_NO_EMAILS_AVAILABLE" = "Sem e-mails disponíveis."; /* table cell subtitle when contact card has no known phone number */ -"CONTACT_PICKER_NO_PHONE_NUMBERS_AVAILABLE" = "Sem número de telefone disponível."; +"CONTACT_PICKER_NO_PHONE_NUMBERS_AVAILABLE" = "Nenhum número de telefone disponível."; /* navbar title for contact picker when sharing a contact */ "CONTACT_PICKER_TITLE" = "Selecionar contacto"; @@ -669,7 +669,7 @@ "CONTACT_SUPPORT" = "Contactar o Suporte"; /* Alert body */ -"CONTACT_SUPPORT_PROMPT_ERROR_ALERT_BODY" = "O Signal não conseguiu completar o seu pedido de suporte."; +"CONTACT_SUPPORT_PROMPT_ERROR_ALERT_BODY" = "O Signal não conseguiu completar o seu pedido de apoio."; /* button text */ "CONTACT_SUPPORT_PROMPT_ERROR_TRY_AGAIN" = "Tentar novamente"; @@ -798,7 +798,7 @@ "CONVERSATION_SETTINGS_MEMBERS_SECTION_TITLE" = "Membros"; /* Format for the section title of the 'members' section in conversation settings view. Embeds: {{ the number of group members }}. */ -"CONVERSATION_SETTINGS_MEMBERS_SECTION_TITLE_FORMAT" = "%@ Members"; +"CONVERSATION_SETTINGS_MEMBERS_SECTION_TITLE_FORMAT" = "%@ membros"; /* Title of the 'mute this thread' action sheet. */ "CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Silenciar"; @@ -846,7 +846,7 @@ "CONVERSATION_SETTINGS_REVOKE_GROUP_ADMIN_TITLE_FORMAT" = "Remover %@ de administrador do grupo?"; /* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */ -"CONVERSATION_SETTINGS_SEARCH" = "Procurar conversa"; +"CONVERSATION_SETTINGS_SEARCH" = "Pesquisar conversa"; /* Label for button that opens conversation settings. */ "CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tocar para alterar"; @@ -897,7 +897,7 @@ "CONVERSATION_VIEW_LOADING_MORE_MESSAGES" = "A carregar mais mensagens..."; /* Indicator on truncated text messages that they can be tapped to see the entire text message. */ -"CONVERSATION_VIEW_OVERSIZE_TEXT_TAP_FOR_MORE" = "Toque para mais"; +"CONVERSATION_VIEW_OVERSIZE_TEXT_TAP_FOR_MORE" = "Tocar para mais"; /* Message shown in conversation view that offers to block an unknown user. */ "CONVERSATION_VIEW_UNKNOWN_CONTACT_BLOCK_OFFER" = "Bloquear este utilizador"; @@ -969,10 +969,10 @@ "DEBUG_LOG_COULD_NOT_EMAIL" = "Não foi possível abrir a aplicação de e-mail."; /* Message of the alert before redirecting to GitHub Issues. */ -"DEBUG_LOG_GITHUB_ISSUE_ALERT_MESSAGE" = "O link para o \"gist\" foi copiado para a sua área de transferência. Vai ser redireccionado para a lista de problemas no GitHub. "; +"DEBUG_LOG_GITHUB_ISSUE_ALERT_MESSAGE" = "O link para o \"gist\" foi copiado para a sua área de transferência. Vai ser redirecionado para a lista de problemas no GitHub. "; /* Title of the alert before redirecting to GitHub Issues. */ -"DEBUG_LOG_GITHUB_ISSUE_ALERT_TITLE" = "Redireccionar para GitHub"; +"DEBUG_LOG_GITHUB_ISSUE_ALERT_TITLE" = "Redirecionar para GitHub"; /* action sheet body */ "DELETE_ALL_MESSAGES_IN_CONVERSATION_ALERT_BODY" = "Eliminar todas as mensagens na conversa?"; @@ -1005,7 +1005,7 @@ "DISAPPEARING_MESSAGES" = "Destruição de mensagens"; /* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ -"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "As mensagens nesta conversa irão ser destruídas depois de %@."; +"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "As mensagens nesta conversa irão ser destruídas após %@."; /* subheading in conversation settings */ "DISAPPEARING_MESSAGES_DESCRIPTION" = "Quando ativado, as mensagens enviadas e recebidas nesta conversa irão ser destruídas após terem sido lidas."; @@ -1068,7 +1068,7 @@ "EDIT_ITEM_COPY_ACTION" = "Copiar"; /* body of email sent to contacts when inviting to install Signal. Embeds {{link to install Signal}} and {{link to the Signal home page}} */ -"EMAIL_INVITE_BODY" = "Olá,\n\nUltimamente tenho usado o Signal para manter as minhas conversas do meu iPhone privadas. Gostaria que tu também o instalasses, para podermos estar confiantes que mais ninguém pode ler as nossas mensagens nem ouvir as nossas chamadas.\n\nO Signal está disponível para iPhone e Android. Faz download aqui: %@\n\nO Signal funciona como qualquer outra aplicação de mensagens, podes enviar fotos e video, fazer chamadas e criar mensagens de grupo. A melhor parte é que mais ninguém as poderá ver, nem os criadores do Signal!\n\nPodes ler mais sobre a Open Whisper Systems, as pessoas por detrás do Signal aqui: %@"; +"EMAIL_INVITE_BODY" = "Olá,\n\nUltimamente tenho utilizado o Signal para manter as conversas do meu iPhone privadas. Gostaria que tu também o instalasses, para podermos estar confiantes que mais ninguém pode ler as nossas mensagens nem ouvir as nossas chamadas.\n\nO Signal está disponível para iPhone e Android. Faz download aqui: %@\n\nO Signal funciona como qualquer outra aplicação de mensagens, podes enviar fotografias e video, fazer chamadas e criar mensagens de grupo. A melhor parte é que mais ninguém as poderá ver, nem os criadores do Signal!\n\nPodes ler mais sobre a Open Whisper Systems, as pessoas por detrás do Signal aqui: %@"; /* subject of email sent to contacts when inviting to install Signal */ "EMAIL_INVITE_SUBJECT" = "Vamos mudar para o Signal"; @@ -1104,7 +1104,7 @@ "ENABLE_2FA_VIEW_PIN_TOO_LONG" = "O PIN não deverá ser superior a 20 digítos."; /* Error indicating that the entered 'two-factor auth PIN' is too short. */ -"ENABLE_2FA_VIEW_PIN_TOO_SHORT" = "O PIN deverá ter pelo menos 4 dígitos."; +"ENABLE_2FA_VIEW_PIN_TOO_SHORT" = "O PIN deverá conter pelo menos 4 dígitos."; /* Indicates that user should select a 'two factor auth pin'. */ "ENABLE_2FA_VIEW_SELECT_PIN_INSTRUCTIONS" = "Introduza um PIN para bloqueio de registo. Este PIN ser-lhe-á pedido da próxima vez que registe este número de telefone com o Signal."; @@ -1122,7 +1122,7 @@ "END_CALL_RESPONDER_IS_BUSY" = "Ocupado"; /* Call setup status label */ -"END_CALL_UNCATEGORIZED_FAILURE" = "Chamada falhou."; +"END_CALL_UNCATEGORIZED_FAILURE" = "Falha ao tentar ligar."; /* Label indicating that this OS version is no longer supported. */ "END_OF_LIFE_OS_WARNING" = "As funcionalidades mais recentes do Signal não irão funcionar nesta versão do iOS. Por favor, faça o upgrade deste dispositivo para poder receber atualizações futuras do Signal."; @@ -1134,7 +1134,7 @@ "ERROR_COULD_NOT_SAVE_VIDEO" = "Não é possível guardar o vídeo."; /* Generic notice when message failed to send. */ -"ERROR_DESCRIPTION_CLIENT_SENDING_FAILURE" = "Falha a enviar mensagem."; +"ERROR_DESCRIPTION_CLIENT_SENDING_FAILURE" = "Falha ao enviar mensagem."; /* Error message indicating that message send is disabled due to prekey update failures */ "ERROR_DESCRIPTION_MESSAGE_SEND_DISABLED_PREKEY_UPDATE_FAILURES" = "Incapaz de enviar."; @@ -1215,7 +1215,7 @@ "ERROR_SENDING_EXPIRED" = "A sua versão do Signal expirou. Por favor, atualize para poder enviar mais mensagens."; /* Format string for 'unregistered user' error. Embeds {{the unregistered user's name or signal id}}. */ -"ERROR_UNREGISTERED_USER_FORMAT" = "Remover registo do utilizador: %@"; +"ERROR_UNREGISTERED_USER_FORMAT" = "Utilizador não registado: %@"; /* Label notifying the user that the app has expired. */ "EXPIRATION_ERROR" = "A sua versão do Signal expirou! Deixará de poder enviar mensagens. Toque para atualizar para a versão mais recente."; @@ -1242,7 +1242,7 @@ "FINGERPRINT_SHRED_KEYMATERIAL_BUTTON" = "Reiniciar sessão"; /* Accessibility label for finishing new group */ -"FINISH_GROUP_CREATION_LABEL" = "Finalizar criação do grupo"; +"FINISH_GROUP_CREATION_LABEL" = "Terminar a criação do grupo"; /* Label and title for 'contact forwarding' views. */ "FORWARD_CONTACT" = "Reencaminhar contacto"; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Sem membros"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 membro"; @@ -1419,7 +1419,7 @@ "GROUP_MEMBER_LOCAL_USER" = "Você"; /* Button label for the 'call group member' button */ -"GROUP_MEMBERS_CALL" = "Telefonar"; +"GROUP_MEMBERS_CALL" = "Ligar"; /* Label indicating that a group has no other members. */ "GROUP_MEMBERS_NO_OTHER_MEMBERS" = "Sem membros."; @@ -1473,10 +1473,10 @@ "GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR" = "%@ é agora um administrador"; /* Message indicating that a remote user was granted administrator role by local user. Embeds {{remote user name}}. */ -"GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_LOCAL_USER" = "Você fez %@ um administrador"; +"GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_LOCAL_USER" = "Você tornou %@ num administrador."; /* Message indicating that a remote user was granted administrator role by another user. Embeds {{ %1$@ user who granted, %2$@ user who was granted administrator role}}. */ -"GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ fez %2$@ um administrador."; +"GROUP_REMOTE_USER_GRANTED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@ tornou %2$@ num administrador."; /* Message indicating that a single remote user's invite was revoked. */ "GROUP_REMOTE_USER_INVITE_REVOKED_1" = "O convite para o grupo foi revogado por 1 pessoa."; @@ -1533,7 +1533,7 @@ "GROUP_UPDATED" = "Grupo atualizado."; /* Message indicating that the group's avatar was removed. */ -"GROUP_UPDATED_AVATAR_REMOVED" = "O avatar do grupo foi removido."; +"GROUP_UPDATED_AVATAR_REMOVED" = "Foi removido o avatar do grupo."; /* Message indicating that the group's avatar was removed. */ "GROUP_UPDATED_AVATAR_REMOVED_BY_LOCAL_USER" = "Você removeu o avatar."; @@ -1608,7 +1608,7 @@ "HOME_VIEW_BLOCKED_CONVERSATION" = "Bloqueado"; /* Placeholder text for search bar which filters conversations. */ -"HOME_VIEW_CONVERSATION_SEARCHBAR_PLACEHOLDER" = "Procurar"; +"HOME_VIEW_CONVERSATION_SEARCHBAR_PLACEHOLDER" = "Pesquisar"; /* A prefix indicating that a message preview is a draft */ "HOME_VIEW_DRAFT_PREFIX" = "Rascunho: "; @@ -1707,7 +1707,7 @@ "INVITE_FRIENDS_CONTACT_TABLE_BUTTON" = "Convidar amigos para o Signal"; /* Search */ -"INVITE_FRIENDS_PICKER_SEARCHBAR_PLACEHOLDER" = "Procurar"; +"INVITE_FRIENDS_PICKER_SEARCHBAR_PLACEHOLDER" = "Pesquisar"; /* Navbar title */ "INVITE_FRIENDS_PICKER_TITLE" = "Convidar amigos"; @@ -1752,7 +1752,7 @@ "KEY_COMMAND_PREVIOUS_CONVERSATION" = "Ir para a conversa anterior"; /* A keyboard command to begin a search on the conversation list. */ -"KEY_COMMAND_SEARCH" = "Procurar"; +"KEY_COMMAND_SEARCH" = "Pesquisar"; /* A keyboard command to present the application settings dialog. */ "KEY_COMMAND_SETTINGS" = "Definições"; @@ -1812,7 +1812,7 @@ "LIST_GROUP_MEMBERS_ACTION" = "Membros do grupo"; /* A string indicating that the user can search for a location */ -"LOCATION_PICKER_SEARCH_PLACEHOLDER" = "Procurar por nome ou endereço"; +"LOCATION_PICKER_SEARCH_PLACEHOLDER" = "Pesquisar por nome ou endereço"; /* The title for the location picker view */ "LOCATION_PICKER_TITLE" = "Selecionar localização"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Reencaminhar esta mensagem"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Reencaminhar a mensagem selecionada"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Responder a esta mensagem"; @@ -1905,10 +1902,10 @@ "MESSAGE_METADATA_VIEW_MESSAGE_STATUS_SENDING" = "A enviar"; /* Status label for messages which are sent. */ -"MESSAGE_METADATA_VIEW_MESSAGE_STATUS_SENT" = "Enviado"; +"MESSAGE_METADATA_VIEW_MESSAGE_STATUS_SENT" = "Enviada"; /* Status label for messages which were skipped. */ -"MESSAGE_METADATA_VIEW_MESSAGE_STATUS_SKIPPED" = "Ignorado"; +"MESSAGE_METADATA_VIEW_MESSAGE_STATUS_SKIPPED" = "Ignorada"; /* Status label for messages which are uploading. */ "MESSAGE_METADATA_VIEW_MESSAGE_STATUS_UPLOADING" = "A carregar"; @@ -1917,13 +1914,13 @@ "MESSAGE_METADATA_VIEW_NO_ATTACHMENT_OR_BODY" = "Mensagem sem conteúdo nem anexo."; /* Label for the 'received date & time' field of the 'message metadata' view. */ -"MESSAGE_METADATA_VIEW_RECEIVED_DATE_TIME" = "Recebido"; +"MESSAGE_METADATA_VIEW_RECEIVED_DATE_TIME" = "Recebida"; /* Label for the 'sender' field of the 'message metadata' view. */ "MESSAGE_METADATA_VIEW_SENDER" = "Remetente"; /* Label for the 'sent date & time' field of the 'message metadata' view. */ -"MESSAGE_METADATA_VIEW_SENT_DATE_TIME" = "Enviado"; +"MESSAGE_METADATA_VIEW_SENT_DATE_TIME" = "Enviada"; /* Label for the original filename of any attachment in the 'message metadata' view. */ "MESSAGE_METADATA_VIEW_SOURCE_FILENAME" = "Nome do ficheiro"; @@ -2022,7 +2019,7 @@ "MESSAGE_STATUS_DOWNLOADING" = "A descarregar"; /* status message for failed messages */ -"MESSAGE_STATUS_FAILED" = "Falha no envio."; +"MESSAGE_STATUS_FAILED" = "Falha ao enviar."; /* status message for failed messages */ "MESSAGE_STATUS_FAILED_SHORT" = "Falhou"; @@ -2040,7 +2037,7 @@ "MESSAGE_STATUS_SENDING" = "A enviar..."; /* status message for sent messages */ -"MESSAGE_STATUS_SENT" = "Enviado"; +"MESSAGE_STATUS_SENT" = "Enviada"; /* status message while attachment is uploading */ "MESSAGE_STATUS_UPLOADING" = "A carregar..."; @@ -2106,7 +2103,7 @@ "MUTE_BEHAVIOR_EXPLANATION" = "Não receberá notificações de conversas silenciadas."; /* A button to skip a view. */ -"NAVIGATION_ITEM_SKIP_BUTTON" = "Saltar"; +"NAVIGATION_ITEM_SKIP_BUTTON" = "Ignorar"; /* No comment provided by engineer. */ "NETWORK_ERROR_RECOVERY" = "Por favor, confirme que está on-line e tente novamente."; @@ -2169,7 +2166,7 @@ "new_message" = " Nova mensagem "; /* A label for the 'add by phone number' button in the 'new non-contact conversation' view */ -"NEW_NONCONTACT_CONVERSATION_VIEW_BUTTON" = "Procurar"; +"NEW_NONCONTACT_CONVERSATION_VIEW_BUTTON" = "Pesquisar"; /* Title for the 'new non-contact conversation' view. */ "NEW_NONCONTACT_CONVERSATION_VIEW_TITLE" = "Procurar utilizador"; @@ -2238,10 +2235,10 @@ "ONBOARDING_2FA_INVALID_PIN" = "PIN incorreto"; /* Label indicating that the 2fa pin is invalid with a retry count other than one in the 'onboarding 2fa' view. */ -"ONBOARDING_2FA_INVALID_PIN_PLURAL_FORMAT" = "PIN incorreto. Restam %lu tentativas."; +"ONBOARDING_2FA_INVALID_PIN_PLURAL_FORMAT" = "PIN incorreto. Restam-lhe %lu tentativas."; /* Label indicating that the 2fa pin is invalid with a retry count of one in the 'onboarding 2fa' view. */ -"ONBOARDING_2FA_INVALID_PIN_SINGLE" = "PIN incorreto. Resta 1 tentativa."; +"ONBOARDING_2FA_INVALID_PIN_SINGLE" = "PIN incorreto. Resta-lhe 1 tentativa."; /* Label for the 'skip and create new pin' button when reglock is disabled during onboarding. */ "ONBOARDING_2FA_SKIP_AND_CREATE_NEW_PIN" = "Ignorar e criar novo PIN"; @@ -2265,7 +2262,7 @@ "ONBOARDING_MODE_SWITCH_EXPLANATION_PROVISIONING" = "Ao tocar em \"Registar iPad\" irá criar uma novíssima conta do Signal ou mover uma conta existente para este iPad. Isto irá desativar o Signal em qualquer outro dispositivo atualmente registado com o mesmo número de telemóvel."; /* explanation to the user they're switching from registering to linking flow */ -"ONBOARDING_MODE_SWITCH_EXPLANATION_REGISTERING" = "Ao tocar em 'Ligar iPhone' irá permitir que associe o seu telemóvel a uma conta já existente. Associar o seu telemóvel geralmente não é recomendado e irá limitar algumas funções como telefonar."; +"ONBOARDING_MODE_SWITCH_EXPLANATION_REGISTERING" = "Ao tocar em \"Ligar iPhone\" irá permitir que associe o seu telemóvel a uma conta já existente. Associar o seu telemóvel geralmente não é recomendado e irá limitar algumas funções como telefonar."; /* header text indicating to the user they're switching from linking to registering flow */ "ONBOARDING_MODE_SWITCH_TITLE_PROVISIONING" = "Registar este iPad"; @@ -2364,7 +2361,7 @@ "OPEN_SETTINGS_BUTTON" = "Definições"; /* Info Message when another user disabled disappearing messages. Embeds {{name of other user}}. */ -"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ desactivou a destruição de mensagens."; +"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ desativou a destruição de mensagens."; /* Info Message when another user enabled disappearing messages. Embeds {{name of other user}} and {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ "OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ definiu o tempo da destruição de mensagens para %@."; @@ -2499,16 +2496,16 @@ "PHOTO_PICKER_UNNAMED_COLLECTION" = "Álbum sem nome"; /* Label indicating the user must use at least 4 characters */ -"PIN_CREATION_ALPHANUMERIC_HINT" = "PIN must be at least 4 characters"; +"PIN_CREATION_ALPHANUMERIC_HINT" = "O PIN deverá conter pelo menos 4 caracteres"; /* Title of the 'pin creation' recreation view. */ "PIN_CREATION_CHANGING_TITLE" = "Alterar o seu PIN"; /* Title of the 'pin creation' confirmation view. */ -"PIN_CREATION_CONFIRM_TITLE" = "Confirm your PIN"; +"PIN_CREATION_CONFIRM_TITLE" = "Confirme o seu PIN"; /* The explanation of confirmation in the 'pin creation' view. */ -"PIN_CREATION_CONFIRMATION_EXPLANATION" = "Re-enter your PIN."; +"PIN_CREATION_CONFIRMATION_EXPLANATION" = "Reintroduza o seu PIN."; /* Button asking if the user would like to create an alphanumeric PIN */ "PIN_CREATION_CREATE_ALPHANUMERIC" = "Criar um PIN alfanumérico"; @@ -2523,13 +2520,13 @@ "PIN_CREATION_ERROR_TITLE" = "Falha ao criar PIN"; /* The explanation in the 'pin creation' view. */ -"PIN_CREATION_EXPLANATION" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"PIN_CREATION_EXPLANATION" = "Os PINs mantém encriptada a informação guardada no Signal de forma a que apenas você lhe possa aceder. O seu perfil, definições e contactos serão restaurados quando reinstalar o Signal."; /* Label indicating that the attempted PIN does not match the first PIN */ "PIN_CREATION_MISMATCH_ERROR" = "Os PINs não coincidem. Tente novamente."; /* Label indicating the user must use at least 4 digits */ -"PIN_CREATION_NUMERIC_HINT" = "PIN must be at least 4 digits"; +"PIN_CREATION_NUMERIC_HINT" = "O PIN deverá conter pelo menos 4 dígitos"; /* Label indication the user must confirm their PIN. */ "PIN_CREATION_PIN_CONFIRMATION_HINT" = "Reintroduza o PIN"; @@ -2538,7 +2535,7 @@ "PIN_CREATION_PIN_PROGRESS" = "A criar PIN..."; /* The re-creation explanation in the 'pin creation' view. */ -"PIN_CREATION_RECREATION_EXPLANATION" = "You can change your PIN as long as this device is registered."; +"PIN_CREATION_RECREATION_EXPLANATION" = "Poderá alterar o seu PIN enquanto o seu dispositivo se encontrar registado."; /* Title of the 'pin creation' recreation view. */ "PIN_CREATION_RECREATION_TITLE" = "Alterar o seu PIN"; @@ -2586,7 +2583,7 @@ "PINS_MEGAPHONE_ACTION" = "Criar PIN"; /* Body for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_BODY" = "PINs keep information that’s stored with Signal encrypted"; +"PINS_MEGAPHONE_BODY" = "Os PINs guardam encriptada a informação que está guardada no Signal."; /* Toast indication that the user will be reminded later to setup their PIN. Embeds {{time until mandatory}} */ "PINS_MEGAPHONE_SNOOZE_TOAST_FORMAT" = "Iremos lembrá-lo(a) mais tarde. Criar um PIN será obrigatório dentro de %ld dias."; @@ -2811,7 +2808,7 @@ "REGISTER_2FA_FORGOT_PIN_ALERT_TITLE" = "Necessita de ajuda?"; /* Alert body for a forgotten SVR (V2) PIN */ -"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "Your PIN is a 4+ digit code you created that can be numeric or alphanumeric. If you can’t remember your PIN, you’ll have to wait 7 days to re-register your account."; +"REGISTER_2FA_FORGOT_SVR_PIN_ALERT_MESSAGE" = "O seu PIN é um código de 4 ou mais dígitos que você criou e pode ser numérico ou alfanumérico. Se não se recorda do seu PIN, necessita de esperar 7 dias até poder voltar a registar-se na sua conta."; /* Alert body for a forgotten SVR (V2) PIN when the user doesn't have reglock */ "REGISTER_2FA_FORGOT_SVR_PIN_WITHOUT_REGLOCK_ALERT_MESSAGE" = "O seu PIN é um código de mais de 4 dígitos que você criou e pode ser numérico ou alfanumérico. Se não se conseguir lembrar do seu PIN, você poderá criar um novo. Poderá registar e utilizar a sua conta mas irá perder algumas das definições guardadas como a sua informação de perfil."; @@ -2820,7 +2817,7 @@ "REGISTER_2FA_FORGOT_V1_PIN_ALERT_MESSAGE" = "O seu PIN é um código numérico de 4 ou mais dígitos que você criou. Se não se recorda do seu PIN, necessita de esperar 7 dias até poder voltar a registar-se na sua conta."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "Restam-lhe %lu tentativas. Quando não restarem mais tentativas, a sua conta será bloqueada. Após 7 dias de inatividade, poderá voltar a registar-se sem ser necessário o seu PIN. Você poderá registar-se e utilizar a sua conta mas irá perder algumas definições guardadas como a sua informação do perfil."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_PLURAL_FORMAT" = "Restam-lhe %lu tentativas Quando terminarem as tentativas poderá criar um novo PIN. Poderá voltar a registar-se e utilizar a sua conta mas irá perder algumas definições guardadas como a sua informação do perfil."; /* Alert message explaining what happens if you get your pin wrong and have multiple attempts remaining 'two-factor auth pin' with reglock enabled. */ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_PLURAL_FORMAT" = "Restam-lhe %lu tentativas. Quando não restarem mais tentativas, a sua conta será bloqueada. Após 7 dias de inatividade, poderá voltar a registar-se sem ser necessário o seu PIN. A sua conta será limpa e todo o conteúdo presente nela será eliminado."; @@ -2829,7 +2826,7 @@ "REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_REGLOCK_SINGLE" = "Resta-lhe 1 tentativa. Quando não restarem mais tentativas, a sua conta será bloqueada. Após 7 dias de inatividade, você poderá voltar a registar-se sem ser necessário o seu PIN. A sua conta será limpa e todo o conteúdo presente nela será eliminado."; /* Alert message explaining what happens if you get your pin wrong and have one attempt remaining 'two-factor auth pin' with reglock disabled. */ -"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "Resta-lhe 1 tentativa. Quando não restarem mais tentativas, a sua conta será bloqueada. Após 7 dias de inatividade, poderá voltar a registar-se sem ser necessário o seu PIN. Você poderá registar-se e utilizar a sua conta mas irá perder algumas definições guardadas como a sua informação do perfil."; +"REGISTER_2FA_INVALID_PIN_ALERT_MESSAGE_SINGLE" = "Resta-lhe 1 tentativa Quando terminarem as tentativas poderá criar um novo PIN. Poderá voltar a registar-se e utilizar a sua conta mas irá perder algumas definições guardadas como a sua informação do perfil."; /* Alert title explaining what happens if you forget your 'two-factor auth pin'. */ "REGISTER_2FA_INVALID_PIN_ALERT_TITLE" = "PIN incorreto"; @@ -2919,7 +2916,7 @@ "REMINDER_2FA_WRONG_PIN_ALERT_BODY" = "Pode alterar o PIN nas definições de privacidade."; /* Alert title after wrong guess for 'two-factor auth pin' reminder activity */ -"REMINDER_2FA_WRONG_PIN_ALERT_TITLE" = "PIN incorrecto."; +"REMINDER_2FA_WRONG_PIN_ALERT_TITLE" = "PIN incorreto."; /* The title for the 'replace group admin' view. */ "REPLACE_ADMIN_VIEW_TITLE" = "Escolha um administrador novo"; @@ -2934,7 +2931,7 @@ "SAFETY_NUMBER_CHANGED_CONFIRM_ADD_TO_GROUP_ACTION" = "Mesmo assim, adicionar ao grupo"; /* alert button text to confirm placing an outgoing call after the recipients Safety Number has changed. */ -"SAFETY_NUMBER_CHANGED_CONFIRM_CALL_ACTION" = "Mesmo assim, telefonar"; +"SAFETY_NUMBER_CHANGED_CONFIRM_CALL_ACTION" = "Ligar mesmo assim"; /* button title to confirm sending to a recipient whose safety number recently changed */ "SAFETY_NUMBER_CHANGED_CONFIRM_SEND_ACTION" = "Mesmo assim, enviar"; @@ -2985,10 +2982,10 @@ "SEARCH_BY_NAME_OR_USERNAME_OR_NUMBER_PLACEHOLDER_TEXT" = "Nome, utilizador ou número"; /* Placeholder text indicating the user can search for contacts by name or phone number. */ -"SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT" = "Procurar por nome ou número"; +"SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT" = "Pesquisar por nome ou número"; /* placeholder text in an empty search field */ -"SEARCH_FIELD_PLACE_HOLDER_TEXT" = "Procurar"; +"SEARCH_FIELD_PLACE_HOLDER_TEXT" = "Pesquisar"; /* section header for search results that match a contact who doesn't have an existing conversation */ "SEARCH_SECTION_CONTACTS" = "Outros contactos"; @@ -3252,7 +3249,7 @@ "SETTINGS_NAV_BAR_TITLE" = "Definições"; /* table section footer */ -"SETTINGS_NOTIFICATION_CONTENT_DESCRIPTION" = "As notificações de chamada e mensagem poderão aparecer enquanto o seu telefone está bloqueado. Poderá querer limitar o que é apresentado."; +"SETTINGS_NOTIFICATION_CONTENT_DESCRIPTION" = "As notificações de chamada e mensagem poderão aparecer enquanto o seu telemóvel está bloqueado. Poderá querer limitar o que é apresentado."; /* table section header */ "SETTINGS_NOTIFICATION_CONTENT_TITLE" = "Conteúdo das notificações"; @@ -3267,7 +3264,7 @@ "SETTINGS_NOTIFICATIONS" = "Notificações"; /* Footer for the 'PINs' section of the privacy settings. */ -"SETTINGS_PINS_FOOTER" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"SETTINGS_PINS_FOOTER" = "Os PINs mantém encriptada a informação guardada no Signal de forma a que apenas você lhe possa aceder. O seu perfil, definições e contactos serão restaurados quando reinstalar o Signal."; /* Label for the 'pins' item of the privacy settings when the user does have a pin. */ "SETTINGS_PINS_ITEM" = "Alterar o seu PIN"; @@ -3279,7 +3276,7 @@ "SETTINGS_PINS_TITLE" = "PIN DO SIGNAL"; /* Label for 'CallKit privacy' preference */ -"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE" = "Mostrar nome e número"; +"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE" = "Mostrar o nome e número"; /* Settings table section footer. */ "SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_DESCRIPTION" = "Mostrar chamadas na lista de \"Chamadas recentes\" na aplicação telefone do iOS."; @@ -3300,19 +3297,19 @@ "SETTINGS_READ_RECEIPTS_SECTION_FOOTER" = "Veja e partilhe quando as mensagens são lidas. Esta definição é opcional e aplica-se a todas as suas conversas."; /* Action to turn off registration lock */ -"SETTINGS_REGISTRATION_LOCK_TURN_OFF" = "Turn Off"; +"SETTINGS_REGISTRATION_LOCK_TURN_OFF" = "Desativar"; /* Title for the alert confirming that the user wants to turn off registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_OFF_TITLE" = "Turn Off Registration Lock?"; +"SETTINGS_REGISTRATION_LOCK_TURN_OFF_TITLE" = "Desativar o 'Bloqueio de registo'?"; /* Action to turn on registration lock */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Turn On"; +"SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Ativar"; /* Body for the alert confirming that the user wants to turn on registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "If you forget your Signal PIN when registering with Signal again, you’ll be locked out of your account for 7 days."; +"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "Caso se esqueça do seu PIN (do Signal) quando se registar novamente no Signal, será bloqueado da sua conta durante 7 dias."; /* Title for the alert confirming that the user wants to turn on registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Turn On Registration Lock?"; +"SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Ativar o 'Bloqueio de registo'?"; /* Label for re-link button. */ "SETTINGS_RELINK_BUTTON" = "Re-associar"; @@ -3348,7 +3345,7 @@ "SETTINGS_SECTION_SOUNDS" = "Sons"; /* settings topic header for table section */ -"SETTINGS_SECTION_TITLE_CALLING" = "A chamar"; +"SETTINGS_SECTION_TITLE_CALLING" = "A ligar"; /* Section header */ "SETTINGS_SECURITY_TITLE" = "Segurança de ecrã"; @@ -3372,7 +3369,7 @@ "SETTINGS_TWO_FACTOR_AUTH_TITLE" = "Bloqueio de registo"; /* Footer for the 'two factor auth' section of the privacy settings when Signal PINs are available. */ -"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "For extra security, turn on registration lock, which will require your Signal PIN to register your phone number with Signal again."; +"SETTINGS_TWO_FACTOR_PINS_AUTH_FOOTER" = "Para uma segurança extra, ative o bloqueio de registo, que irá pedir o seu PIN do Signal de forma a poder registar novamente o número do seu telemóvel no Signal."; /* Label for the 'typing indicators' setting. */ "SETTINGS_TYPING_INDICATORS" = "Indicadores de escrita"; @@ -3636,7 +3633,7 @@ "UNNAMED_DEVICE" = "Dispositivo sem nome"; /* No comment provided by engineer. */ -"UNREGISTER_SIGNAL_FAIL" = "Falha a desregistar-se "; +"UNREGISTER_SIGNAL_FAIL" = "Falha ao remover o seu registo do Signal."; /* No comment provided by engineer. */ "UNSUPPORTED_ATTACHMENT" = "Recebeu um ficheiro de um tipo não suportado."; @@ -3660,7 +3657,7 @@ "UPGRADE_EXPERIENCE_INTRODUCING_PINS_CREATE_BUTTON" = "Crie o seu PIN"; /* Body text for PINs splash screen */ -"UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_DESCRIPTION" = "PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal."; +"UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_DESCRIPTION" = "Os PINs mantém encriptada a informação guardada no Signal de forma a que apenas você lhe possa aceder. O seu perfil, definições e contactos serão restaurados quando reinstalar o Signal."; /* Header for PINs splash screen */ "UPGRADE_EXPERIENCE_INTRODUCING_PINS_SETUP_TITLE" = "Introdução os PINs"; @@ -3768,4 +3765,4 @@ "YOU_MUST_COMPLETE_ONBOARDING_BEFORE_PROCEEDING" = "Deverá terminar a configuração antes de continuar."; /* Info Message when you disabled disappearing messages. Embeds a {{time amount}} before messages disappear. see the *_TIME_AMOUNT strings for context. */ -"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Definiu o tempo para a destruição de mensagens para %@."; +"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Você definiu %@ como o tempo a decorrer até as mensagens serem destruídas."; diff --git a/Signal/translations/ro.lproj/Localizable.strings b/Signal/translations/ro.lproj/Localizable.strings index afde8cffd9..97f3dedb0b 100644 --- a/Signal/translations/ro.lproj/Localizable.strings +++ b/Signal/translations/ro.lproj/Localizable.strings @@ -123,10 +123,10 @@ "APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Actualizează"; /* Name indicating that the dark theme is enabled. */ -"APPEARANCE_SETTINGS_DARK_THEME_NAME" = "Închisă"; +"APPEARANCE_SETTINGS_DARK_THEME_NAME" = "Întunecată"; /* Name indicating that the light theme is enabled. */ -"APPEARANCE_SETTINGS_LIGHT_THEME_NAME" = "Deschisă"; +"APPEARANCE_SETTINGS_LIGHT_THEME_NAME" = "Luminoasă"; /* Name indicating that the system theme is enabled. */ "APPEARANCE_SETTINGS_SYSTEM_THEME_NAME" = "Sistem"; @@ -747,7 +747,7 @@ "CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_MEMBER" = "Toate"; /* Footer for the 'attributes access' section in conversation settings view. */ -"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_SECTION_FOOTER" = "Alegeți cine poate edita numele grupului, avatarul și cronometrul mesajelor care dispar."; +"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_SECTION_FOOTER" = "Alegeți cine poate edita numele grupului, avatarul și perioada pentru dispariția mesajelor."; /* Footer text for the 'block and leave' section of conversation settings view. */ "CONVERSATION_SETTINGS_BLOCK_AND_LEAVE_SECTION_FOOTER" = "Nu veți mai putea primi mesaje sau actualizări de la acest grup."; @@ -777,7 +777,7 @@ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_ADMINISTRATORS_BUTTON" = "Doar administratorii"; /* Description for the 'edit group attributes access' alert. */ -"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_DESCRIPTION" = "Alegeți cine poate modifica numele grupului, avatarul și cronometrul mesajelor care dispar:"; +"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_DESCRIPTION" = "Alegeți cine poate modifica numele grupului, avatarul și perioada pentru dispariția mesajelor:"; /* Label for button that sets 'group attributes access' to 'members-only'. */ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_MEMBERS_BUTTON" = "Toți membrii"; @@ -1002,7 +1002,7 @@ "DEVICE_LIST_UPDATE_FAILED_TITLE" = "Actualizarea listei de dispozitive a eșuat."; /* table cell label in conversation settings */ -"DISAPPEARING_MESSAGES" = "Mesaje care dispar"; +"DISAPPEARING_MESSAGES" = "Dispariție mesaje"; /* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ "DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Mesajele din această conversație vor dispărea după %@."; @@ -1014,7 +1014,7 @@ "DISAPPEARING_MESSAGES_HINT" = "Momentan mesajele dispar după %@"; /* Accessibility label for disappearing messages */ -"DISAPPEARING_MESSAGES_LABEL" = "Setări pentru mesajele care dispar"; +"DISAPPEARING_MESSAGES_LABEL" = "Setări pentru dispariția mesajelor"; /* Short text to dismiss current modal / actionsheet / screen */ "DISMISS_BUTTON_TEXT" = "Revocare"; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Niciun membru."; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 membru"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Redirecționați acest mesaj"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Redirecționați mesajul selectat"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Răspunde la acest mesaj"; @@ -2364,7 +2361,7 @@ "OPEN_SETTINGS_BUTTON" = "Setări"; /* Info Message when another user disabled disappearing messages. Embeds {{name of other user}}. */ -"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ a dezactivat mesajele care dispar."; +"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ a dezactivat dispariția mesajelor."; /* Info Message when another user enabled disappearing messages. Embeds {{name of other user}} and {{time amount}} before messages disappear. See the *_TIME_AMOUNT strings for context. */ "OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ a setat timpul de expirare a mesajelor la %@."; @@ -3609,10 +3606,10 @@ "UNKNOWN_USER" = "Necunoscut"; /* Info Message when an unknown user disabled disappearing messages. */ -"UNKNOWN_USER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Mesajele care dispar au fost dezactivate."; +"UNKNOWN_USER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Dispariția mesajelor a fost dezactivată."; /* Info Message when an unknown user enabled disappearing messages. Embeds {{time amount}} before messages disappear. see the *_TIME_AMOUNT strings for context. */ -"UNKNOWN_USER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Timpul pentru mesajele care dispar a fost setat la %@."; +"UNKNOWN_USER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Timpul setat pentru dispariția mesajele este de %@."; /* Indicates an unknown or unrecognizable value. */ "UNKNOWN_VALUE" = "Necunoscut"; @@ -3762,7 +3759,7 @@ "WAITING_TO_COMPLETE_DEVICE_LINK_TEXT" = "Finalizează configurarea în Signal Desktop."; /* Info Message when you disabled disappearing messages. */ -"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ai dezactivat mesajele care dispar."; +"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ați dezactivat dispariția mesajelor."; /* alert body shown when trying to use features in the app before completing registration-related setup. */ "YOU_MUST_COMPLETE_ONBOARDING_BEFORE_PROCEEDING" = "Înainte de a continua, trebuie să finalizați configurarea."; diff --git a/Signal/translations/ru.lproj/Localizable.strings b/Signal/translations/ru.lproj/Localizable.strings index c61d213f92..5698a05a5e 100644 --- a/Signal/translations/ru.lproj/Localizable.strings +++ b/Signal/translations/ru.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Нет участников"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 участник"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Переслать это сообщение"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Переслать выбранное сообщение"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Ответить на это сообщение"; @@ -2586,7 +2583,7 @@ "PINS_MEGAPHONE_ACTION" = "Создать PIN-код"; /* Body for PIN megaphone when user doesn't have a PIN */ -"PINS_MEGAPHONE_BODY" = "PIN-коды шифруют информацию, хранящуюся в сервисе Signal"; +"PINS_MEGAPHONE_BODY" = "PIN-коды хранят информацию в сервисе Signal зашифрованной"; /* Toast indication that the user will be reminded later to setup their PIN. Embeds {{time until mandatory}} */ "PINS_MEGAPHONE_SNOOZE_TOAST_FORMAT" = "Мы напомним вам позже. Создание PIN-кода станет обязательным через %ld дней."; diff --git a/Signal/translations/sk.lproj/Localizable.strings b/Signal/translations/sk.lproj/Localizable.strings index 533e042f2b..cfa2d29e01 100644 --- a/Signal/translations/sk.lproj/Localizable.strings +++ b/Signal/translations/sk.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Žiadni členovia"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 člen"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Preposlať túto správu"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Preposlať vybranú správu"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Odpovedať na túto správu"; diff --git a/Signal/translations/sl.lproj/Localizable.strings b/Signal/translations/sl.lproj/Localizable.strings index 29428f6a22..8c82fe4f60 100644 --- a/Signal/translations/sl.lproj/Localizable.strings +++ b/Signal/translations/sl.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Reply to This Message"; diff --git a/Signal/translations/sn.lproj/Localizable.strings b/Signal/translations/sn.lproj/Localizable.strings index f8f014e64e..1b2f3cf3c1 100644 --- a/Signal/translations/sn.lproj/Localizable.strings +++ b/Signal/translations/sn.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Pindura Tsamba ino"; diff --git a/Signal/translations/sq.lproj/Localizable.strings b/Signal/translations/sq.lproj/Localizable.strings index a52e8b5ef9..e77a99f750 100644 --- a/Signal/translations/sq.lproj/Localizable.strings +++ b/Signal/translations/sq.lproj/Localizable.strings @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Pa anëtarë"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 anëtar"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Përcilleni Këtë Mesazh"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Përcill Mesazhin e Përzgjedhur"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Përgjigjuni Këtij Mesazhi"; diff --git a/Signal/translations/sv.lproj/Localizable.strings b/Signal/translations/sv.lproj/Localizable.strings index d8b4da5193..aab939c7f7 100644 --- a/Signal/translations/sv.lproj/Localizable.strings +++ b/Signal/translations/sv.lproj/Localizable.strings @@ -330,7 +330,7 @@ "BLOCK_LIST_BLOCKED_USERS_SECTION" = "Blockerade användare"; /* Button label for the 'unblock' button */ -"BLOCK_LIST_UNBLOCK_BUTTON" = "Avblockera"; +"BLOCK_LIST_UNBLOCK_BUTTON" = "Sluta blockera"; /* An explanation of what unblocking a contact means. */ "BLOCK_LIST_UNBLOCK_CONTACT_MESSAGE" = "Ni kommer att kunna meddela och ringa varandra."; @@ -342,10 +342,10 @@ "BLOCK_LIST_UNBLOCK_GROUP_MESSAGE" = "Gruppmedlemmar kommer att kunna lägga till dig i denna grupp igen."; /* Action sheet title when confirming you want to unblock a group. */ -"BLOCK_LIST_UNBLOCK_GROUP_TITLE" = "Avblockera denna grupp?"; +"BLOCK_LIST_UNBLOCK_GROUP_TITLE" = "Sluta blockera denna grupp?"; /* A format for the 'unblock conversation' action sheet title. Embeds the {{conversation title}}. */ -"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "Avblockera %@?"; +"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "Sluta blockera %@?"; /* A label for the block button in the block list view */ "BLOCK_LIST_VIEW_BLOCK_BUTTON" = "Blockera"; @@ -366,7 +366,7 @@ "BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "Fel"; /* Alert title after unblocking a group or 1:1 chat. Embeds the {{conversation title}}. */ -"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE_FORMAT" = "%@har blivit avblockerad."; +"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE_FORMAT" = "%@ har blivit avblockerad."; /* Alert body after unblocking a group. */ "BLOCK_LIST_VIEW_UNBLOCKED_GROUP_ALERT_BODY" = "Befintliga medlemmar kan nu lägga dig till gruppen igen."; @@ -852,10 +852,10 @@ "CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tryck för att ändra"; /* Label for 'unblock group' action in conversation settings view. */ -"CONVERSATION_SETTINGS_UNBLOCK_GROUP" = "Avblockera grupp"; +"CONVERSATION_SETTINGS_UNBLOCK_GROUP" = "Sluta blockera grupp"; /* Label for 'unblock user' action in conversation settings view. */ -"CONVERSATION_SETTINGS_UNBLOCK_USER" = "Avblockera användare"; +"CONVERSATION_SETTINGS_UNBLOCK_USER" = "Sluta blockera användare"; /* Label for button to unmute a thread. */ "CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Ljud på"; @@ -1407,7 +1407,7 @@ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "Inga medlemmar"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "1 medlem"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Vidarebefordra detta meddelande"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Vidarebefordra valt meddelande"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Svara på detta meddelande"; @@ -1974,10 +1971,10 @@ "MESSAGE_REQUEST_VIEW_BLOCK_BUTTON" = "Blockera"; /* A prompt notifying that the user must unblock this conversation to continue. Embeds {{contact name}}. */ -"MESSAGE_REQUEST_VIEW_BLOCKED_CONTACT_PROMPT_FORMAT" = "Vill du låta %@ skicka meddelanden dig? Du kommer inte att få några meddelanden förrän du avblockerar dem."; +"MESSAGE_REQUEST_VIEW_BLOCKED_CONTACT_PROMPT_FORMAT" = "Vill du låta %@ skicka meddelanden dig? Du kommer inte att få några meddelanden förrän du slutar blockera dem."; /* A prompt notifying that the user must unblock this group to continue. Embeds {{group name}}. */ -"MESSAGE_REQUEST_VIEW_BLOCKED_GROUP_PROMPT_FORMAT" = "Vill du låta gruppen %@ skicka meddelanden till dig? Du kommer inte att få några meddelanden förrän du avblockerar den."; +"MESSAGE_REQUEST_VIEW_BLOCKED_GROUP_PROMPT_FORMAT" = "Vill du låta gruppen %@ skicka meddelanden till dig? Du kommer inte att få några meddelanden förrän du slutar blockera den."; /* incoming message request button text which deletes a conversation */ "MESSAGE_REQUEST_VIEW_DELETE_BUTTON" = "Ta bort"; @@ -2001,7 +1998,7 @@ "MESSAGE_REQUEST_VIEW_SHARE_PROFILE_BUTTON" = "Dela profil"; /* A button used to unlock a blocked conversation. */ -"MESSAGE_REQUEST_VIEW_UNBLOCK_BUTTON" = "Avblockera"; +"MESSAGE_REQUEST_VIEW_UNBLOCK_BUTTON" = "Sluta blockera"; /* Header for message requests splash screen */ "MESSAGE_REQUESTS_NAMES_SPLASH_TITLE" = "Introducerar Meddelandeförfrågningar"; diff --git a/Signal/translations/ta.lproj/Localizable.strings b/Signal/translations/ta.lproj/Localizable.strings index 4360f55537..1a45ca0a53 100644 --- a/Signal/translations/ta.lproj/Localizable.strings +++ b/Signal/translations/ta.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "இந்த செய்தியை முன்னோக்கு "; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "இந்த செய்திக்கு பதில்"; diff --git a/Signal/translations/te.lproj/Localizable.strings b/Signal/translations/te.lproj/Localizable.strings index 3a778dbb35..9ce3913503 100644 --- a/Signal/translations/te.lproj/Localizable.strings +++ b/Signal/translations/te.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "ఈ సందేశాన్ని ఫార్వార్డ్ చేయండి"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "ఈ సందేశానికి ప్రత్యుత్తరం ఇవ్వండి"; diff --git a/Signal/translations/th.lproj/Localizable.strings b/Signal/translations/th.lproj/Localizable.strings index 381a7b8185..a295d9b29c 100644 --- a/Signal/translations/th.lproj/Localizable.strings +++ b/Signal/translations/th.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "ส่งต่อข้อความนี้"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "ส่งต่อข้อความที่เลือก"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "ตอบกลับข้อความนี้"; diff --git a/Signal/translations/tr.lproj/Localizable.strings b/Signal/translations/tr.lproj/Localizable.strings index 58d9a5aa33..9593555872 100644 --- a/Signal/translations/tr.lproj/Localizable.strings +++ b/Signal/translations/tr.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Bu İletiyi Yönlendir"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Bu İletiyi Yanıtla"; diff --git a/Signal/translations/uk.lproj/Localizable.strings b/Signal/translations/uk.lproj/Localizable.strings index 39a7cbbbb7..e449e5bea3 100644 --- a/Signal/translations/uk.lproj/Localizable.strings +++ b/Signal/translations/uk.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Переслати це повідомлення"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Відповісти на це повідомлення"; diff --git a/Signal/translations/ur.lproj/Localizable.strings b/Signal/translations/ur.lproj/Localizable.strings index c7af88fd97..aa561bcc1a 100644 --- a/Signal/translations/ur.lproj/Localizable.strings +++ b/Signal/translations/ur.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Forward This Message"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "اس پیغام کا جواب دیں"; diff --git a/Signal/translations/vi.lproj/Localizable.strings b/Signal/translations/vi.lproj/Localizable.strings index 793c7c15d9..b694166b13 100644 --- a/Signal/translations/vi.lproj/Localizable.strings +++ b/Signal/translations/vi.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "Chuyển tiếp tin nhắn này"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "Trả lời Tin nhắn này"; @@ -2223,7 +2220,7 @@ "ONBOARDING_2FA_ATTEMPTS_EXHAUSTED" = "Mã PIN không chính xác. Đã hết số lần thử."; /* Label for the 'create new pin' button when reglock is disabled during onboarding. */ -"ONBOARDING_2FA_CREATE_NEW_PIN" = "Create New PIN"; +"ONBOARDING_2FA_CREATE_NEW_PIN" = "Tạo PIN mới"; /* Button asking if the user would like to enter an alphanumeric PIN */ "ONBOARDING_2FA_ENTER_ALPHANUMERIC" = "Enter Alphanumeric PIN"; @@ -2247,7 +2244,7 @@ "ONBOARDING_2FA_SKIP_AND_CREATE_NEW_PIN" = "Skip and Create New Pin"; /* Explanation for the skip pin entry action sheet during onboarding. */ -"ONBOARDING_2FA_SKIP_PIN_ENTRY_MESSAGE" = "If you can’t remember your PIN, you can create a new one. You can register and use your account but you’ll lose some saved settings like your profile information."; +"ONBOARDING_2FA_SKIP_PIN_ENTRY_MESSAGE" = "Nếu bạn không nhớ mã PIN, bạn có thể tạo PIN mới. Bạn có thể đăng kí và dùng tài khoản của bạn nhưng sẽ mất một vài dữ liệu như thông tin hồ sơ."; /* Title for the skip pin entry action sheet during onboarding. */ "ONBOARDING_2FA_SKIP_PIN_ENTRY_TITLE" = "Skip PIN Entry?"; @@ -3309,7 +3306,7 @@ "SETTINGS_REGISTRATION_LOCK_TURN_ON" = "Turn On"; /* Body for the alert confirming that the user wants to turn on registration lock. */ -"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "If you forget your Signal PIN when registering with Signal again, you’ll be locked out of your account for 7 days."; +"SETTINGS_REGISTRATION_LOCK_TURN_ON_MESSAGE" = "Nếu bạn quên mã PIN khi đăng kí lại với Signal, bạn sẽ không thể truy cập tài khoản trong 7 ngày/"; /* Title for the alert confirming that the user wants to turn on registration lock. */ "SETTINGS_REGISTRATION_LOCK_TURN_ON_TITLE" = "Turn On Registration Lock?"; diff --git a/Signal/translations/zh_CN.lproj/Localizable.strings b/Signal/translations/zh_CN.lproj/Localizable.strings index 0de11021ea..23f92e9622 100644 --- a/Signal/translations/zh_CN.lproj/Localizable.strings +++ b/Signal/translations/zh_CN.lproj/Localizable.strings @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "转发当前消息"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "Forward Selected Message"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "回复此消息"; diff --git a/Signal/translations/zh_TW.lproj/Localizable.strings b/Signal/translations/zh_TW.lproj/Localizable.strings index 906423a02c..1271fe9cd4 100644 --- a/Signal/translations/zh_TW.lproj/Localizable.strings +++ b/Signal/translations/zh_TW.lproj/Localizable.strings @@ -741,7 +741,7 @@ "CONVERSATION_SETTINGS_ADD_TO_SYSTEM_CONTACTS" = "新增系統聯絡人"; /* Label indicating that only administrators can update the group's attributes: name, avatar, etc. */ -"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_ADMINISTRATOR" = "系統管理員"; +"CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_ADMINISTRATOR" = "管理員"; /* Label indicating that all group members can update the group's attributes: name, avatar, etc. */ "CONVERSATION_SETTINGS_ATTRIBUTES_ACCESS_MEMBER" = "全部"; @@ -774,7 +774,7 @@ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS" = " 誰可以編輯群組資訊"; /* Label for button that sets 'group attributes access' to 'administrators-only'. */ -"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_ADMINISTRATORS_BUTTON" = "只有系統管理員"; +"CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_ADMINISTRATORS_BUTTON" = "只有管理員"; /* Description for the 'edit group attributes access' alert. */ "CONVERSATION_SETTINGS_EDIT_ATTRIBUTES_ACCESS_ALERT_DESCRIPTION" = "選擇誰可以改變此群組名稱,頭像極自動銷毀訊息時間。"; @@ -789,10 +789,10 @@ "CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "群組資訊"; /* Label for 'make group admin' button in conversation settings view. */ -"CONVERSATION_SETTINGS_MAKE_GROUP_ADMIN_BUTTON" = "成為系統管理員"; +"CONVERSATION_SETTINGS_MAKE_GROUP_ADMIN_BUTTON" = "成為管理員"; /* Format for title for 'make group admin' confirmation alert. Embeds {user to make an admin}. */ -"CONVERSATION_SETTINGS_MAKE_GROUP_ADMIN_TITLE_FORMAT" = "%@將可以移除群組成員及讓其他人成為系統管理員。"; +"CONVERSATION_SETTINGS_MAKE_GROUP_ADMIN_TITLE_FORMAT" = "%@將可以移除群組成員及讓其他人成為管理員。"; /* Section title of the 'members' section in conversation settings view. */ "CONVERSATION_SETTINGS_MEMBERS_SECTION_TITLE" = "成員"; @@ -840,10 +840,10 @@ "CONVERSATION_SETTINGS_REMOVE_FROM_GROUP_TITLE_FORMAT" = "從群組移除%@嗎?"; /* Label for 'revoke group admin' button in conversation settings view. */ -"CONVERSATION_SETTINGS_REVOKE_GROUP_ADMIN_BUTTON" = "以系統管理員身分移除"; +"CONVERSATION_SETTINGS_REVOKE_GROUP_ADMIN_BUTTON" = "以管理員身分移除"; /* Format for title for 'revoke group admin' confirmation alert. Embeds {user to revoke admin status from}. */ -"CONVERSATION_SETTINGS_REVOKE_GROUP_ADMIN_TITLE_FORMAT" = "以群組系統管理員來移除%@嗎?"; +"CONVERSATION_SETTINGS_REVOKE_GROUP_ADMIN_TITLE_FORMAT" = "以群組管理員來移除%@嗎?"; /* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */ "CONVERSATION_SETTINGS_SEARCH" = "搜尋對話"; @@ -1401,13 +1401,13 @@ "GROUP_MANAGEMENT_SECTION" = "群組管理"; /* Label indicating that a group member is an admin. */ -"GROUP_MEMBER_ADMIN_INDICATOR" = "系統管理員"; +"GROUP_MEMBER_ADMIN_INDICATOR" = "管理員"; /* Format string for the group member count indicator. Embeds {{ %1$@ the number of members in the group, %2$@ the maximum number of members in the group. }}. */ "GROUP_MEMBER_COUNT_FORMAT" = "%1$@/%2$@"; /* The 'group member count' indicator when there are no members in the group. */ -"GROUP_MEMBER_COUNT_LABEL_0" = "No members"; +"GROUP_MEMBER_COUNT_LABEL_0" = "沒有成員"; /* The 'group member count' indicator when there is 1 member in the group. */ "GROUP_MEMBER_COUNT_LABEL_1" = "有 1 名成員"; @@ -1527,7 +1527,7 @@ "GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_LOCAL_USER" = "你的管理員權限被%@撤銷了。"; /* Message indicating that a remote user had their administrator role revoked by another user. Embeds {{ %1$@ user who revoked, %2$@ user who was granted administrator role}}. */ -"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@從%2$@撤消了管理權限。"; +"GROUP_REMOTE_USER_REVOKED_ADMINISTRATOR_BY_REMOTE_USER_FORMAT" = "%1$@從%2$@撤消了管理員權限。"; /* Info message indicating that the group was updated by an unknown user. */ "GROUP_UPDATED" = "群組已更新。"; @@ -1578,7 +1578,7 @@ "GROUP_YOU_LEFT" = "你已退出了群組。"; /* Message for the 'can't replace group admin' alert. */ -"GROUPS_CANT_REPLACE_ADMIN_ALERT_MESSAGE" = "在離開此群組前請選擇一位新的系統管理者。"; +"GROUPS_CANT_REPLACE_ADMIN_ALERT_MESSAGE" = "在離開此群組前請選擇一位新的管理員。"; /* Error indicating that an error occurred while accepting an invite. */ "GROUPS_INVITE_ACCEPT_INVITE_FAILED" = "無法接受邀請。"; @@ -1593,13 +1593,13 @@ "GROUPS_INVITE_BLOCK_INVITER_FORMAT" = "封鎖%@"; /* Message for the 'replace group admin' alert. */ -"GROUPS_REPLACE_ADMIN_ALERT_MESSAGE" = "在你離開之前,為此群組選擇一位新的系統管理者。"; +"GROUPS_REPLACE_ADMIN_ALERT_MESSAGE" = "在你離開之前,為此群組選擇一位新的管理員。"; /* Title for the 'replace group admin' alert. */ -"GROUPS_REPLACE_ADMIN_ALERT_TITLE" = "選擇新的系統管理者"; +"GROUPS_REPLACE_ADMIN_ALERT_TITLE" = "選擇新的管理者"; /* Label for the 'replace group admin' button. */ -"GROUPS_REPLACE_ADMIN_BUTTON" = "選擇新的系統管理者"; +"GROUPS_REPLACE_ADMIN_BUTTON" = "選擇新的管理者"; /* Label for 'archived conversations' button. */ "HOME_VIEW_ARCHIVED_CONVERSATIONS" = "封存對話"; @@ -1868,9 +1868,6 @@ /* Action sheet button title */ "MESSAGE_ACTION_FORWARD_MESSAGE" = "轉寄此訊息"; -/* accessibility label */ -"MESSAGE_ACTION_FORWARD_SELECTED_MESSAGE" = "轉寄所選擇的訊息"; - /* Action sheet button title */ "MESSAGE_ACTION_REPLY" = "回覆這個訊息"; @@ -2922,7 +2919,7 @@ "REMINDER_2FA_WRONG_PIN_ALERT_TITLE" = "這不是正確的 PIN 碼。"; /* The title for the 'replace group admin' view. */ -"REPLACE_ADMIN_VIEW_TITLE" = "選擇新的系統管理者"; +"REPLACE_ADMIN_VIEW_TITLE" = "選擇新的管理者"; /* No comment provided by engineer. */ "REREGISTER_FOR_PUSH" = "重新註冊推播通知"; diff --git a/SignalMessaging/groups/GroupV2UpdatesImpl.swift b/SignalMessaging/groups/GroupV2UpdatesImpl.swift index e8d748fbfa..3065ef09ee 100644 --- a/SignalMessaging/groups/GroupV2UpdatesImpl.swift +++ b/SignalMessaging/groups/GroupV2UpdatesImpl.swift @@ -362,10 +362,10 @@ public class GroupV2UpdatesImpl: NSObject, GroupV2UpdatesSwift { throw OWSAssertionError("Invalid group model.") } guard updatedGroupModel.revision > changedGroupModel.oldGroupModel.revision else { - throw OWSAssertionError("Invalid groupV2Revision: \(changedGroupModel.newGroupModel.revision).") + throw OWSAssertionError("Invalid groupV2Revision: \(updatedGroupModel.revision) <= \(changedGroupModel.oldGroupModel.revision).") } guard updatedGroupModel.revision >= changedGroupModel.newGroupModel.revision else { - throw OWSAssertionError("Invalid groupV2Revision: \(changedGroupModel.newGroupModel.revision).") + throw OWSAssertionError("Invalid groupV2Revision: \(updatedGroupModel.revision) < \(changedGroupModel.newGroupModel.revision).") } return updatedGroupThread } @@ -471,11 +471,11 @@ public class GroupV2UpdatesImpl: NSObject, GroupV2UpdatesSwift { let newGroupModel = try builder.build(transaction: transaction) if changeRevision == oldGroupModel.revision { - if !oldGroupModel.isEqual(to: newGroupModel) { + if !oldGroupModel.isEqual(to: newGroupModel, ignoreRevision: false) { // Sometimes we re-apply the snapshot corresponding to the // current revision when refreshing the group from the service. // This should match the state in the database. If it doesn't, - // this reflects a bug, perhaps\ a deviation in how the service + // this reflects a bug, perhaps a deviation in how the service // and client apply the "group changes" to the local model. Logger.verbose("oldGroupModel: \(oldGroupModel.debugDescription)") Logger.verbose("newGroupModel: \(newGroupModel.debugDescription)") diff --git a/SignalMessaging/groups/GroupsV2Changes.swift b/SignalMessaging/groups/GroupsV2Changes.swift index d9e553f44e..1da113ce46 100644 --- a/SignalMessaging/groups/GroupsV2Changes.swift +++ b/SignalMessaging/groups/GroupsV2Changes.swift @@ -107,18 +107,14 @@ public class GroupsV2Changes { groupMembershipBuilder.remove(address) groupMembershipBuilder.addNonPendingMember(address, role: role) - do { - guard let profileKeyCiphertextData = member.profileKey else { - throw OWSAssertionError("Missing profileKeyCiphertext.") - } - let profileKeyCiphertext = try ProfileKeyCiphertext(contents: [UInt8](profileKeyCiphertextData)) - let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, - uuid: uuid) - - profileKeys[uuid] = profileKey - } catch { - owsFailDebug("Error parsing profile key: \(error)") + guard let profileKeyCiphertextData = member.profileKey else { + throw OWSAssertionError("Missing profileKeyCiphertext.") } + let profileKeyCiphertext = try ProfileKeyCiphertext(contents: [UInt8](profileKeyCiphertextData)) + let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, + uuid: uuid) + + profileKeys[uuid] = profileKey } for action in changeActionsProto.deleteMembers { @@ -168,14 +164,10 @@ public class GroupsV2Changes { throw OWSAssertionError("Invalid membership.") } - do { - let profileKeyCiphertext = try presentation.getProfileKeyCiphertext() - let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, - uuid: uuid) - profileKeys[uuid] = profileKey - } catch { - owsFailDebug("Error parsing profile key: \(error)") - } + let profileKeyCiphertext = try presentation.getProfileKeyCiphertext() + let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, + uuid: uuid) + profileKeys[uuid] = profileKey } for action in changeActionsProto.addPendingMembers { @@ -194,13 +186,19 @@ public class GroupsV2Changes { guard let role = TSGroupMemberRole.role(for: protoRole) else { throw OWSAssertionError("Invalid role: \(protoRole.rawValue)") } - let uuid = try groupV2Params.uuid(forUserId: userId) - let address = SignalServiceAddress(uuid: uuid) guard let addedByUserID = pendingMember.addedByUserID else { throw OWSAssertionError("Group pending member missing addedByUserID.") } - let addedByUuid = try groupV2Params.uuid(forUserId: addedByUserID) - + let uuid: UUID + let addedByUuid: UUID + do { + uuid = try groupV2Params.uuid(forUserId: userId) + addedByUuid = try groupV2Params.uuid(forUserId: addedByUserID) + } catch { + owsFailDebug("Error parsing uuid: \(error)") + continue + } + let address = SignalServiceAddress(uuid: uuid) guard !oldGroupMembership.allUsers.contains(address) else { throw OWSAssertionError("Invalid membership.") } @@ -242,14 +240,10 @@ public class GroupsV2Changes { groupMembershipBuilder.remove(address) groupMembershipBuilder.addNonPendingMember(address, role: role) - do { - let profileKeyCiphertext = try presentation.getProfileKeyCiphertext() - let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, - uuid: uuid) - profileKeys[uuid] = profileKey - } catch { - owsFailDebug("Error parsing profile key: \(error)") - } + let profileKeyCiphertext = try presentation.getProfileKeyCiphertext() + let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, + uuid: uuid) + profileKeys[uuid] = profileKey } if let action = changeActionsProto.modifyTitle { diff --git a/SignalMessaging/groups/GroupsV2Impl.swift b/SignalMessaging/groups/GroupsV2Impl.swift index 70276675f0..b95f1f2b51 100644 --- a/SignalMessaging/groups/GroupsV2Impl.swift +++ b/SignalMessaging/groups/GroupsV2Impl.swift @@ -92,7 +92,7 @@ public class GroupsV2Impl: NSObject, GroupsV2Swift { // zkgroup library. Instead it's a counter we should bump // every time there are breaking changes zkgroup library, e.g. // changes to data formats. - let zkgroupVersionCounter: Int = 2 + let zkgroupVersionCounter: Int = 3 let shouldReset = databaseStorage.read { transaction -> Bool in guard serverPublicParamsBase64 == self.serviceStore.getString(lastServerPublicParamsKey, transaction: transaction) else { diff --git a/SignalMessaging/groups/GroupsV2Protos.swift b/SignalMessaging/groups/GroupsV2Protos.swift index 762688930b..46d1fcaae9 100644 --- a/SignalMessaging/groups/GroupsV2Protos.swift +++ b/SignalMessaging/groups/GroupsV2Protos.swift @@ -242,18 +242,13 @@ public class GroupsV2Protos { role: role) members.append(member) - do { - let uuid = try groupV2Params.uuid(forUserId: userID) - guard let profileKeyCiphertextData = memberProto.profileKey else { - throw OWSAssertionError("Group member missing profileKeyCiphertextData.") - } - let profileKeyCiphertext = try ProfileKeyCiphertext(contents: [UInt8](profileKeyCiphertextData)) - let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, - uuid: uuid) - profileKeys[uuid] = profileKey - } catch { - owsFailDebug("Error parsing profile key: \(error)") + guard let profileKeyCiphertextData = memberProto.profileKey else { + throw OWSAssertionError("Group member missing profileKeyCiphertextData.") } + let profileKeyCiphertext = try ProfileKeyCiphertext(contents: [UInt8](profileKeyCiphertextData)) + let profileKey = try groupV2Params.profileKey(forProfileKeyCiphertext: profileKeyCiphertext, + uuid: uuid) + profileKeys[uuid] = profileKey } var pendingMembers = [GroupV2SnapshotImpl.PendingMember]() @@ -271,13 +266,19 @@ public class GroupsV2Protos { throw OWSAssertionError("Group pending member missing addedByUserID.") } let timestamp = pendingMemberProto.timestamp - - let uuid = try groupV2Params.uuid(forUserId: userId) - let addedByUuid = try groupV2Params.uuid(forUserId: addedByUserId) - guard memberProto.hasRole, let role = memberProto.role else { throw OWSAssertionError("Group member missing role.") } + + let uuid: UUID + let addedByUuid: UUID + do { + uuid = try groupV2Params.uuid(forUserId: userId) + addedByUuid = try groupV2Params.uuid(forUserId: addedByUserId) + } catch { + owsFailDebug("Error parsing uuid: \(error)") + continue + } let pendingMember = GroupV2SnapshotImpl.PendingMember(userID: userId, uuid: uuid, timestamp: timestamp, diff --git a/SignalServiceKit/src/Network/API/Requests/TSRequest.m b/SignalServiceKit/src/Network/API/Requests/TSRequest.m index 02bed086b9..d40dc435a5 100644 --- a/SignalServiceKit/src/Network/API/Requests/TSRequest.m +++ b/SignalServiceKit/src/Network/API/Requests/TSRequest.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2019 Open Whisper Systems. All rights reserved. +// Copyright (c) 2020 Open Whisper Systems. All rights reserved. // #import "TSRequest.h" @@ -111,6 +111,9 @@ NS_ASSUME_NONNULL_BEGIN @synchronized(self) { NSString *_Nullable result = (_authUsername ?: self.tsAccountManager.storedServerUsername); + if (result.length < 1) { + OWSLogVerbose(@"%@", self.debugDescription); + } OWSAssertDebug(result.length > 0); return result; } @@ -122,6 +125,9 @@ NS_ASSUME_NONNULL_BEGIN @synchronized(self) { NSString *_Nullable result = (_authPassword ?: self.tsAccountManager.storedServerAuthToken); + if (result.length < 1) { + OWSLogVerbose(@"%@", self.debugDescription); + } OWSAssertDebug(result.length > 0); return result; } diff --git a/SignalServiceKit/src/Storage/Database/Snapshots/UIDatabaseSnapshot.swift b/SignalServiceKit/src/Storage/Database/Snapshots/UIDatabaseSnapshot.swift index 172c1c1418..140bc69590 100644 --- a/SignalServiceKit/src/Storage/Database/Snapshots/UIDatabaseSnapshot.swift +++ b/SignalServiceKit/src/Storage/Database/Snapshots/UIDatabaseSnapshot.swift @@ -97,6 +97,17 @@ public class UIDatabaseObserver: NSObject { selector: #selector(didReceiveCrossProcessNotification), name: SDSDatabaseStorage.didReceiveCrossProcessNotification, object: nil) + NotificationCenter.default.addObserver(self, + selector: #selector(didBecomeActive), + name: .OWSApplicationDidBecomeActive, + object: nil) + NotificationCenter.default.addObserver(self, + selector: #selector(willResignActive), + name: .OWSApplicationWillResignActive, + object: nil) + if CurrentAppContext().reportedApplicationState == .active { + lastAppActivationDate = Date() + } } @objc @@ -108,6 +119,22 @@ public class UIDatabaseObserver: NSObject { delegate.databaseSnapshotDidUpdateExternally() } } + + fileprivate var lastAppActivationDate: Date? + + @objc + func didBecomeActive() { + AssertIsOnMainThread() + + lastAppActivationDate = Date() + } + + @objc + func willResignActive() { + AssertIsOnMainThread() + + lastAppActivationDate = nil + } } extension UIDatabaseObserver: TransactionObserver { @@ -217,7 +244,25 @@ extension UIDatabaseObserver: TransactionObserver { private static let isRunningCheckpoint = AtomicBool(false) + private var canDoRestartCheckpoint: Bool { + AssertIsOnMainThread() + + // To avoid 0x8badf00d crashes, don't perform restart checkpoints + // unless app has been active for N seconds. + guard CurrentAppContext().isMainAppAndActive else { + return false + } + guard let lastAppActivationDate = lastAppActivationDate else { + return false + } + let minTimeIntervalSinceActive: TimeInterval = 5 + let timeIntervalSinceActive = lastAppActivationDate.timeIntervalSinceNow + return abs(timeIntervalSinceActive) >= minTimeIntervalSinceActive + } + func checkpoint() throws { + AssertIsOnMainThread() + do { try UIDatabaseObserver.isRunningCheckpoint.transition(from: false, to: true) } catch { @@ -228,9 +273,12 @@ extension UIDatabaseObserver: TransactionObserver { UIDatabaseObserver.isRunningCheckpoint.set(false) } - // Try to restart after every Nth write. - let restartFrequency: UInt32 = 100 - let shouldTryToRestart = arc4random_uniform(restartFrequency) == 0 + var shouldTryToRestart = false + if canDoRestartCheckpoint { + // Try to restart after every Nth write. + let restartFrequency: UInt32 = 100 + shouldTryToRestart = arc4random_uniform(restartFrequency) == 0 + } let mode: Database.CheckpointMode = shouldTryToRestart ? .restart : .passive let result = try GRDBDatabaseStorageAdapter.checkpoint(pool: pool, mode: mode) diff --git a/SignalServiceKit/src/TSConstants.swift b/SignalServiceKit/src/TSConstants.swift index bb733e4d9d..a3da1ca902 100644 --- a/SignalServiceKit/src/TSConstants.swift +++ b/SignalServiceKit/src/TSConstants.swift @@ -183,7 +183,7 @@ private class TSConstantsProduction: TSConstantsProtocol { // We need to discard all profile key credentials if these values ever change. // See: GroupsV2Impl.verifyServerPublicParams(...) - public let serverPublicParamsBase64 = "DDZM414H2QbA3brAa6NCMaZIN1ZRY+B46PWDvw4LmwrY6CEQArF4OF/yHdBL7HW/JPgjjauzJau+cpikvqH3dDZQ7KFKgx/MGsbw49ATUj6fhBXko9iyPwVwC3+kjNY6PGZuSoYpD4SJJIgzTJ8Gnuk23tSbX1aQWAWNlc8WiyWIHm/A+22w/D1zQmGuFCEGImU4blMK+HhNfC7jM5leBQ==" + public let serverPublicParamsBase64 = "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X0==" } // MARK: - @@ -224,5 +224,5 @@ private class TSConstantsStaging: TSConstantsProtocol { // We need to discard all profile key credentials if these values ever change. // See: GroupsV2Impl.verifyServerPublicParams(...) - public let serverPublicParamsBase64 = "5Eng41NE+ClLn5MDjfb8ahw/SgmYPXw6wafMsH5hJVeSY3+Hlqz+DCbtcv4y9HHQwP0VA131bvqnBp7psSJZLlpANq5RA7NLMvE7ox17oiCvEKnHKoccrxqLDYNfbsgGmNYOaedYZ+/mTzsx+ndnQmOnGerWYCzeKJiRTTBD5TRWb/rqCsmb0RnqkWTIqxYUR4tLgIKkS1MfduVJmAYPGQ==" + public let serverPublicParamsBase64 = "ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdls==" } diff --git a/SignalServiceKit/src/groups/GroupManager.swift b/SignalServiceKit/src/groups/GroupManager.swift index 8afbb327a0..32900c94ce 100644 --- a/SignalServiceKit/src/groups/GroupManager.swift +++ b/SignalServiceKit/src/groups/GroupManager.swift @@ -10,7 +10,8 @@ public class UpsertGroupResult: NSObject { @objc public enum Action: UInt { case inserted - case updated + case updatedWithUserFacingChanges + case updatedWithoutUserFacingChanges case unchanged } @@ -821,7 +822,7 @@ public class GroupManager: NSObject { groupModelBuilder.groupMembership = groupMembership let newGroupModel = try groupModelBuilder.build(transaction: transaction) - if oldGroupModel.isEqual(to: newGroupModel) { + if oldGroupModel.isEqual(to: newGroupModel, ignoreRevision: false) { // Skip redundant update. throw GroupsV2Error.redundantChange } @@ -891,7 +892,7 @@ public class GroupManager: NSObject { builder.groupV2Revision = newRevision let newGroupModel = try builder.build(transaction: transaction) - if oldGroupModel.isEqual(to: newGroupModel) { + if oldGroupModel.isEqual(to: newGroupModel, ignoreRevision: false) { // Skip redundant update. throw GroupsV2Error.redundantChange } @@ -1544,11 +1545,6 @@ public class GroupManager: NSObject { // Step 3: Update group in database, if necessary. let oldGroupModel = groupThread.groupModel let updateThreadResult: UpsertGroupResult = { - guard !oldGroupModel.isEqual(to: newGroupModel) else { - // Skip redundant update. - return UpsertGroupResult(action: .unchanged, groupThread: groupThread) - } - if let newGroupModelV2 = newGroupModel as? TSGroupModelV2, let oldGroupModelV2 = oldGroupModel as? TSGroupModelV2 { guard newGroupModelV2.revision >= oldGroupModelV2.revision else { @@ -1566,14 +1562,25 @@ public class GroupManager: NSObject { } } + guard !oldGroupModel.isEqual(to: newGroupModel, ignoreRevision: false) else { + // Skip redundant update. + return UpsertGroupResult(action: .unchanged, groupThread: groupThread) + } + + let hasUserFacingChange = !oldGroupModel.isEqual(to: newGroupModel, ignoreRevision: true) + groupThread.update(with: newGroupModel, transaction: transaction) - return UpsertGroupResult(action: .updated, groupThread: groupThread) + let action: UpsertGroupResult.Action = (hasUserFacingChange + ? .updatedWithUserFacingChanges + : .updatedWithoutUserFacingChanges) + return UpsertGroupResult(action: action, groupThread: groupThread) }() if updateDMResult.action == .unchanged && - updateThreadResult.action == .unchanged { - // Neither DM config nor thread model changed. + (updateThreadResult.action == .unchanged || + updateThreadResult.action == .updatedWithoutUserFacingChanges) { + // Neither DM config nor thread model had user-facing changes. return updateThreadResult } @@ -1590,7 +1597,7 @@ public class GroupManager: NSObject { break } - return UpsertGroupResult(action: .updated, groupThread: groupThread) + return UpsertGroupResult(action: .updatedWithUserFacingChanges, groupThread: groupThread) } // MARK: - Storage Service diff --git a/SignalServiceKit/src/groups/TSGroupModel.h b/SignalServiceKit/src/groups/TSGroupModel.h index 675efa7c8f..076d1499e3 100644 --- a/SignalServiceKit/src/groups/TSGroupModel.h +++ b/SignalServiceKit/src/groups/TSGroupModel.h @@ -53,7 +53,7 @@ typedef NS_CLOSED_ENUM( members:(NSArray *)members NS_DESIGNATED_INITIALIZER; - (BOOL)isEqual:(id)other; -- (BOOL)isEqualToGroupModel:(TSGroupModel *)model; +- (BOOL)isEqualToGroupModel:(TSGroupModel *)model ignoreRevision:(BOOL)ignoreRevision; #endif @property (nonatomic, readonly) NSString *groupNameOrDefault; diff --git a/SignalServiceKit/src/groups/TSGroupModel.m b/SignalServiceKit/src/groups/TSGroupModel.m index 00bfaeadc3..949edf543a 100644 --- a/SignalServiceKit/src/groups/TSGroupModel.m +++ b/SignalServiceKit/src/groups/TSGroupModel.m @@ -153,10 +153,11 @@ NSUInteger const TSGroupModelSchemaVersion = 1; if (!other || ![other isKindOfClass:[self class]]) { return NO; } - return [self isEqualToGroupModel:other]; + return [self isEqualToGroupModel:other ignoreRevision:NO]; } -- (BOOL)isEqualToGroupModel:(TSGroupModel *)other { +- (BOOL)isEqualToGroupModel:(TSGroupModel *)other ignoreRevision:(BOOL)ignoreRevision +{ if (self == other) { return YES; } @@ -174,7 +175,6 @@ NSUInteger const TSGroupModelSchemaVersion = 1; if (![myGroupMembersSet isEqualToSet:otherGroupMembersSet]) { return NO; } - if (self.groupsVersion != other.groupsVersion) { return NO; } diff --git a/SignalServiceKit/src/groups/TSGroupModel.swift b/SignalServiceKit/src/groups/TSGroupModel.swift index 2544cfd039..3b896c112b 100644 --- a/SignalServiceKit/src/groups/TSGroupModel.swift +++ b/SignalServiceKit/src/groups/TSGroupModel.swift @@ -77,8 +77,9 @@ public class TSGroupModelV2: TSGroupModel { return Array(groupMembership.nonPendingMembers) } - public override func isEqual(to model: TSGroupModel) -> Bool { - guard super.isEqual(to: model) else { + public override func isEqual(to model: TSGroupModel, + ignoreRevision: Bool) -> Bool { + guard super.isEqual(to: model, ignoreRevision: ignoreRevision) else { return false } guard let other = model as? TSGroupModelV2 else { @@ -93,7 +94,7 @@ public class TSGroupModelV2: TSGroupModel { guard other.secretParamsData == secretParamsData else { return false } - guard other.revision == revision else { + guard ignoreRevision || other.revision == revision else { return false } guard other.avatarUrlPath == avatarUrlPath else { diff --git a/SignalShareExtension/Info.plist b/SignalShareExtension/Info.plist index eff9a4628a..dae62455da 100644 --- a/SignalShareExtension/Info.plist +++ b/SignalShareExtension/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 3.8.0 + 3.8.1 CFBundleVersion - 3.8.0.35 + 3.8.1.2 ITSAppUsesNonExemptEncryption NSAppTransportSecurity