From 6d6d1de782c861b35e3b6c77a0d0398718c8c235 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 14 Mar 2019 08:28:17 -0700 Subject: [PATCH 1/5] "Bump build to 2.37.2.0." --- Signal/Signal-Info.plist | 4 ++-- SignalShareExtension/Info.plist | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index aef4381c2..40ce1d468 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -30,7 +30,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.37.1 + 2.37.2 CFBundleSignature ???? CFBundleURLTypes @@ -47,7 +47,7 @@ CFBundleVersion - 2.37.1.0 + 2.37.2.0 ITSAppUsesNonExemptEncryption LOGS_EMAIL diff --git a/SignalShareExtension/Info.plist b/SignalShareExtension/Info.plist index 54de6b176..6e9e39268 100644 --- a/SignalShareExtension/Info.plist +++ b/SignalShareExtension/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 2.37.1 + 2.37.2 CFBundleVersion - 2.37.1.0 + 2.37.2.0 ITSAppUsesNonExemptEncryption NSAppTransportSecurity From 72ab6507ea459a35e4fa18dd6fc93ab903cd4893 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 14 Mar 2019 07:56:48 -0700 Subject: [PATCH 2/5] fix crash when presenting alerts on iOS9 --- Signal.xcodeproj/project.pbxproj | 4 ++ Signal/src/UIAlerts+iOS9.m | 85 ++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 Signal/src/UIAlerts+iOS9.m diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index aadd52a2a..5ec0b33aa 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -462,6 +462,7 @@ 4C1885D2218F8E1C00B67051 /* PhotoGridViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1885D1218F8E1C00B67051 /* PhotoGridViewCell.swift */; }; 4C20B2B720CA0034001BAC90 /* ThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4542DF51208B82E9007B4E76 /* ThreadViewModel.swift */; }; 4C20B2B920CA10DE001BAC90 /* ConversationSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C20B2B820CA10DE001BAC90 /* ConversationSearchViewController.swift */; }; + 4C21D5D6223A9DC500EF8A77 /* UIAlerts+iOS9.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C21D5D5223A9DC500EF8A77 /* UIAlerts+iOS9.m */; }; 4C23A5F2215C4ADE00534937 /* SheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C23A5F1215C4ADE00534937 /* SheetViewController.swift */; }; 4C2F454F214C00E1004871FF /* AvatarTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2F454E214C00E1004871FF /* AvatarTableViewCell.swift */; }; 4C3E245C21F29FCE000AE092 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA5F792211E1F06008C2708 /* Toast.swift */; }; @@ -1196,6 +1197,7 @@ 4C1D233A218B6CDB00A0598F /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = translations/th.lproj/Localizable.strings; sourceTree = ""; }; 4C1D233B218B6D3100A0598F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = translations/tr.lproj/Localizable.strings; sourceTree = ""; }; 4C20B2B820CA10DE001BAC90 /* ConversationSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationSearchViewController.swift; sourceTree = ""; }; + 4C21D5D5223A9DC500EF8A77 /* UIAlerts+iOS9.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIAlerts+iOS9.m"; sourceTree = ""; }; 4C23A5F1215C4ADE00534937 /* SheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetViewController.swift; sourceTree = ""; }; 4C2F454E214C00E1004871FF /* AvatarTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarTableViewCell.swift; sourceTree = ""; }; 4C3EF7FC2107DDEE0007EBF7 /* ParamParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParamParserTest.swift; sourceTree = ""; }; @@ -2614,6 +2616,7 @@ FCFA64B11A24F29E0007FB87 /* UI Categories */ = { isa = PBXGroup; children = ( + 4C21D5D5223A9DC500EF8A77 /* UIAlerts+iOS9.m */, 45C0DC1A1E68FE9000E04C47 /* UIApplication+OWS.swift */, 45C0DC1D1E69011F00E04C47 /* UIStoryboard+OWS.swift */, EF764C331DB67CC5000D9A87 /* UIViewController+Permissions.h */, @@ -3613,6 +3616,7 @@ 34D1F0841F8678AA0066283D /* ConversationInputToolbar.m in Sources */, 457F671B20746193000EABCD /* QuotedReplyPreview.swift in Sources */, 34A6C28021E503E700B5B12E /* OWSImagePickerController.swift in Sources */, + 4C21D5D6223A9DC500EF8A77 /* UIAlerts+iOS9.m in Sources */, 34DBF004206BD5A500025978 /* OWSBubbleView.m in Sources */, 3496957021A301A100DCFE74 /* OWSBackupIO.m in Sources */, 34E88D262098C5AE00A608F4 /* ContactViewController.swift in Sources */, diff --git a/Signal/src/UIAlerts+iOS9.m b/Signal/src/UIAlerts+iOS9.m new file mode 100644 index 000000000..bd2fa7ced --- /dev/null +++ b/Signal/src/UIAlerts+iOS9.m @@ -0,0 +1,85 @@ +// +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. +// + +#import + +@implementation UIAlertController (iOS9) + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // On iOS9, avoids an exception when presenting an alert controller. + // + // *** Assertion failure in -[UIAlertController supportedInterfaceOrientations], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.30.14/UIAlertController.m:542 + // Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIAlertController:supportedInterfaceOrientations was invoked recursively!' + // + // I'm not sure when this was introduced, or the exact root casue, but this quick workaround + // seems reasonable given the small size of our iOS9 userbase. + if (@available(iOS 10, *)) { + return; + } + + Class class = [self class]; + + // supportedInterfaceOrientation + + SEL originalOrientationSelector = @selector(supportedInterfaceOrientations); + SEL swizzledOrientationSelector = @selector(ows_iOS9Alerts_swizzle_supportedInterfaceOrientation); + + Method originalOrientationMethod = class_getInstanceMethod(class, originalOrientationSelector); + Method swizzledOrientationMethod = class_getInstanceMethod(class, swizzledOrientationSelector); + + BOOL didAddOrientationMethod = class_addMethod(class, + originalOrientationSelector, + method_getImplementation(swizzledOrientationMethod), + method_getTypeEncoding(swizzledOrientationMethod)); + + if (didAddOrientationMethod) { + class_replaceMethod(class, + swizzledOrientationSelector, + method_getImplementation(originalOrientationMethod), + method_getTypeEncoding(originalOrientationMethod)); + } else { + method_exchangeImplementations(originalOrientationMethod, swizzledOrientationMethod); + } + + // shouldAutorotate + + SEL originalAutorotateSelector = @selector(shouldAutorotate); + SEL swizzledAutorotateSelector = @selector(ows_iOS9Alerts_swizzle_shouldAutorotate); + + Method originalAutorotateMethod = class_getInstanceMethod(class, originalAutorotateSelector); + Method swizzledAutorotateMethod = class_getInstanceMethod(class, swizzledAutorotateSelector); + + BOOL didAddAutorotateMethod = class_addMethod(class, + originalAutorotateSelector, + method_getImplementation(swizzledAutorotateMethod), + method_getTypeEncoding(swizzledAutorotateMethod)); + + if (didAddAutorotateMethod) { + class_replaceMethod(class, + swizzledAutorotateSelector, + method_getImplementation(originalAutorotateMethod), + method_getTypeEncoding(originalAutorotateMethod)); + } else { + method_exchangeImplementations(originalAutorotateMethod, swizzledAutorotateMethod); + } + }); +} + +#pragma mark - Method Swizzling + +- (UIInterfaceOrientationMask)ows_iOS9Alerts_swizzle_supportedInterfaceOrientation +{ + OWSLogInfo(@"swizzled"); + return UIInterfaceOrientationMaskAllButUpsideDown; +} + +- (BOOL)ows_iOS9Alerts_swizzle_shouldAutorotate +{ + OWSLogInfo(@"swizzled"); + return NO; +} + +@end From d5664dae4b0e6d45030d631918e528dad3466544 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 11 Mar 2019 12:36:44 -0700 Subject: [PATCH 3/5] Change to non-crashing assert --- Signal/src/views/LinkPreviewView.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Signal/src/views/LinkPreviewView.swift b/Signal/src/views/LinkPreviewView.swift index d61ed8135..07d3037ac 100644 --- a/Signal/src/views/LinkPreviewView.swift +++ b/Signal/src/views/LinkPreviewView.swift @@ -117,7 +117,8 @@ public class LinkPreviewDraft: NSObject, LinkPreviewState { return nil } guard let image = UIImage(contentsOfFile: imageFilepath) else { - owsFail("Could not load image: \(imageFilepath)") + owsFailDebug("Could not load image: \(imageFilepath)") + return nil } return image } From a34266094357ffaef2760a7608786e991f6b848d Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 13 Mar 2019 11:11:20 -0700 Subject: [PATCH 4/5] fix "none" notification tone --- .../Notifications/UserNotificationsAdaptee.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Signal/src/UserInterface/Notifications/UserNotificationsAdaptee.swift b/Signal/src/UserInterface/Notifications/UserNotificationsAdaptee.swift index 412ed633c..215d17ab1 100644 --- a/Signal/src/UserInterface/Notifications/UserNotificationsAdaptee.swift +++ b/Signal/src/UserInterface/Notifications/UserNotificationsAdaptee.swift @@ -113,7 +113,9 @@ extension UserNotificationPresenterAdaptee: NotificationPresenterAdaptee { content.categoryIdentifier = category.identifier content.userInfo = userInfo let isAppActive = UIApplication.shared.applicationState == .active - content.sound = sound?.notificationSound(isQuiet: isAppActive) + if let sound = sound, sound != OWSSound.none { + content.sound = sound.notificationSound(isQuiet: isAppActive) + } var notificationIdentifier: String = UUID().uuidString if let replacingIdentifier = replacingIdentifier { From 256d308e30c4d279102e05167987e250a93e6085 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 14 Mar 2019 08:32:48 -0700 Subject: [PATCH 5/5] pull latest translations --- .../translations/cs.lproj/Localizable.strings | 4 +- .../translations/de.lproj/Localizable.strings | 6 +-- .../translations/et.lproj/Localizable.strings | 4 +- .../translations/hu.lproj/Localizable.strings | 4 +- .../translations/nb.lproj/Localizable.strings | 2 +- .../pt_BR.lproj/Localizable.strings | 54 +++++++++---------- .../translations/sl.lproj/Localizable.strings | 2 +- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Signal/translations/cs.lproj/Localizable.strings b/Signal/translations/cs.lproj/Localizable.strings index 853224313..21d2f8d29 100644 --- a/Signal/translations/cs.lproj/Localizable.strings +++ b/Signal/translations/cs.lproj/Localizable.strings @@ -1533,7 +1533,7 @@ "ONBOARDING_PERMISSIONS_TITLE" = "Signal can let you know when you get a message (and who it is from)"; /* Title of the 'onboarding phone number' view. */ -"ONBOARDING_PHONE_NUMBER_TITLE" = "Enter your phone number to get started"; +"ONBOARDING_PHONE_NUMBER_TITLE" = "Začněte zadáním telefoního čísla"; /* Label indicating that the phone number is invalid in the 'onboarding phone number' view. */ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Neplatné číslo"; @@ -1545,7 +1545,7 @@ "ONBOARDING_PROFILE_NAME_PLACEHOLDER" = "Your Name"; /* Title of the 'onboarding profile' view. */ -"ONBOARDING_PROFILE_TITLE" = "Set up your profile"; +"ONBOARDING_PROFILE_TITLE" = "Nastavit váš profil"; /* Link to the 'terms and privacy policy' in the 'onboarding splash' view. */ "ONBOARDING_SPLASH_TERM_AND_PRIVACY_POLICY" = "Smluvní podmínky a zásady ochrany osobních údajů"; diff --git a/Signal/translations/de.lproj/Localizable.strings b/Signal/translations/de.lproj/Localizable.strings index 98366cabc..9863669bd 100644 --- a/Signal/translations/de.lproj/Localizable.strings +++ b/Signal/translations/de.lproj/Localizable.strings @@ -1057,7 +1057,7 @@ "HOME_VIEW_CONVERSATION_SEARCHBAR_PLACEHOLDER" = "Suchen"; /* Format string for a label offering to start a new conversation with your contacts, if you have 1 Signal contact. Embeds: {{The name of 1 of your Signal contacts}}. */ -"HOME_VIEW_FIRST_CONVERSATION_OFFER_1_CONTACT_FORMAT" = "Einige deiner Kontakte sind bereits bei Signal, darunter %@."; +"HOME_VIEW_FIRST_CONVERSATION_OFFER_1_CONTACT_FORMAT" = "Einige deiner Kontakte sind bereits bei Signal, darunter %@"; /* Format string for a label offering to start a new conversation with your contacts, if you have 2 Signal contacts. Embeds: {{The names of 2 of your Signal contacts}}. */ "HOME_VIEW_FIRST_CONVERSATION_OFFER_2_CONTACTS_FORMAT" = "Einige deiner Kontakte sind bereits bei Signal, darunter %@ und %@"; @@ -1102,7 +1102,7 @@ "IN_CALL_CONNECTING" = "Verbinden …"; /* Call setup status label */ -"IN_CALL_RECONNECTING" = "Verbindung wird wiederhergestellt …"; +"IN_CALL_RECONNECTING" = "Neu verbinden …"; /* Call setup status label */ "IN_CALL_RINGING" = "Klingeln …"; @@ -1503,7 +1503,7 @@ "NOTIFICATIONS_SHOW" = "Anzeigen"; /* No comment provided by engineer. */ -"OK" = "O. K."; +"OK" = "Okay"; /* The first explanation in the 'onboarding 2FA' view. */ "ONBOARDING_2FA_EXPLANATION_1" = "Für diese Rufnummer ist eine Registrierungssperre aktiviert. Bitte gib die PIN für die Registrierungssperre ein."; diff --git a/Signal/translations/et.lproj/Localizable.strings b/Signal/translations/et.lproj/Localizable.strings index 013abca4a..d15c5bb35 100644 --- a/Signal/translations/et.lproj/Localizable.strings +++ b/Signal/translations/et.lproj/Localizable.strings @@ -1533,7 +1533,7 @@ "ONBOARDING_PERMISSIONS_TITLE" = "Signal can let you know when you get a message (and who it is from)"; /* Title of the 'onboarding phone number' view. */ -"ONBOARDING_PHONE_NUMBER_TITLE" = "Enter your phone number to get started"; +"ONBOARDING_PHONE_NUMBER_TITLE" = "Sisesta alustamiseks oma telefoninumber"; /* Label indicating that the phone number is invalid in the 'onboarding phone number' view. */ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Vigane number"; @@ -1545,7 +1545,7 @@ "ONBOARDING_PROFILE_NAME_PLACEHOLDER" = "Your Name"; /* Title of the 'onboarding profile' view. */ -"ONBOARDING_PROFILE_TITLE" = "Set up your profile"; +"ONBOARDING_PROFILE_TITLE" = "Seadista oma profiil"; /* Link to the 'terms and privacy policy' in the 'onboarding splash' view. */ "ONBOARDING_SPLASH_TERM_AND_PRIVACY_POLICY" = "Tingimused ja privaatsuspoliitika"; diff --git a/Signal/translations/hu.lproj/Localizable.strings b/Signal/translations/hu.lproj/Localizable.strings index 18488bcf0..5f67b53ca 100644 --- a/Signal/translations/hu.lproj/Localizable.strings +++ b/Signal/translations/hu.lproj/Localizable.strings @@ -1048,7 +1048,7 @@ "GROUP_YOU_LEFT" = "Elhagytad a csoportot."; /* Label for 'archived conversations' button. */ -"HOME_VIEW_ARCHIVED_CONVERSATIONS" = "Archived Conversations"; +"HOME_VIEW_ARCHIVED_CONVERSATIONS" = "Archív beszélgetések"; /* Table cell subtitle label for a conversation the user has blocked. */ "HOME_VIEW_BLOCKED_CONVERSATION" = "Letiltva"; @@ -1114,7 +1114,7 @@ "IN_CALL_TERMINATED" = "Hívás vége"; /* Label reminding the user that they are in archive mode. */ -"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "These conversations are archived and will only appear in the Inbox if new messages are received."; +"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "Ezek a beszélgetések archiválva vannak, ezért csak akkor jelennek meg újra a bejövő üzenet közt, ha újabb üzenet érkezik."; /* Message shown in the home view when the inbox is empty. */ "INBOX_VIEW_EMPTY_INBOX" = "Dobj a postaládádba valamit, hogy ne legyen olyan magányos! Láss hozzá, és üzenj egy barátodnak!"; diff --git a/Signal/translations/nb.lproj/Localizable.strings b/Signal/translations/nb.lproj/Localizable.strings index b1fa644f7..c6c0d5c03 100644 --- a/Signal/translations/nb.lproj/Localizable.strings +++ b/Signal/translations/nb.lproj/Localizable.strings @@ -1533,7 +1533,7 @@ "ONBOARDING_PERMISSIONS_TITLE" = "Signal can let you know when you get a message (and who it is from)"; /* Title of the 'onboarding phone number' view. */ -"ONBOARDING_PHONE_NUMBER_TITLE" = "Enter your phone number to get started"; +"ONBOARDING_PHONE_NUMBER_TITLE" = "Skriv inn telefonnummeret ditt for å komme i gang"; /* Label indicating that the phone number is invalid in the 'onboarding phone number' view. */ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Ugyldig nummer"; diff --git a/Signal/translations/pt_BR.lproj/Localizable.strings b/Signal/translations/pt_BR.lproj/Localizable.strings index 58d1e5450..31ab9d982 100644 --- a/Signal/translations/pt_BR.lproj/Localizable.strings +++ b/Signal/translations/pt_BR.lproj/Localizable.strings @@ -1057,16 +1057,16 @@ "HOME_VIEW_CONVERSATION_SEARCHBAR_PLACEHOLDER" = "Buscar"; /* Format string for a label offering to start a new conversation with your contacts, if you have 1 Signal contact. Embeds: {{The name of 1 of your Signal contacts}}. */ -"HOME_VIEW_FIRST_CONVERSATION_OFFER_1_CONTACT_FORMAT" = "Some of your contacts are already on Signal, including %@."; +"HOME_VIEW_FIRST_CONVERSATION_OFFER_1_CONTACT_FORMAT" = "Alguns dos seus contatos já estão no Signal, inclusive %@."; /* Format string for a label offering to start a new conversation with your contacts, if you have 2 Signal contacts. Embeds: {{The names of 2 of your Signal contacts}}. */ -"HOME_VIEW_FIRST_CONVERSATION_OFFER_2_CONTACTS_FORMAT" = "Some of your contacts are already on Signal, including %@ and %@"; +"HOME_VIEW_FIRST_CONVERSATION_OFFER_2_CONTACTS_FORMAT" = "Alguns dos seus contatos já estão no Signal, inclusive %@ e %@"; /* Format string for a label offering to start a new conversation with your contacts, if you have at least 3 Signal contacts. Embeds: {{The names of 3 of your Signal contacts}}. */ -"HOME_VIEW_FIRST_CONVERSATION_OFFER_3_CONTACTS_FORMAT" = "Some of your contacts are already on Signal, including %@, %@ and %@"; +"HOME_VIEW_FIRST_CONVERSATION_OFFER_3_CONTACTS_FORMAT" = "Alguns dos seus contatos já estão no Signal, inclusive %@, %@ e %@"; /* A label offering to start a new conversation with your contacts, if you have no Signal contacts. */ -"HOME_VIEW_FIRST_CONVERSATION_OFFER_NO_CONTACTS" = "Start your first conversation here."; +"HOME_VIEW_FIRST_CONVERSATION_OFFER_NO_CONTACTS" = "Inicie sua primeira conversa aqui."; /* Format string when search returns no results. Embeds {{search term}} */ "HOME_VIEW_SEARCH_NO_RESULTS_FORMAT" = "Nenhum resultado encontrado para '%@'"; @@ -1087,10 +1087,10 @@ "IMAGE_EDITOR_RESET_BUTTON" = "Reiniciar"; /* Label for button that rotates image 45 degrees. */ -"IMAGE_EDITOR_ROTATE_45_BUTTON" = "Rotate 45°"; +"IMAGE_EDITOR_ROTATE_45_BUTTON" = "Girar 45°"; /* Label for button that rotates image 90 degrees. */ -"IMAGE_EDITOR_ROTATE_90_BUTTON" = "Rotate 90°"; +"IMAGE_EDITOR_ROTATE_90_BUTTON" = "Girar 90°"; /* Momentarily shown to the user when attempting to select more images than is allowed. Embeds {{max number of items}} that can be shared. */ "IMAGE_PICKER_CAN_SELECT_NO_MORE_TOAST_FORMAT" = "Você não pode compartilhar mais de %@ itens."; @@ -1509,82 +1509,82 @@ "ONBOARDING_2FA_EXPLANATION_1" = "Este número de telefone está com o Bloqueio de Cadastro ativo. Por favor, insira o PIN de Desbloqueio de Cadastro."; /* The first explanation in the 'onboarding 2FA' view. */ -"ONBOARDING_2FA_EXPLANATION_2" = "Your Registration Lock PIN is separate from the automated verification code that was sent to your phone during the last step."; +"ONBOARDING_2FA_EXPLANATION_2" = "Seu PIN de Bloqueio de Cadastro é diferente do código de verificação automático que foi enviado para o seu celular na última etapa."; /* Label for the 'forgot 2FA PIN' link in the 'onboarding 2FA' view. */ -"ONBOARDING_2FA_FORGOT_PIN_LINK" = "I forgot my PIN"; +"ONBOARDING_2FA_FORGOT_PIN_LINK" = "Esqueci meu PIN"; /* Title of the 'onboarding 2FA' view. */ "ONBOARDING_2FA_TITLE" = "Bloqueio de Cadastro"; /* Title of the 'onboarding Captcha' view. */ -"ONBOARDING_CAPTCHA_TITLE" = "Add a touch of humanity to your messages"; +"ONBOARDING_CAPTCHA_TITLE" = "Adicione um toque de humanidade às suas mensagens"; /* Label for the 'give access' button in the 'onboarding permissions' view. */ -"ONBOARDING_PERMISSIONS_ENABLE_PERMISSIONS_BUTTON" = "Enable Permissions"; +"ONBOARDING_PERMISSIONS_ENABLE_PERMISSIONS_BUTTON" = "Habilitar permissões"; /* Explanation in the 'onboarding permissions' view. */ -"ONBOARDING_PERMISSIONS_EXPLANATION" = "Your contact information is always transmitted securely."; +"ONBOARDING_PERMISSIONS_EXPLANATION" = "As suas informações de contato são sempre transmitidas com segurança."; /* Label for the 'not now' button in the 'onboarding permissions' view. */ "ONBOARDING_PERMISSIONS_NOT_NOW_BUTTON" = "Agora Não"; /* Title of the 'onboarding permissions' view. */ -"ONBOARDING_PERMISSIONS_TITLE" = "Signal can let you know when you get a message (and who it is from)"; +"ONBOARDING_PERMISSIONS_TITLE" = "O Signal pode avisar quando você receber uma mensagem (e quem a mandou)"; /* Title of the 'onboarding phone number' view. */ -"ONBOARDING_PHONE_NUMBER_TITLE" = "Enter your phone number to get started"; +"ONBOARDING_PHONE_NUMBER_TITLE" = "Insira seu número de telefone para começar"; /* Label indicating that the phone number is invalid in the 'onboarding phone number' view. */ "ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Número inválido"; /* Explanation in the 'onboarding profile' view. */ -"ONBOARDING_PROFILE_EXPLANATION" = "Signal profiles are end-to-end encrypted and the Signal service never has access to this information."; +"ONBOARDING_PROFILE_EXPLANATION" = "Os perfis do Signal são criptografados de ponta a ponta, e o Signal jamais tem acesso a estas informações."; /* Placeholder text for the profile name in the 'onboarding profile' view. */ -"ONBOARDING_PROFILE_NAME_PLACEHOLDER" = "Your Name"; +"ONBOARDING_PROFILE_NAME_PLACEHOLDER" = "Seu nome"; /* Title of the 'onboarding profile' view. */ -"ONBOARDING_PROFILE_TITLE" = "Set up your profile"; +"ONBOARDING_PROFILE_TITLE" = "Crie seu perfil"; /* Link to the 'terms and privacy policy' in the 'onboarding splash' view. */ "ONBOARDING_SPLASH_TERM_AND_PRIVACY_POLICY" = "Termos & Política de Privacidade"; /* Title of the 'onboarding splash' view. */ -"ONBOARDING_SPLASH_TITLE" = "Take privacy with you.\nBe yourself in every message."; +"ONBOARDING_SPLASH_TITLE" = "Leve a privacidade consigo.\nSeja você em cada mensagem."; /* Label for the link that lets users change their phone number in the onboarding views. */ "ONBOARDING_VERIFICATION_BACK_LINK" = "Número errado?"; /* Format for the label of the 'sent code' label of the 'onboarding verification' view. Embeds {{the time until the code can be resent}}. */ -"ONBOARDING_VERIFICATION_CODE_COUNTDOWN_FORMAT" = "I didn't get a code (available in %@)"; +"ONBOARDING_VERIFICATION_CODE_COUNTDOWN_FORMAT" = "Não recebi um código (disponível em %@)"; /* Label indicating that the verification code is incorrect in the 'onboarding verification' view. */ -"ONBOARDING_VERIFICATION_INVALID_CODE" = "This code is incorrect"; +"ONBOARDING_VERIFICATION_INVALID_CODE" = "O código está incorreto"; /* Label for link that can be used when the original code did not arrive. */ -"ONBOARDING_VERIFICATION_ORIGINAL_CODE_MISSING_LINK" = "I didn't get a code"; +"ONBOARDING_VERIFICATION_ORIGINAL_CODE_MISSING_LINK" = "Não recebi um código"; /* Message for the 'resend code' alert in the 'onboarding verification' view. */ -"ONBOARDING_VERIFICATION_RESEND_CODE_ALERT_MESSAGE" = "Please ensure that you have cellular service and can receive SMS messages."; +"ONBOARDING_VERIFICATION_RESEND_CODE_ALERT_MESSAGE" = "Por favor, verifique se o seu celular está com sinal e pode receber mensagens de SMS."; /* Title for the 'resend code' alert in the 'onboarding verification' view. */ -"ONBOARDING_VERIFICATION_RESEND_CODE_ALERT_TITLE" = "No code?"; +"ONBOARDING_VERIFICATION_RESEND_CODE_ALERT_TITLE" = "Nada de código?"; /* Label for the 'resend code by SMS' button in the 'onboarding verification' view. */ -"ONBOARDING_VERIFICATION_RESEND_CODE_BY_SMS_BUTTON" = "Resend code"; +"ONBOARDING_VERIFICATION_RESEND_CODE_BY_SMS_BUTTON" = "Reenviar código"; /* Label for the 'resend code by voice' button in the 'onboarding verification' view. */ "ONBOARDING_VERIFICATION_RESEND_CODE_BY_VOICE_BUTTON" = "Ligue para mim"; /* Label for link that can be used when the resent code did not arrive. */ -"ONBOARDING_VERIFICATION_RESENT_CODE_MISSING_LINK" = "Still no code?"; +"ONBOARDING_VERIFICATION_RESENT_CODE_MISSING_LINK" = "Ainda nada de código?"; /* Format for the title of the 'onboarding verification' view. Embeds {{the user's phone number}}. */ -"ONBOARDING_VERIFICATION_TITLE_DEFAULT_FORMAT" = "Enter the code we sent to %@"; +"ONBOARDING_VERIFICATION_TITLE_DEFAULT_FORMAT" = "Insira o código que enviamos para %@"; /* Format for the title of the 'onboarding verification' view after the verification code has been resent. Embeds {{the user's phone number}}. */ -"ONBOARDING_VERIFICATION_TITLE_RESENT_FORMAT" = "We just resent a code to %@"; +"ONBOARDING_VERIFICATION_TITLE_RESENT_FORMAT" = "Acabamos de reenviar um código para %@"; /* Button text which opens the settings app */ "OPEN_SETTINGS_BUTTON" = "Configurações"; @@ -2412,7 +2412,7 @@ "UNKNOWN_CONTACT_NAME" = "Contato Desconhecido"; /* Label for unknown countries. */ -"UNKNOWN_COUNTRY_NAME" = "Unknown Country"; +"UNKNOWN_COUNTRY_NAME" = "País desconhecido"; /* Indicates an unknown or unrecognizable value. */ "UNKNOWN_VALUE" = "Desconhecida/o"; diff --git a/Signal/translations/sl.lproj/Localizable.strings b/Signal/translations/sl.lproj/Localizable.strings index e18b724a9..bc804add4 100644 --- a/Signal/translations/sl.lproj/Localizable.strings +++ b/Signal/translations/sl.lproj/Localizable.strings @@ -1114,7 +1114,7 @@ "IN_CALL_TERMINATED" = "Končan klic."; /* Label reminding the user that they are in archive mode. */ -"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "These conversations are archived and will only appear in the Inbox if new messages are received."; +"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "Ti pogovori so premaknjeni v arhiv in se bodo znova pojavili v nabiralniku samo, če prejmete novo sporočilo."; /* Message shown in the home view when the inbox is empty. */ "INBOX_VIEW_EMPTY_INBOX" = "Vaš poštni nabiralnik je lačen nove pošte. ;-) Začnite s sporočilom prijatelju!";