Merge tag '2.28.0.12'

This commit is contained in:
Michael Kirk 2018-07-23 16:12:46 -06:00
commit 6e1c1a681b
26 changed files with 435 additions and 523 deletions

View file

@ -314,7 +314,6 @@
452037D11EE84975004E4CDF /* DebugUISessionState.m in Sources */ = {isa = PBXBuildFile; fileRef = 452037D01EE84975004E4CDF /* DebugUISessionState.m */; };
4520D8D51D417D8E00123472 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4520D8D41D417D8E00123472 /* Photos.framework */; };
4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */; };
4523149E1F7E916B003A428C /* SlideOffAnimatedTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */; };
452314A01F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523149F1F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift */; };
4523D016206EDC2B00A2AB51 /* LRUCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4523D015206EDC2B00A2AB51 /* LRUCache.swift */; };
452B999020A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 452B998F20A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift */; };
@ -973,7 +972,6 @@
452037D01EE84975004E4CDF /* DebugUISessionState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUISessionState.m; sourceTree = "<group>"; };
4520D8D41D417D8E00123472 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; };
4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldHelper.swift; sourceTree = "<group>"; };
4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SlideOffAnimatedTransition.swift; path = UserInterface/SlideOffAnimatedTransition.swift; sourceTree = "<group>"; };
4523149F1F7E9E18003A428C /* DirectionalPanGestureRecognizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DirectionalPanGestureRecognizer.swift; sourceTree = "<group>"; };
4523D015206EDC2B00A2AB51 /* LRUCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRUCache.swift; sourceTree = "<group>"; };
452B998F20A34B6B006F2F9E /* AddContactShareToExistingContactViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactShareToExistingContactViewController.swift; sourceTree = "<group>"; };
@ -1930,7 +1928,6 @@
450DF2071E0DD29E003D14BE /* Notifications */,
34FD936E1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.h */,
34FD936F1E3BD43A00109093 /* OWSAnyTouchGestureRecognizer.m */,
4523149D1F7E916B003A428C /* SlideOffAnimatedTransition.swift */,
34B3F8331E8DF1700035BE1A /* ViewControllers */,
76EB052B18170B33006006FC /* Views */,
);
@ -3377,7 +3374,6 @@
4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */,
45FBC5D11DF8592E00E9B410 /* SignalCall.swift in Sources */,
340FC8BB204DAC8D007AEB0F /* OWSAddToContactViewController.m in Sources */,
4523149E1F7E916B003A428C /* SlideOffAnimatedTransition.swift in Sources */,
340FC8C0204DB7D2007AEB0F /* OWSBackupExportJob.m in Sources */,
45F32C232057297A00A300D5 /* MediaPageViewController.swift in Sources */,
3466087420E5649700AFFE73 /* OWSLayerView.swift in Sources */,

View file

@ -38,7 +38,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>2.28.0.10</string>
<string>2.28.0.12</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LOGS_EMAIL</key>

View file

@ -1,52 +0,0 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import UIKit
import SignalMessaging
@objc
class SlideOffAnimatedTransition: NSObject, UIViewControllerAnimatedTransitioning {
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
guard let fromView = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)?.view else {
owsFail("No fromView")
return
}
guard let toView = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)?.view else {
owsFail("No toView")
return
}
let width = containerView.frame.width
let offsetFrame = fromView.frame.offsetBy(dx: (CurrentAppContext().isRTL ? +width : -width), dy: 0)
toView.frame = fromView.frame
fromView.layer.shadowRadius = 15.0
fromView.layer.shadowOpacity = 1.0
toView.layer.opacity = 0.9
containerView.insertSubview(toView, belowSubview: fromView)
UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0, options: .curveLinear, animations: {
fromView.frame = offsetFrame
toView.layer.opacity = 1.0
fromView.layer.shadowOpacity = 0.1
}, completion: { _ in
toView.layer.opacity = 1.0
toView.layer.shadowOpacity = 0
fromView.layer.opacity = 1.0
fromView.layer.shadowOpacity = 0
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
}
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
}

View file

@ -28,9 +28,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)conversationCell:(ConversationViewCell *)cell
didLongpressSystemMessageViewItem:(ConversationViewItem *)viewItem;
- (void)didPanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
viewItem:(ConversationViewItem *)conversationItem;
#pragma mark - System Cell
- (void)tappedNonBlockingIdentityChangeForRecipientId:(nullable NSString *)signalId;

View file

@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic) UILabel *senderNameLabel;
@property (nonatomic) UIView *senderNameContainer;
@property (nonatomic) OWSMessageTextView *bodyTextView;
@property (nonatomic, nullable) UIView *quotedMessageView;
@ -84,6 +86,10 @@ NS_ASSUME_NONNULL_BEGIN
self.stackView.axis = UILayoutConstraintAxisVertical;
self.senderNameLabel = [UILabel new];
self.senderNameContainer = [UIView new];
self.senderNameContainer.layoutMargins = UIEdgeInsetsMake(0, 0, self.senderNameBottomSpacing, 0);
[self.senderNameContainer addSubview:self.senderNameLabel];
[self.senderNameLabel ows_autoPinToSuperviewMargins];
self.bodyTextView = [self newTextView];
// Setting dataDetectorTypes is expensive. Do it just once.
@ -253,7 +259,7 @@ NS_ASSUME_NONNULL_BEGIN
if (self.shouldShowSenderName) {
[self configureSenderNameLabel];
[textViews addObject:self.senderNameLabel];
[textViews addObject:self.senderNameContainer];
}
if (self.isQuotedReply) {
@ -525,6 +531,11 @@ NS_ASSUME_NONNULL_BEGIN
return 12.f;
}
- (CGFloat)senderNameBottomSpacing
{
return 2.f;
}
- (OWSDirectionalRectCorner)sharpCorners
{
OWSDirectionalRectCorner sharpCorners = 0;
@ -1219,6 +1230,7 @@ NS_ASSUME_NONNULL_BEGIN
[self configureSenderNameLabel];
CGSize result = CGSizeCeil([self.senderNameLabel sizeThatFits:CGSizeMake(maxTextWidth, CGFLOAT_MAX)]);
result.width = MIN(result.width, maxTextWidth);
result.height += self.senderNameBottomSpacing;
return [NSValue valueWithCGSize:result];
}

View file

@ -70,12 +70,6 @@ NS_ASSUME_NONNULL_BEGIN
UILongPressGestureRecognizer *longPress =
[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)];
[self.contentView addGestureRecognizer:longPress];
PanDirectionGestureRecognizer *panGesture = [[PanDirectionGestureRecognizer alloc]
initWithDirection:(CurrentAppContext().isRTL ? PanDirectionLeft : PanDirectionRight)
target:self
action:@selector(handlePanGesture:)];
[self addGestureRecognizer:panGesture];
}
- (void)dealloc
@ -405,6 +399,10 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
if ([self isGestureInCellHeader:sender]) {
return;
}
if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) {
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction;
if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) {
@ -427,6 +425,10 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
if ([self isGestureInCellHeader:sender]) {
return;
}
if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) {
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction;
if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) {
@ -456,11 +458,17 @@ NS_ASSUME_NONNULL_BEGIN
}
}
- (void)handlePanGesture:(UIPanGestureRecognizer *)panRecognizer
- (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender
{
OWSAssert(self.delegate);
OWSAssert(self.viewItem);
[self.delegate didPanWithGestureRecognizer:panRecognizer viewItem:self.viewItem];
if (!self.viewItem.hasCellHeader) {
return NO;
}
CGPoint location = [sender locationInView:self];
CGPoint headerBottom = [self convertPoint:CGPointMake(0, self.headerView.height) fromView:self.headerView];
return location.y <= headerBottom.y;
}
@end

View file

@ -38,7 +38,6 @@ NS_ASSUME_NONNULL_BEGIN
self.layoutMargins = UIEdgeInsetsZero;
self.axis = UILayoutConstraintAxisHorizontal;
self.spacing = self.hSpacing;
self.alignment = UIStackViewAlignmentCenter;
self.distribution = UIStackViewDistributionEqualSpacing;
@ -47,6 +46,7 @@ NS_ASSUME_NONNULL_BEGIN
leftStackView.spacing = self.hSpacing;
leftStackView.alignment = UIStackViewAlignmentCenter;
[self addArrangedSubview:leftStackView];
[leftStackView setContentHuggingHigh];
self.timestampLabel = [UILabel new];
[leftStackView addArrangedSubview:self.timestampLabel];
@ -56,7 +56,6 @@ NS_ASSUME_NONNULL_BEGIN
[leftStackView addArrangedSubview:self.messageTimerView];
self.statusIndicatorImageView = [UIImageView new];
[self.statusIndicatorImageView setContentHuggingHigh];
[self addArrangedSubview:self.statusIndicatorImageView];
self.userInteractionEnabled = NO;
@ -143,21 +142,36 @@ NS_ASSUME_NONNULL_BEGIN
}
if (statusIndicatorImage) {
OWSAssert(statusIndicatorImage.size.width <= self.maxImageWidth);
self.statusIndicatorImageView.image =
[statusIndicatorImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.statusIndicatorImageView.tintColor = textColor;
self.statusIndicatorImageView.hidden = NO;
[self showStatusIndicatorWithIcon:statusIndicatorImage textColor:textColor];
} else {
self.statusIndicatorImageView.image = nil;
self.statusIndicatorImageView.hidden = YES;
[self hideStatusIndicator];
}
} else {
self.statusIndicatorImageView.image = nil;
self.statusIndicatorImageView.hidden = YES;
[self hideStatusIndicator];
}
}
- (void)showStatusIndicatorWithIcon:(UIImage *)icon textColor:(UIColor *)textColor
{
OWSAssert(icon.size.width <= self.maxImageWidth);
self.statusIndicatorImageView.image = [icon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.statusIndicatorImageView.tintColor = textColor;
[self.statusIndicatorImageView setContentHuggingHigh];
self.spacing = self.hSpacing;
}
- (void)hideStatusIndicator
{
// If there's no status indicator, we want the other
// footer contents to "cling to the leading edge".
// Instead of hiding the status indicator view,
// we clear its contents and let it stretch to fill
// the available space.
self.statusIndicatorImageView.image = nil;
[self.statusIndicatorImageView setContentHuggingLow];
self.spacing = 0;
}
- (void)animateSpinningIcon
{
CABasicAnimation *animation;

View file

@ -557,6 +557,10 @@ typedef void (^SystemMessageActionBlock)(void);
{
OWSAssert(self.delegate);
if ([self isGestureInCellHeader:longPress]) {
return;
}
TSInteraction *interaction = self.viewItem.interaction;
OWSAssert(interaction);
@ -565,6 +569,19 @@ typedef void (^SystemMessageActionBlock)(void);
}
}
- (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender
{
OWSAssert(self.viewItem);
if (!self.viewItem.hasCellHeader) {
return NO;
}
CGPoint location = [sender locationInView:self];
CGPoint headerBottom = [self convertPoint:CGPointMake(0, self.headerView.height) fromView:self.headerView];
return location.y <= headerBottom.y;
}
- (void)buttonWasPressed:(id)sender
{
if (!self.action.block) {

View file

@ -144,10 +144,6 @@ typedef enum : NSUInteger {
ConversationInputToolbarDelegate,
GifPickerViewControllerDelegate>
// Show message info animation
@property (nullable, nonatomic) UIPercentDrivenInteractiveTransition *showMessageDetailsTransition;
@property (nullable, nonatomic) UIPanGestureRecognizer *currentShowMessageDetailsPanGesture;
@property (nonatomic) TSThread *thread;
@property (nonatomic, readonly) YapDatabaseConnection *editingDatabaseConnection;
@property (nonatomic, readonly) AudioActivity *voiceNoteAudioActivity;
@ -5162,110 +5158,6 @@ typedef enum : NSUInteger {
return cell;
}
#pragma mark - swipe to show message details
- (void)didPanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
viewItem:(ConversationViewItem *)conversationItem
{
self.currentShowMessageDetailsPanGesture = gestureRecognizer;
const CGFloat swipeTranslation
= ([gestureRecognizer translationInView:self.view].x * (CurrentAppContext().isRTL ? +1.f : -1.f));
const CGFloat ratioComplete = CGFloatClamp(swipeTranslation / self.view.frame.size.width, 0, 1);
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan: {
TSInteraction *interaction = conversationItem.interaction;
if ([interaction isKindOfClass:[TSIncomingMessage class]] ||
[interaction isKindOfClass:[TSOutgoingMessage class]]) {
// Canary check in case we later have another reason to set navigationController.delegate - we don't
// want to inadvertently clobber it here.
OWSAssert(self.navigationController.delegate == nil);
self.navigationController.delegate = self;
[self showDetailViewForViewItem:conversationItem];
} else {
OWSFail(@"%@ Can't show message metadata for message of type: %@", self.logTag, [interaction class]);
}
break;
}
case UIGestureRecognizerStateChanged: {
UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition;
if (!transition) {
DDLogVerbose(@"%@ transition not set up yet", self.logTag);
return;
}
[transition updateInteractiveTransition:ratioComplete];
break;
}
case UIGestureRecognizerStateEnded: {
const CGFloat velocity = [gestureRecognizer velocityInView:self.view].x;
UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition;
if (!transition) {
DDLogVerbose(@"%@ transition not set up yet", self.logTag);
return;
}
// Complete the transition if moved sufficiently far or fast
// Note this is trickier for incoming, since you are already on the left, and have less space.
if (ratioComplete > 0.3 || velocity < -800) {
[transition finishInteractiveTransition];
} else {
[transition cancelInteractiveTransition];
}
break;
}
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed: {
UIPercentDrivenInteractiveTransition *transition = self.showMessageDetailsTransition;
if (!transition) {
DDLogVerbose(@"%@ transition not set up yet", self.logTag);
return;
}
[transition cancelInteractiveTransition];
break;
}
default:
break;
}
}
- (nullable id<UIViewControllerAnimatedTransitioning>)navigationController:
(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
{
return [SlideOffAnimatedTransition new];
}
- (nullable id<UIViewControllerInteractiveTransitioning>)
navigationController:(UINavigationController *)navigationController
interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController
{
// We needed to be the navigation controller delegate to specify the interactive "slide left for message details"
// animation But we may not want to be the navigation controller delegate permanently.
self.navigationController.delegate = nil;
UIPanGestureRecognizer *recognizer = self.currentShowMessageDetailsPanGesture;
if (recognizer == nil) {
// Not in the middle of the `currentShowMessageDetailsPanGesture`, abort.
return nil;
}
if (recognizer.state == UIGestureRecognizerStateBegan) {
self.showMessageDetailsTransition = [UIPercentDrivenInteractiveTransition new];
self.showMessageDetailsTransition.completionCurve = UIViewAnimationCurveEaseOut;
} else {
self.showMessageDetailsTransition = nil;
}
return self.showMessageDetailsTransition;
}
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView

View file

@ -147,7 +147,7 @@ class MenuActionsViewController: UIViewController, MenuActionSheetDelegate {
let oldFocusFrame = self.view.convert(focusedView.frame, from: focusedViewSuperview)
NSLayoutConstraint.deactivate([actionSheetViewVerticalConstraint])
self.actionSheetViewVerticalConstraint = self.actionSheetView.autoPinEdge(toSuperviewEdge: .bottom)
UIView.animate(withDuration: 0.3,
UIView.animate(withDuration: 0.2,
delay: backgroundDuration,
options: .curveEaseOut,
animations: {

View file

@ -102,6 +102,8 @@ const NSUInteger kNewGroupViewControllerAvatarWidth = 68;
self.title = [MessageStrings newGroupDefaultTitle];
self.view.backgroundColor = UIColor.ows_themeBackgroundColor;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:NSLocalizedString(@"NEW_GROUP_CREATE_BUTTON", @"The title for the 'create group' button.")
style:UIBarButtonItemStylePlain

View file

@ -102,6 +102,8 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssert(self.thread.groupModel);
OWSAssert(self.thread.groupModel.groupMemberIds);
self.view.backgroundColor = UIColor.ows_themeBackgroundColor;
[self.memberRecipientIds addObjectsFromArray:self.thread.groupModel.groupMemberIds];
self.previousMemberRecipientIds = [NSSet setWithArray:self.thread.groupModel.groupMemberIds];

File diff suppressed because it is too large Load diff

View file

@ -609,10 +609,10 @@
"DATABASE_VIEW_OVERLAY_TITLE" = "Datenbankoptimierung";
/* 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 %@ Std.";
"DATE_HOURS_AGO_FORMAT" = "Vor %@ h";
/* Format string for a relative time, expressed as a certain number of minutes in the past. Embeds {{The number of minutes}}. */
"DATE_MINUTES_AGO_FORMAT" = "Vor %@ Min.";
"DATE_MINUTES_AGO_FORMAT" = "Vor %@ min";
/* The present; the current time. */
"DATE_NOW" = "Jetzt";
@ -1153,25 +1153,25 @@
"MEDIA_GALLERY_THIS_MONTH_HEADER" = "Diesen Monat";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_MEDIA" = "Multimedia Datei kopieren";
"MESSAGE_ACTION_COPY_MEDIA" = "Medieninhalte kopieren";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_TEXT" = "Kopiere diese Nachricht";
"MESSAGE_ACTION_COPY_TEXT" = "Nachrichtentext kopieren";
/* Action sheet button title */
"MESSAGE_ACTION_DELETE_MESSAGE" = "Diese Nachricht löschen";
/* Action sheet button subtitle */
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Nur auf diesem Gerät löschen";
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Wird nur auf diesem Gerät gelöscht";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "Mehr Infos";
"MESSAGE_ACTION_DETAILS" = "Mehr Details";
/* Action sheet button title */
"MESSAGE_ACTION_REPLY" = "Auf diese Nachricht antworten";
/* Action sheet button title */
"MESSAGE_ACTION_SAVE_MEDIA" = "Multimedia Datei speichern";
"MESSAGE_ACTION_SAVE_MEDIA" = "Medieninhalte speichern";
/* Title for the 'message approval' dialog. */
"MESSAGE_APPROVAL_DIALOG_TITLE" = "Nachricht";

View file

@ -615,7 +615,7 @@
"DATE_MINUTES_AGO_FORMAT" = "%@ min sitten";
/* The present; the current time. */
"DATE_NOW" = "Juuri äsken";
"DATE_NOW" = "Nyt";
/* The current day. */
"DATE_TODAY" = "Tänään";
@ -868,7 +868,7 @@
"ERROR_MESSAGE_INVALID_KEY_EXCEPTION" = "Vastaanottajan avain ei ole kelvollinen.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_MESSAGE" = "Vastaanotettu viesti oli epäsynkronisoitu.";
"ERROR_MESSAGE_INVALID_MESSAGE" = "Vastaanotettu viesti ei ollut synkronissa.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_VERSION" = "Vastanotettiin viesti, joka ei ole yhteensopiva tämän ohjelmistoversion kanssa.";
@ -1063,7 +1063,7 @@
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "Jotta voit kutsua yhteystietoja, sinun tulee sallia Signalin käyttää yhteystietojasi Asetukset-ohjelmasta.";
/* Alert title when contacts disabled while trying to invite contacts to signal */
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_TITLE" = "Sally yhteystietojen käyttö";
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_TITLE" = "Salli yhteystietojen käyttö";
/* Label for the cell that presents the 'invite contacts' workflow. */
"INVITE_FRIENDS_CONTACT_TABLE_BUTTON" = "Kutsu ystäviä Signaliin";
@ -1434,7 +1434,7 @@
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ asetti katoavat viestit pois päältä.";
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ asetti viestien katoamisajan: %@.";
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ asetti viestien katoamisajan: %@";
/* Label warning the user that the Signal service may be down. */
"OUTAGE_WARNING" = "Signalissa ilmenee tällä hetkellä teknisiä ongelmia. Työskentelemme parhaillaan palvelun palauttamiseksi.";
@ -2346,7 +2346,7 @@
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Sinä asetit katoavat viestit pois päältä.";
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Sinä asetit viestien katoamisajan: %@.";
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Sinä asetit viestien katoamisajan: %@";
// Strings Copied in from JSQMessagesViewController

View file

@ -285,7 +285,7 @@
"BUTTON_SELECT" = "Pilih";
/* Label for button that lets users call a contact again. */
"CALL_AGAIN_BUTTON_TITLE" = "Call Again";
"CALL_AGAIN_BUTTON_TITLE" = "Telepon lagi";
/* Alert message when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_MESSAGE" = "Signal memerlukan akses ke mikrofon Anda untuk membuat panggilan dan merekam pesan suara. Anda dapat memberikan izin di Pengaturan.";
@ -516,7 +516,7 @@
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Info Kontak ";
/* Label for table cell which leads to picking a new conversation color */
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Color";
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Warna";
/* Navbar title when viewing settings for a group thread */
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Info Kontak ";
@ -552,7 +552,7 @@
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Buat Kontak Baru";
/* Label for button that opens conversation settings. */
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tap to Change";
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Ketuk untuk mengubah";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Tidak Senyap";
@ -609,13 +609,13 @@
"DATABASE_VIEW_OVERLAY_TITLE" = "Mengoptimalkan Database";
/* 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" = "%@ Hr Ago";
"DATE_HOURS_AGO_FORMAT" = "%@ jam lalu";
/* Format string for a relative time, expressed as a certain number of minutes in the past. Embeds {{The number of minutes}}. */
"DATE_MINUTES_AGO_FORMAT" = "%@ Min Ago";
"DATE_MINUTES_AGO_FORMAT" = "%@ Menit lalu";
/* The present; the current time. */
"DATE_NOW" = "Now";
"DATE_NOW" = "Sekarang";
/* The current day. */
"DATE_TODAY" = "Hari ini";
@ -868,7 +868,7 @@
"ERROR_MESSAGE_INVALID_KEY_EXCEPTION" = "Kunci penerima tidak cocok";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_MESSAGE" = "Received message was out of sync.";
"ERROR_MESSAGE_INVALID_MESSAGE" = "Pesan diterima tidak tersinkronisasi";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_VERSION" = "Menerima pesan yang tidak cocok dengan versi ini";
@ -886,7 +886,7 @@
"ERROR_MESSAGE_UNKNOWN_ERROR" = "Sebuah kegagagalan tak dikenal muncul.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Safety number changed.";
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Nomor aman diubah";
/* Format string for 'unregistered user' error. Embeds {{the unregistered user's name or signal id}}. */
"ERROR_UNREGISTERED_USER_FORMAT" = "Pengguna tidak terdaftar: %@";
@ -1051,7 +1051,7 @@
"INCOMING_DECLINED_CALL" = "Anda menolak panggilan.";
/* No comment provided by engineer. */
"INCOMING_INCOMPLETE_CALL" = "Incoming call";
"INCOMING_INCOMPLETE_CALL" = "Panggilan masuk";
/* info message text shown in conversation view */
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Panggilan gagal karena nomor keamanan telah berubah.";
@ -1153,25 +1153,25 @@
"MEDIA_GALLERY_THIS_MONTH_HEADER" = "Bulan Ini";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_MEDIA" = "Copy Media";
"MESSAGE_ACTION_COPY_MEDIA" = "Salin media";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_TEXT" = "Copy Message Text";
"MESSAGE_ACTION_COPY_TEXT" = "Salin teks pesan ";
/* Action sheet button title */
"MESSAGE_ACTION_DELETE_MESSAGE" = "Delete this Message";
"MESSAGE_ACTION_DELETE_MESSAGE" = "Hapus pesan ini";
/* Action sheet button subtitle */
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "It will be deleted on this device only";
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Hanya akan dihapus dari alat ini saja";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "More Info";
"MESSAGE_ACTION_DETAILS" = "Info lebih lanjut";
/* Action sheet button title */
"MESSAGE_ACTION_REPLY" = "Reply to this Message";
"MESSAGE_ACTION_REPLY" = "Jawab pesan ini";
/* Action sheet button title */
"MESSAGE_ACTION_SAVE_MEDIA" = "Save Media";
"MESSAGE_ACTION_SAVE_MEDIA" = "Simpan media";
/* Title for the 'message approval' dialog. */
"MESSAGE_APPROVAL_DIALOG_TITLE" = "Pesan";
@ -1234,7 +1234,7 @@
"MESSAGE_STATUS_DELIVERED" = "Terkirim";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed.";
"MESSAGE_STATUS_FAILED" = "Gagal mengirim";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED_SHORT" = "Gagal";
@ -1246,7 +1246,7 @@
"MESSAGE_STATUS_RECIPIENT_SKIPPED" = "Terlompati";
/* Label indicating that a message failed to send. */
"MESSAGE_STATUS_SEND_FAILED" = "Send Failed";
"MESSAGE_STATUS_SEND_FAILED" = "Gagal kirim";
/* message status while message is sending. */
"MESSAGE_STATUS_SENDING" = "Mengirim...";
@ -1288,7 +1288,7 @@
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Ketuk di sini untuk pengaturan";
/* Indicator that separates read from unread messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR" = "New Messages";
"MESSAGES_VIEW_UNREAD_INDICATOR" = "Pesan baru";
/* Messages that indicates that there are more unseen messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES" = "Masih ada pesan yang belum terbaca.";
@ -1443,10 +1443,10 @@
"OUTGOING_CALL" = "Panggilan keluar";
/* No comment provided by engineer. */
"OUTGOING_INCOMPLETE_CALL" = "Outgoing call";
"OUTGOING_INCOMPLETE_CALL" = "Panggilan keluar";
/* info message recorded in conversation history when local user tries and fails to call another user. */
"OUTGOING_MISSED_CALL" = "Unanswered outgoing call";
"OUTGOING_MISSED_CALL" = "Panggilan keluar tidak terjawab";
/* A display format for oversize text messages. */
"OVERSIZE_TEXT_DISPLAY_FORMAT" = "%@...";
@ -1896,7 +1896,7 @@
"SETTINGS_ADVANCED_SUBMIT_DEBUGLOG" = "Mengajukan Catatan Debug";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_THEME" = "Theme";
"SETTINGS_ADVANCED_THEME" = "Tema";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_TITLE" = "Lanjutan";
@ -2121,7 +2121,7 @@
"SHARE_EXTENSION_VIEW_TITLE" = "Bagikan ke Signal";
/* Action sheet item */
"SHOW_SAFETY_NUMBER_ACTION" = "Show Safety Number";
"SHOW_SAFETY_NUMBER_ACTION" = "Tunjukkan nomor pengamanan";
/* notification action */
"SHOW_THREAD_BUTTON_TITLE" = "Tunjukkan pembicaraan";
@ -2139,10 +2139,10 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Nomor keamanan sesuai";
/* Label for button to verify a user's safety number. */
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verify Safety Number";
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verifikasi nomor keamanan";
/* No comment provided by engineer. */
"THEME_SECTION" = "Theme";
"THEME_SECTION" = "Tema";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@hari";

View file

@ -27,10 +27,10 @@
"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE" = "Aggiungi contatto";
/* Title for the 'add by phone number' section of the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "Aggiungi da Numero";
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "Aggiungi da numero";
/* Title for the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_TITLE" = "Aggiungi Membro";
"ADD_GROUP_MEMBER_VIEW_TITLE" = "Aggiungi membro";
/* Message shown in conversation view that offers to share your profile with a group. */
"ADD_GROUP_TO_PROFILE_WHITELIST_OFFER" = "Vuoi condividere il tuo profilo con questo gruppo?";
@ -45,7 +45,7 @@
"ALERT_DISCARD_BUTTON" = "Elimina";
/* The label for the 'don't save' button in action sheets. */
"ALERT_DONT_SAVE" = "Non Salvare";
"ALERT_DONT_SAVE" = "Non salvare";
/* No comment provided by engineer. */
"ALERT_ERROR_TITLE" = "Errore";
@ -57,7 +57,7 @@
"ANSWER_CALL_BUTTON_TITLE" = "Rispondi";
/* No comment provided by engineer. */
"APN_Message" = "Nuovo Messaggio!";
"APN_Message" = "Nuovo messaggio!";
/* No comment provided by engineer. */
"APN_MESSAGE_FROM" = "Messaggio da";
@ -78,7 +78,7 @@
"APP_SETTINGS_EDIT_PROFILE_NAME_PROMPT" = "Inserisci il tuo nome";
/* Message format for the 'new app version available' alert. Embeds: {{The latest app version number.}}. */
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "La versione %@ è ora disponibile nell' App Store.";
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "La versione %@ è ora disponibile nell'App Store.";
/* Title for the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_TITLE" = "È disponibile una nuova versione di Signal";
@ -402,7 +402,7 @@
"CONFIRM_LEAVE_GROUP_TITLE" = "Vuoi davvero lasciare?";
/* Button text */
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "Associa Nuovo Dispositivo";
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "Associa nuovo dispositivo";
/* Action sheet body presented when a user's SN has recently changed. Embeds {{contact's name or phone number}} */
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ potrebbe aver reinstallato o cambiato dispositivo. Verifica il codice di sicurezza con lui per garantire la privacy.";
@ -513,13 +513,13 @@
"CONVERSATION_SETTINGS_BLOCK_THIS_USER" = "Blocca questo utente";
/* Navbar title when viewing settings for a 1-on-1 thread */
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Info Contatto";
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Info contatto";
/* Label for table cell which leads to picking a new conversation color */
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Colore";
/* Navbar title when viewing settings for a group thread */
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Info Gruppo";
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Info gruppo";
/* Title of the 'mute this thread' action sheet. */
"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Silenzioso";
@ -715,7 +715,7 @@
"EDIT_GROUP_CONTACTS_SECTION_TITLE" = "Contatti";
/* The navbar title for the 'update group' view. */
"EDIT_GROUP_DEFAULT_TITLE" = "Modifica Gruppo";
"EDIT_GROUP_DEFAULT_TITLE" = "Modifica gruppo";
/* Label for the cell that lets you add a new member to a group. */
"EDIT_GROUP_MEMBERS_ADD_MEMBER" = "Aggiungi...";
@ -757,7 +757,7 @@
"EMPTY_ARCHIVE_TEXT" = "Puoi archiviare conversazioni inattive dalla lista Chat per consultarle successivamente.";
/* No comment provided by engineer. */
"EMPTY_ARCHIVE_TITLE" = "Pulisci le tue Conversazioni";
"EMPTY_ARCHIVE_TITLE" = "Pulisci le tue conversazioni";
/* Full width label displayed when attempting to compose message */
"EMPTY_CONTACTS_LABEL_LINE1" = "Nessuno dei tuoi contatti ha Signal.";
@ -814,7 +814,7 @@
"END_CALL_RESPONDER_IS_BUSY" = "Occupato.";
/* Call setup status label */
"END_CALL_UNCATEGORIZED_FAILURE" = "Chiamata Fallita.";
"END_CALL_UNCATEGORIZED_FAILURE" = "Chiamata fallita.";
/* Error indicating that the phone's contacts could not be retrieved. */
"ERROR_COULD_NOT_FETCH_CONTACTS" = "Impossibile accedere ai contatti.";
@ -1033,7 +1033,7 @@
"IN_CALL_SECURING" = "Risposta. Verifica sicurezza...";
/* Call setup status label */
"IN_CALL_TERMINATED" = "Chiamata Terminata.";
"IN_CALL_TERMINATED" = "Chiamata terminata.";
/* Label reminding the user that they are in archive mode. */
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "Queste conversazioni sono archiviate. Compariranno nella inbox se verranno ricevuti nuovi messaggi.";
@ -1105,10 +1105,10 @@
"LINK_DEVICE_RESTART" = "Riprova";
/* QR Scanning screen instructions, placed alongside a camera view for scanning QR Codes */
"LINK_DEVICE_SCANNING_INSTRUCTIONS" = "Per associare scannerizza il codice QR visualizzato sul dispositivo. ";
"LINK_DEVICE_SCANNING_INSTRUCTIONS" = "Per associare scansiona il codice QR visualizzato sul dispositivo. ";
/* Subheading for 'Link New Device' navigation */
"LINK_NEW_DEVICE_SUBTITLE" = "Scannerizza il codice QR";
"LINK_NEW_DEVICE_SUBTITLE" = "Scansione il codice QR";
/* Navigation title when scanning QR code to add new device. */
"LINK_NEW_DEVICE_TITLE" = "Associa Nuovo Dispositivo";
@ -1141,10 +1141,10 @@
"MEDIA_FROM_LIBRARY_BUTTON" = "Libreria foto e video";
/* Confirmation button text to delete selected media from the gallery, embeds {{number of messages}} */
"MEDIA_GALLERY_DELETE_MULTIPLE_MESSAGES_FORMAT" = "Elimina %d Messaggi";
"MEDIA_GALLERY_DELETE_MULTIPLE_MESSAGES_FORMAT" = "Elimina %d messaggi";
/* Confirmation button text to delete selected media message from the gallery */
"MEDIA_GALLERY_DELETE_SINGLE_MESSAGE" = "Elimina Messaggio";
"MEDIA_GALLERY_DELETE_SINGLE_MESSAGE" = "Elimina messaggio";
/* Short sender label for media sent by you */
"MEDIA_GALLERY_SENDER_NAME_YOU" = "Tu";
@ -1165,7 +1165,7 @@
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Verrà eliminato solo in questo dispositivo";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "Altre Informazioni";
"MESSAGE_ACTION_DETAILS" = "Altre informazioni";
/* Action sheet button title */
"MESSAGE_ACTION_REPLY" = "Rispondi a questo messaggio";
@ -1350,7 +1350,7 @@
"NETWORK_STATUS_DEREGISTERED" = "Non più registrato";
/* No comment provided by engineer. */
"NETWORK_STATUS_HEADER" = "Stato della Rete";
"NETWORK_STATUS_HEADER" = "Stato della rete";
/* No comment provided by engineer. */
"NETWORK_STATUS_OFFLINE" = "Offline";
@ -1362,13 +1362,13 @@
"NEW_GROUP_ADD_NON_CONTACT" = "Aggiungi per numero";
/* Action Sheet title prompting the user for a group avatar */
"NEW_GROUP_ADD_PHOTO_ACTION" = "Setta foto del gruppo";
"NEW_GROUP_ADD_PHOTO_ACTION" = "Imposta foto del gruppo";
/* The title for the 'create group' button. */
"NEW_GROUP_CREATE_BUTTON" = "Crea";
/* Used in place of the group name when a group has not yet been named. */
"NEW_GROUP_DEFAULT_TITLE" = "Nuovo Gruppo";
"NEW_GROUP_DEFAULT_TITLE" = "Nuovo gruppo";
/* An indicator that a user is a member of the new group. */
"NEW_GROUP_MEMBER_LABEL" = "Membro";
@ -1596,7 +1596,7 @@
"PUSH_REGISTER_SUCCESS" = "Ri-registrazione delle notifiche push avvenuta con successo.";
/* Used in table section header and alert view title contexts */
"PUSH_REGISTER_TITLE" = "Notifiche Push";
"PUSH_REGISTER_TITLE" = "Notifiche push";
/* No comment provided by engineer. */
"QUESTIONMARK_PUNCTUATION" = "?";
@ -1869,25 +1869,25 @@
"SETTINGS_ADD_TO_BLOCK_LIST_TITLE" = "Blocca";
/* Label for the 'manual censorship circumvention' switch. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Raggiro Censura";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Raggiro censura";
/* Label for the 'manual censorship circumvention' country. Embeds {{the manual censorship circumvention country}}. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_COUNTRY_FORMAT" = "Posizione: %@";
/* Table footer for the 'censorship circumvention' section when censorship circumvention can be manually enabled. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "Se attivo, Signal cercerà di raggirare la censura. Non attivare questa funzione a meno che vi troviate in un luogo dove Signal è soggetto a censura.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "Se attivo, Signal cercerà di raggirare la censura. Non attivare questa funzione a meno che ti trovi in un luogo dove Signal è soggetto a censura.";
/* Table footer for the 'censorship circumvention' section shown when censorship circumvention has been auto-enabled based on local phone number. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "Il raggiro della censura è stato attivato sulla base del vostro numero telefonico.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "Il raggiro della censura è stato attivato sulla base del tuo numero telefonico.";
/* Table footer for the 'censorship circumvention' section shown when the app is not connected to the internet. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_NO_CONNECTION" = "Il raggiro della censura può essere attivato solo se connessi ad Internet.";
/* Table footer for the 'censorship circumvention' section shown when the app is connected to the Signal service. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "Il raggiro della censura non è necessario; siete già connessi al servizio Signal.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "Il raggiro della censura non è necessario; sei già connesso al servizio Signal.";
/* Table header for the 'censorship circumvention' section. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Raggiro Censura";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Raggiro censura";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_DEBUGLOG" = "Abilita il log di debug";
@ -1962,16 +1962,16 @@
"SETTINGS_COPYRIGHT" = "Copyright Open Whisper Systems\nLicenza secondo direttive GPLv3";
/* No comment provided by engineer. */
"SETTINGS_DELETE_ACCOUNT_BUTTON" = "Cancella Account";
"SETTINGS_DELETE_ACCOUNT_BUTTON" = "Cancella account";
/* Label for 'delete data' button. */
"SETTINGS_DELETE_DATA_BUTTON" = "Cancella tutti i dati";
/* Alert message before user confirms clearing history */
"SETTINGS_DELETE_HISTORYLOG_CONFIRMATION" = "Sei sicuro di voler cancellare tutte le tue storie (messaggi, allegati, chiamate ...) ? L'operazione non potrà essere annullata.";
"SETTINGS_DELETE_HISTORYLOG_CONFIRMATION" = "Sei sicuro di voler cancellare tutta la tua cronologia (messaggi, allegati, chiamate, ecc...)? L'operazione non potrà essere annullata.";
/* Confirmation text for button which deletes all message, calling, attachments, etc. */
"SETTINGS_DELETE_HISTORYLOG_CONFIRMATION_BUTTON" = "Elimina Tutto";
"SETTINGS_DELETE_HISTORYLOG_CONFIRMATION_BUTTON" = "Elimina tutto";
/* No comment provided by engineer. */
"SETTINGS_HELP_HEADER" = "Aiuto";
@ -2001,7 +2001,7 @@
"SETTINGS_NOTIFICATION_CONTENT_DESCRIPTION" = "Notifiche di chiamate e messaggi possono apparire con il \"Blocco Schermo\". Potresti voler limitare cosa mostrare in queste notifiche.";
/* table section header */
"SETTINGS_NOTIFICATION_CONTENT_TITLE" = "Contenuto Notifica";
"SETTINGS_NOTIFICATION_CONTENT_TITLE" = "Contenuto notifica";
/* No comment provided by engineer. */
"SETTINGS_NOTIFICATIONS" = "Notifiche";
@ -2013,7 +2013,7 @@
"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_DESCRIPTION" = "Mostra le chiamate nella lista dei \"Recenti\" dell'app Telefono iOS.";
/* Short table cell label */
"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_TITLE" = "Mostra Chiamate nei Recenti";
"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_TITLE" = "Mostra chiamate nei recenti";
/* Short table cell label */
"SETTINGS_PRIVACY_CALLKIT_TITLE" = "Integrazione chiamate iOS";
@ -2250,7 +2250,7 @@
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_DESCRIPTION" = "Ora puoi scegliere i suoni di notifica predefiniti e per conversazione, le chiamate rispetteranno la suoneria di sistema scelta per ogni contatto. ";
/* button label shown one time, after upgrade */
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_SETTINGS_BUTTON" = "Reimposta Preferenze Notificazioni";
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_SETTINGS_BUTTON" = "Reimposta preferenze delle notifiche";
/* Header for upgrade experience */
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_TITLE" = "Nuovi Suoni Chiamate e Messaggi";
@ -2277,7 +2277,7 @@
"UPGRADE_EXPERIENCE_VIDEO_DESCRIPTION" = "Signal ora supporta le chiamate video sicure. Inizia la chiamata come di consueto, tocca il pulsante della telecamere e fai ciao.";
/* Header for upgrade experience */
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Chiamate Video Sicure!";
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Videochiamate sicure!";
/* Message for the alert indicating that user should upgrade iOS. */
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal richiede iOS 9 o successivo. Per aggiornare: App Impostazioni >> Generali >> Aggiornamento Software. ";

View file

@ -1153,7 +1153,7 @@
"MEDIA_GALLERY_THIS_MONTH_HEADER" = "Denne måneden";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_MEDIA" = "Copy Media";
"MESSAGE_ACTION_COPY_MEDIA" = "Kopier media";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_TEXT" = "Copy Message Text";

View file

@ -285,7 +285,7 @@
"BUTTON_SELECT" = "Seleccionar";
/* Label for button that lets users call a contact again. */
"CALL_AGAIN_BUTTON_TITLE" = "Call Again";
"CALL_AGAIN_BUTTON_TITLE" = "Chamar novamente";
/* Alert message when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_MESSAGE" = "O Signal necessita de acesso ao seu microfone para poder realizar chamadas e gravar mensagens de voz. Pode dar acesso nas Definições.";
@ -516,7 +516,7 @@
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Info. Contacto";
/* Label for table cell which leads to picking a new conversation color */
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Color";
"CONVERSATION_SETTINGS_CONVERSATION_COLOR" = "Cor";
/* Navbar title when viewing settings for a group thread */
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Grupo";
@ -552,7 +552,7 @@
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Criar Novo Contacto";
/* Label for button that opens conversation settings. */
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tap to Change";
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tocar para Alterar";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Remover do Silêncio";
@ -609,13 +609,13 @@
"DATABASE_VIEW_OVERLAY_TITLE" = "A Optimizar a Base de Dados";
/* 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" = "%@ Hr Ago";
"DATE_HOURS_AGO_FORMAT" = " Há %@H";
/* Format string for a relative time, expressed as a certain number of minutes in the past. Embeds {{The number of minutes}}. */
"DATE_MINUTES_AGO_FORMAT" = "%@ Min Ago";
"DATE_MINUTES_AGO_FORMAT" = "Há %@min";
/* The present; the current time. */
"DATE_NOW" = "Now";
"DATE_NOW" = "Agora";
/* The current day. */
"DATE_TODAY" = "Hoje";
@ -868,7 +868,7 @@
"ERROR_MESSAGE_INVALID_KEY_EXCEPTION" = "A chave do destinatário não é valida.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_MESSAGE" = "Received message was out of sync.";
"ERROR_MESSAGE_INVALID_MESSAGE" = "Mensagem recebida fora de ordem.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_VERSION" = "Recebeu uma mensagem não compatível com esta versão.";
@ -886,7 +886,7 @@
"ERROR_MESSAGE_UNKNOWN_ERROR" = "Ocorreu um erro desconhecido.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Safety number changed.";
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "O número de segurança mudou.";
/* Format string for 'unregistered user' error. Embeds {{the unregistered user's name or signal id}}. */
"ERROR_UNREGISTERED_USER_FORMAT" = "Desregistar Utilizador: %@";
@ -1051,7 +1051,7 @@
"INCOMING_DECLINED_CALL" = "Rejeitou uma chamada";
/* No comment provided by engineer. */
"INCOMING_INCOMPLETE_CALL" = "Incoming call";
"INCOMING_INCOMPLETE_CALL" = "A Receber Chamada";
/* info message text shown in conversation view */
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Chamada não atendida visto que o número de segurança mudou.";
@ -1153,25 +1153,25 @@
"MEDIA_GALLERY_THIS_MONTH_HEADER" = "Este mês";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_MEDIA" = "Copy Media";
"MESSAGE_ACTION_COPY_MEDIA" = "Copiar Media";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_TEXT" = "Copy Message Text";
"MESSAGE_ACTION_COPY_TEXT" = "Copiar Mensagem";
/* Action sheet button title */
"MESSAGE_ACTION_DELETE_MESSAGE" = "Delete this Message";
"MESSAGE_ACTION_DELETE_MESSAGE" = "Apagar esta Mensagem";
/* Action sheet button subtitle */
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "It will be deleted on this device only";
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Será apenas apagada neste dispositivo";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "More Info";
"MESSAGE_ACTION_DETAILS" = "Mais Info";
/* Action sheet button title */
"MESSAGE_ACTION_REPLY" = "Reply to this Message";
"MESSAGE_ACTION_REPLY" = "Responder";
/* Action sheet button title */
"MESSAGE_ACTION_SAVE_MEDIA" = "Save Media";
"MESSAGE_ACTION_SAVE_MEDIA" = "Guardar Media";
/* Title for the 'message approval' dialog. */
"MESSAGE_APPROVAL_DIALOG_TITLE" = "Mensagem";
@ -1234,7 +1234,7 @@
"MESSAGE_STATUS_DELIVERED" = "Entregue";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed.";
"MESSAGE_STATUS_FAILED" = "Falha no envio.";
/* status message for failed messages */
"MESSAGE_STATUS_FAILED_SHORT" = "Falhou";
@ -1246,7 +1246,7 @@
"MESSAGE_STATUS_RECIPIENT_SKIPPED" = "Ignorado";
/* Label indicating that a message failed to send. */
"MESSAGE_STATUS_SEND_FAILED" = "Send Failed";
"MESSAGE_STATUS_SEND_FAILED" = "Envio Falhado";
/* message status while message is sending. */
"MESSAGE_STATUS_SENDING" = "A enviar...";
@ -1288,13 +1288,13 @@
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Toque para ver definições";
/* Indicator that separates read from unread messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR" = "New Messages";
"MESSAGES_VIEW_UNREAD_INDICATOR" = "Mensagens Novas ";
/* Messages that indicates that there are more unseen messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES" = "There are more unread messages.";
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES" = "Há mais mensagens não lidas.";
/* Messages that indicates that there are more unseen messages including safety number changes. */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_AND_SAFETY_NUMBER_CHANGES" = "There are more unread messages (including safety number changes).";
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_AND_SAFETY_NUMBER_CHANGES" = "Há mais mensagens não lidas (incluindo mudanças no número de segurança).";
/* notification title */
"MISSED_CALL" = "Chamada não atendida";
@ -1443,10 +1443,10 @@
"OUTGOING_CALL" = "Chamada efectuada";
/* No comment provided by engineer. */
"OUTGOING_INCOMPLETE_CALL" = "Outgoing call";
"OUTGOING_INCOMPLETE_CALL" = "A efectuar chamada";
/* info message recorded in conversation history when local user tries and fails to call another user. */
"OUTGOING_MISSED_CALL" = "Unanswered outgoing call";
"OUTGOING_MISSED_CALL" = "Chamada não atendida";
/* A display format for oversize text messages. */
"OVERSIZE_TEXT_DISPLAY_FORMAT" = "%@...";
@ -1896,7 +1896,7 @@
"SETTINGS_ADVANCED_SUBMIT_DEBUGLOG" = "Enviar Relatório de Erros";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_THEME" = "Theme";
"SETTINGS_ADVANCED_THEME" = "Tema";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_TITLE" = "Avançado";
@ -2121,7 +2121,7 @@
"SHARE_EXTENSION_VIEW_TITLE" = "Partilhar pelo Signal";
/* Action sheet item */
"SHOW_SAFETY_NUMBER_ACTION" = "Show Safety Number";
"SHOW_SAFETY_NUMBER_ACTION" = "Mostrar Número de Segurança ";
/* notification action */
"SHOW_THREAD_BUTTON_TITLE" = "Mostrar Conversa";
@ -2139,10 +2139,10 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Número de segurança é valido!";
/* Label for button to verify a user's safety number. */
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verify Safety Number";
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verificar Número de Segurança";
/* No comment provided by engineer. */
"THEME_SECTION" = "Theme";
"THEME_SECTION" = "Tema";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ dias";

View file

@ -285,7 +285,7 @@
"BUTTON_SELECT" = "Välj";
/* Label for button that lets users call a contact again. */
"CALL_AGAIN_BUTTON_TITLE" = "Call Again";
"CALL_AGAIN_BUTTON_TITLE" = "Ring igen";
/* Alert message when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_MESSAGE" = "Signal behöver åtkomst till mikrofonen för samtal och röstmeddelanden. Du kan tillåta det i appen Inställningar.";
@ -552,7 +552,7 @@
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Skapa ny kontakt";
/* Label for button that opens conversation settings. */
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tap to Change";
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Tryck för att ändra";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Av-tysta";
@ -609,13 +609,13 @@
"DATABASE_VIEW_OVERLAY_TITLE" = "Optimerar databas";
/* 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" = "%@ Hr Ago";
"DATE_HOURS_AGO_FORMAT" = "%@ Timmar sen";
/* Format string for a relative time, expressed as a certain number of minutes in the past. Embeds {{The number of minutes}}. */
"DATE_MINUTES_AGO_FORMAT" = "%@ Min Ago";
"DATE_MINUTES_AGO_FORMAT" = "%@ Minuter sen";
/* The present; the current time. */
"DATE_NOW" = "Now";
"DATE_NOW" = "Nu";
/* The current day. */
"DATE_TODAY" = "Idag";
@ -886,7 +886,7 @@
"ERROR_MESSAGE_UNKNOWN_ERROR" = "Ett okänt fel inträffade.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Safety number changed.";
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Säkerhetsnumret har ändrats";
/* Format string for 'unregistered user' error. Embeds {{the unregistered user's name or signal id}}. */
"ERROR_UNREGISTERED_USER_FORMAT" = "Oregistrerad kontakt: %@";
@ -1051,7 +1051,7 @@
"INCOMING_DECLINED_CALL" = "Du avvisade ett samtal";
/* No comment provided by engineer. */
"INCOMING_INCOMPLETE_CALL" = "Incoming call";
"INCOMING_INCOMPLETE_CALL" = "Inkommande samtal";
/* info message text shown in conversation view */
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Missade samtalet, för den andra personens säkerhetsnummer har ändrats.";
@ -1153,25 +1153,25 @@
"MEDIA_GALLERY_THIS_MONTH_HEADER" = "Denna månad";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_MEDIA" = "Copy Media";
"MESSAGE_ACTION_COPY_MEDIA" = "Kopiera media";
/* Action sheet button title */
"MESSAGE_ACTION_COPY_TEXT" = "Copy Message Text";
"MESSAGE_ACTION_COPY_TEXT" = "Kopiera meddelandetext";
/* Action sheet button title */
"MESSAGE_ACTION_DELETE_MESSAGE" = "Delete this Message";
"MESSAGE_ACTION_DELETE_MESSAGE" = "Ta bort detta meddelande ";
/* Action sheet button subtitle */
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "It will be deleted on this device only";
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Det kommer enbart tas bort från denna enhet";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "More Info";
"MESSAGE_ACTION_DETAILS" = "Mer information";
/* Action sheet button title */
"MESSAGE_ACTION_REPLY" = "Reply to this Message";
"MESSAGE_ACTION_REPLY" = "Svara på detta meddelande";
/* Action sheet button title */
"MESSAGE_ACTION_SAVE_MEDIA" = "Save Media";
"MESSAGE_ACTION_SAVE_MEDIA" = "Spara media";
/* Title for the 'message approval' dialog. */
"MESSAGE_APPROVAL_DIALOG_TITLE" = "Meddelande";
@ -1443,10 +1443,10 @@
"OUTGOING_CALL" = "Utgående samtal";
/* No comment provided by engineer. */
"OUTGOING_INCOMPLETE_CALL" = "Outgoing call";
"OUTGOING_INCOMPLETE_CALL" = "Utgående samtal";
/* info message recorded in conversation history when local user tries and fails to call another user. */
"OUTGOING_MISSED_CALL" = "Unanswered outgoing call";
"OUTGOING_MISSED_CALL" = "Obesvarat utgående samtal";
/* A display format for oversize text messages. */
"OVERSIZE_TEXT_DISPLAY_FORMAT" = "%@…";
@ -1896,7 +1896,7 @@
"SETTINGS_ADVANCED_SUBMIT_DEBUGLOG" = "Skicka in debug-loggar";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_THEME" = "Theme";
"SETTINGS_ADVANCED_THEME" = "Tema";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_TITLE" = "Avancerat";
@ -2121,7 +2121,7 @@
"SHARE_EXTENSION_VIEW_TITLE" = "Dela till Signal";
/* Action sheet item */
"SHOW_SAFETY_NUMBER_ACTION" = "Show Safety Number";
"SHOW_SAFETY_NUMBER_ACTION" = "Visa säkerhetsnummer";
/* notification action */
"SHOW_THREAD_BUTTON_TITLE" = "Visa konversation";
@ -2139,10 +2139,10 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Säkerhetsnumret stämmer!";
/* Label for button to verify a user's safety number. */
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verify Safety Number";
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Verifiera säkerhetsnummer";
/* No comment provided by engineer. */
"THEME_SECTION" = "Theme";
"THEME_SECTION" = "Tema";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ dagar";

View file

@ -84,7 +84,7 @@
"APP_UPDATE_NAG_ALERT_TITLE" = "มี Signal รุ่นใหม่แล้ว";
/* Label for the 'update' button in the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "อัเดต";
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "อัเดต";
/* Name of application */
"APPLICATION_NAME" = "Signal";
@ -679,7 +679,7 @@
"DEVICE_LINKED_AT_LABEL" = "เชื่อมโยง: %@";
/* Alert title that can occur when viewing device manager. */
"DEVICE_LIST_UPDATE_FAILED_TITLE" = "อัเดตรายการอุปกรณ์ไม่สำเร็จ";
"DEVICE_LIST_UPDATE_FAILED_TITLE" = "อัเดตรายการอุปกรณ์ไม่สำเร็จ";
/* table cell label in conversation settings */
"DISAPPEARING_MESSAGES" = "ข้อความที่ลบตัวเองได้";
@ -727,7 +727,7 @@
"EDIT_GROUP_NEW_MEMBER_LABEL" = "เพิ่มแล้ว";
/* The title for the 'update group' button. */
"EDIT_GROUP_UPDATE_BUTTON" = "อัเดต";
"EDIT_GROUP_UPDATE_BUTTON" = "อัเดต";
/* The alert message if user tries to exit update group view without saving changes. */
"EDIT_GROUP_VIEW_UNSAVED_CHANGES_MESSAGE" = "คุณได้เปลี่ยนแปลงกลุ่มนี้ คุณต้องการบันทึกการเปลี่ยนแปลงนี้หรือไม่";
@ -859,7 +859,7 @@
"ERROR_DESCRIPTION_UNREGISTERED_RECIPIENT" = "ผู้ติดต่อนี้ไม่ได้เป็นผู้ใช้ Signal";
/* Error message when unable to receive an attachment because the sending client is too old. */
"ERROR_MESSAGE_ATTACHMENT_FROM_OLD_CLIENT" = "ล้มเหลว: ขอผู้ส่งให้อัเดต Signal และส่งใหม่อีกครั้ง";
"ERROR_MESSAGE_ATTACHMENT_FROM_OLD_CLIENT" = "ล้มเหลว: ขอผู้ส่งให้อัเดต Signal และส่งใหม่อีกครั้ง";
/* No comment provided by engineer. */
"ERROR_MESSAGE_DUPLICATE_MESSAGE" = "ได้รับข้อความที่ซ้ำกัน";
@ -997,7 +997,7 @@
"GROUP_TITLE_CHANGED" = "หัวข้อตอนนี้คือ '%@'";
/* No comment provided by engineer. */
"GROUP_UPDATED" = "อัเดตกลุ่มแล้ว";
"GROUP_UPDATED" = "อัเดตกลุ่มแล้ว";
/* No comment provided by engineer. */
"GROUP_YOU_LEFT" = "คุณได้ออกจากกลุ่ม";
@ -1039,7 +1039,7 @@
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "These conversations are archived. They will appear in the inbox if new messages are received.";
/* Multi-line label explaining how to show names instead of phone numbers in your inbox */
"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "เพื่อดูชื่อในรายชื่อผู้ติดต่อของคุณ อัเดตการตั้งค่าระบบของคุณให้อนุญาตการเข้าถึงผู้ติดต่อ";
"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "เพื่อดูชื่อในรายชื่อผู้ติดต่อของคุณ อัเดตการตั้งค่าระบบของคุณให้อนุญาตการเข้าถึงผู้ติดต่อ";
/* notification body */
"INCOMING_CALL" = "สายโทรเข้า";
@ -1431,10 +1431,10 @@
"OPEN_SETTINGS_BUTTON" = "การตั้งค่า";
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ได้ปิดใช้ข้อความลบตัวเอง";
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ได้ปิดใช้งานข้อความที่ลบตัวเองได้";
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ได้ตั้งเวลาข้อความลบตัวเองไว้ที่ %@";
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ได้ตั้งเวลาข้อความที่ลบตัวเองได้ไว้ที่ %@";
/* Label warning the user that the Signal service may be down. */
"OUTAGE_WARNING" = "Signal is experiencing technical difficulties. We are working hard to restore service as quickly as possible.";
@ -1524,10 +1524,10 @@
"PRIVACY_VERIFICATION_FAILED_THEY_HAVE_WRONG_KEY_FOR_ME" = "ผู้ใช้ Signal ทุกคู่จะแบ่งปันรหัสความปลอดภัยจำเพาะร่วมกัน ตรวจสอบอีกครั้งว่า %@ กำลังแสดงรหัสความปลอดภัย *ของคุณ*";
/* alert body */
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_LOCAL_VERSION" = "คุณกำลังใช้ Signal เวอร์ชันเก่า คุณจำเป็นต้องอัเดตก่อนที่คุณจะสามารถตรวจยืนยัน";
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_LOCAL_VERSION" = "คุณกำลังใช้ Signal เวอร์ชันเก่า คุณจำเป็นต้องอัเดตก่อนที่คุณจะสามารถตรวจยืนยัน";
/* alert body */
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_REMOTE_VERSION" = "คู่สนทนาของคุณกำลังใช้ Signal เวอร์ชันเก่า เขาจำเป็นต้องอัเดตก่อนที่คุณจะสามารถตรวจยืนยัน";
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_REMOTE_VERSION" = "คู่สนทนาของคุณกำลังใช้ Signal เวอร์ชันเก่า เขาจำเป็นต้องอัเดตก่อนที่คุณจะสามารถตรวจยืนยัน";
/* alert body */
"PRIVACY_VERIFICATION_FAILURE_INVALID_QRCODE" = "รหัสที่สแกนดูไม่เหมือนกับรหัสความปลอดภัย คุณทั้งสองกำลังใช้ Signal เวอร์ชันล่าสุดอยู่หรือไม่";
@ -1560,7 +1560,7 @@
"PROFILE_VIEW_ERROR_PROFILE_NAME_TOO_LONG" = "ชื่อโปรไฟล์ของคุณยาวเกินไป";
/* Error message shown when a profile update fails. */
"PROFILE_VIEW_ERROR_UPDATE_FAILED" = "อัเดตโปรไฟล์ไม่สำเร็จ";
"PROFILE_VIEW_ERROR_UPDATE_FAILED" = "อัเดตโปรไฟล์ไม่สำเร็จ";
/* Default text for the profile name field of the profile view. */
"PROFILE_VIEW_NAME_DEFAULT_TEXT" = "ป้อนชื่อของคุณ";
@ -2103,7 +2103,7 @@
"SHARE_EXTENSION_NOT_REGISTERED_TITLE" = "ยังไม่ได้ลงทะเบียน";
/* Message indicating that the share extension cannot be used until the main app has been launched at least once. */
"SHARE_EXTENSION_NOT_YET_MIGRATED_MESSAGE" = "เปิด Signal แอปเพื่ออัเดตหรือลงทะเบียน";
"SHARE_EXTENSION_NOT_YET_MIGRATED_MESSAGE" = "เปิด Signal แอปเพื่ออัเดตหรือลงทะเบียน";
/* Title indicating that the share extension cannot be used until the main app has been launched at least once. */
"SHARE_EXTENSION_NOT_YET_MIGRATED_TITLE" = "ไม่พร้อม";
@ -2226,7 +2226,7 @@
"UNREGISTER_SIGNAL_FAIL" = "ยกเลิกการลงทะเบียนจาก Signal ไม่สำเร็จ";
/* No comment provided by engineer. */
"UNSUPPORTED_ATTACHMENT" = "ได้รับไฟล์แนบชนิดที่ไม่รองรับ";
"UNSUPPORTED_ATTACHMENT" = "ได้รับประเภทไฟล์แนบที่ไม่รองรับ";
/* No comment provided by engineer. */
"UNSUPPORTED_FEATURE_ERROR" = "อุปกรณ์ของคุณไม่รองรับคุณลักษณะนี้";
@ -2253,7 +2253,7 @@
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_SETTINGS_BUTTON" = "ตรวจสอบการตั้งค่าการแจ้งเตือน";
/* Header for upgrade experience */
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_TITLE" = "อัเดตเสียงเรียกการโทรและข้อความแล้ว";
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_TITLE" = "อัเดตเสียงเรียกการโทรและข้อความแล้ว";
/* button label shown one time, after user upgrades app */
"UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_BUTTON" = "สร้างโปรไฟล์ของคุณ";
@ -2280,13 +2280,13 @@
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "การโทรด้วยวิดีโออย่างปลอดภัย!";
/* Message for the alert indicating that user should upgrade iOS. */
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal ต้องการ iOS 9 หรือใหม่กว่า โปรดอัเกรด iOS ได้ใน การตั้งค่า >> ทั่วไป >> รายการอัเดตซอฟต์แวร์ ";
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal ต้องการ iOS 9 หรือใหม่กว่า โปรดอัเกรด iOS ได้ใน การตั้งค่า >> ทั่วไป >> รายการอัเดตซอฟต์แวร์ ";
/* Title for the alert indicating that user should upgrade iOS. */
"UPGRADE_IOS_ALERT_TITLE" = "อัเกรด iOS";
"UPGRADE_IOS_ALERT_TITLE" = "อัเกรด iOS";
/* No comment provided by engineer. */
"Upgrading Signal ..." = "กำลังอัเกรด Signal ...";
"Upgrading Signal ..." = "กำลังอัเกรด Signal ...";
/* button text for back button on verification view */
"VERIFICATION_BACK_BUTTON" = "ย้อนกลับ";
@ -2343,10 +2343,10 @@
"WAITING_TO_COMPLETE_DEVICE_LINK_TEXT" = "ตั้งค่าให้เสร็จสมบูรณ์บน Signal Desktop";
/* Info Message when you disable disappearing messages */
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "คุณได้ปิดใช้ข้อความลบตัวเอง";
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "คุณได้ปิดใช้งานข้อความที่ลบตัวเองได้";
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "คุณได้ตั้งเวลาข้อความลบตัวเองไว้ที่ %@";
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "คุณได้ตั้งเวลาข้อความที่ลบตัวเองได้ไว้ที่ %@";
// Strings Copied in from JSQMessagesViewController

View file

@ -1054,13 +1054,13 @@
"INCOMING_INCOMPLETE_CALL" = "Gelen arama";
/* info message text shown in conversation view */
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Güvenlik numaraları değiştiğinden çağrı karşılanmadı";
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Güvenlik numaraları değiştiğinden arama karşılanmadı.";
/* Message for the alert indicating that an audio file is invalid. */
"INVALID_AUDIO_FILE_ALERT_ERROR_MESSAGE" = "Geçersiz ses dosyası.";
/* Alert body when contacts disabled while trying to invite contacts to signal */
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "Kişilerinizi davet etmek için, Ayarlar uygulamasından Signal'in kişilerinize erişimine izin vermelisiniz";
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "Kişilerinizi davet etmek için, Ayarlar uygulamasından Signal'in kişilerinize erişimine izin vermelisiniz.";
/* Alert title when contacts disabled while trying to invite contacts to signal */
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_TITLE" = "Kişi Erişimine İzin Ver";
@ -1096,7 +1096,7 @@
"LINK_DEVICE_INVALID_CODE_TITLE" = "Cihaz Bağlanması Başarısız Oldu";
/* confirm the users intent to link a new device */
"LINK_DEVICE_PERMISSION_ALERT_BODY" = "Bu cihaz, gruplarınızı ve kişilerinizi görebilir, tüm iletilerinizi okuyabilir ve adınıza mesaj gönderebilir.";
"LINK_DEVICE_PERMISSION_ALERT_BODY" = "Bu cihaz, gruplarınızı ve kişilerinizi görebilecek, tüm iletilerinizi okuyabilecek ve adınıza mesaj gönderebilecektir.";
/* confirm the users intent to link a new device */
"LINK_DEVICE_PERMISSION_ALERT_TITLE" = "Bu cihazı bağla?";
@ -1258,13 +1258,13 @@
"MESSAGE_STATUS_UPLOADING" = "Yükleniyor…";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@artık doğrulanmış olarak işaretlenmiyor. Seçenekler için dokunun. ";
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ artık doğrulanmış olarak işaretlenmiyor. Seçenekler için dokunun. ";
/* Indicates that this 1:1 conversation has been blocked. */
"MESSAGES_VIEW_CONTACT_BLOCKED" = "Bu Kullanıcıyı Engellediniz";
/* Indicates that this 1:1 conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@artık doğrulanmış olarak işaretlenmiyor. Seçenekler için dokunun. ";
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ artık doğrulanmış olarak işaretlenmiyor. Seçenekler için dokunun. ";
/* Action sheet title after tapping on failed download. */
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "İndirme Başarısız Oldu.";
@ -1303,7 +1303,7 @@
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITH_CALLER_NAME" = "Güvenlik numarası değiştiğinden %@ tarafından gelen cevapsız arama.";
/* notification title */
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITHOUT_CALLER_NAME" = "Arayanın güvenlik numarası değiştiğinden çağrı karşılanmadı";
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITHOUT_CALLER_NAME" = "Arayanın güvenlik numarası değiştiğinden arama karşılanmadı.";
/* Alert body
Alert body when camera is not authorized */
@ -1326,7 +1326,7 @@
"MULTIDEVICE_PAIRING_MAX_DESC" = "Daha fazla cihaz eşleştiremezsiniz.";
/* No comment provided by engineer. */
"MULTIDEVICE_PAIRING_MAX_RECOVERY" = "Hesabınla şu anda eşleştirebileceğin azami cihaz sayısına ulaştın. Lütfen bir cihazı kaldır veya daha sonra tekrar dene.";
"MULTIDEVICE_PAIRING_MAX_RECOVERY" = "Hesabınızla şu anda eşleştirebileceğiniz azami cihaz sayısına ulaştınız. Lütfen bir cihazı kaldırın veya eşleştirmek için daha sonra tekrar deneyin.";
/* An explanation of the consequences of muting a thread. */
"MUTE_BEHAVIOR_EXPLANATION" = "Sessize alınmış görüşmeler için bildirim almayacaksınız.";
@ -1494,7 +1494,7 @@
"PLAY_BUTTON_ACCESSABILITY_LABEL" = "Medyayı Oynat";
/* Label indicating that the user is not verified. Embeds {{the user's name or phone number}}. */
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "%@ kullanıcısını doğrulanmış olarak işaretlemediniz.";
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "%@ doğrulanmış olarak işaretlenmedi.";
/* Badge indicating that the user is verified. */
"PRIVACY_IDENTITY_IS_VERIFIED_BADGE" = "Doğrulandı";
@ -1524,16 +1524,16 @@
"PRIVACY_VERIFICATION_FAILED_THEY_HAVE_WRONG_KEY_FOR_ME" = "Signal kullanıcılarının her çifti ayrı bir güvenlik numarası paylaşıyor. %@ *sizin* emniyet numaranızı gösterdiğini tekrar kontrol edin.";
/* alert body */
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_LOCAL_VERSION" = "Eski bir Signal sürümünü çalıştırıyorsunuz. Doğrulamadan önce güncellemeniz gerekiyor.";
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_LOCAL_VERSION" = "Signal'in eski bir sürümünü kullanıyorsunuz. Doğrulamadan önce güncellemeniz gerekiyor.";
/* alert body */
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_REMOTE_VERSION" = "Karşıdaki kişi Signal'in eski bir sürümünü çalıştırıyor. Doğrulamadan önce güncelleme yapılmalıdır.";
"PRIVACY_VERIFICATION_FAILED_WITH_OLD_REMOTE_VERSION" = "Karşıdaki kişi Signal'in eski bir sürümünü kullanıyor. Doğrulamadan önce güncelleme yapmaları gerekiyor.";
/* alert body */
"PRIVACY_VERIFICATION_FAILURE_INVALID_QRCODE" = "Taranan kod bir güvenlik numarası kodu gibi görünmüyor. İkiniz de Signal'in güncel bir sürümünü mü kullanıyorsunuz?";
/* Paragraph(s) shown alongside the safety number when verifying privacy with {{contact name}} */
"PRIVACY_VERIFICATION_INSTRUCTIONS" = "Uçtan uca şifrelemenin güvenliğini %@ ile doğrulamak isterseniz, yukarıdaki numaraları kendi cihazlarındaki numaralarla karşılaştırın.\n\nAlternatif olarak, kodunu telefonlarında tarayabilir veya kodunu taramanızı rica edebilirsiniz.";
"PRIVACY_VERIFICATION_INSTRUCTIONS" = "%@ ile olan uçtan uca şifrelemenizin güvenliğini doğrulamak isterseniz, yukarıdaki numaraları cihazlarındaki numaralarla karşılaştırın.\n\nAlternatif olarak, telefonlarından kodu taratabilir, ya da kodunuzu taratmalarını rica edebilirsiniz.";
/* Navbar title */
"PRIVACY_VERIFICATION_TITLE" = "Güvenlik Numarasını Doğrula";
@ -1626,7 +1626,7 @@
"QUOTED_REPLY_TYPE_VIDEO" = "Video";
/* No comment provided by engineer. */
"RATING_MSG" = "Özel görüşmeler yapmak için Signal'ı kullanmaktan hoşlanıyorsan, projemize oy vererek destekte bulunabilirsin. Bu işlem bir dakikadan uzun sürmez ve başka insanların biraz mahremiyet bulmasına yardımcı olur.";
"RATING_MSG" = "Özel görüşmeler yapmak için Signal'ı kullanmaktan hoşlanıyorsan, oy vererek projemize destekte bulunabilirsin. Bu işlem bir dakikadan uzun sürmez ve başkalarının mahremiyet bulmasına yardımcı olur.";
/* No comment provided by engineer. */
"RATING_RATE" = "Signal'i Oyla";
@ -1641,7 +1641,7 @@
"REGISTER_2FA_FORGOT_PIN_ALERT_MESSAGE" = "Bu telefon numarasının kaydı, numaranın en son Signal üzerinde aktif olmasının üzerinden 7 gün geçtikten sonra Kayıt Kilidi PIN'iniz olmadan mümkün olabilecektir.";
/* Instructions to enter the 'two-factor auth pin' in the 2FA registration view. */
"REGISTER_2FA_INSTRUCTIONS" = "Bu telefon numarası Kayıt Kilidi etkin. Lütfen Kayıt Kilidi PIN kodunu giriniz.\n\nKayıt Kilidi PIN'iniz, son adımda telefonunuza gönderilen otomatik doğrulama kodundan ayrıdır.";
"REGISTER_2FA_INSTRUCTIONS" = "Bu telefon numarası Kayıt Kilidi'ni etkinleştirmiş. Lütfen Kayıt Kilidi PIN'ini girin.\n\nKayıt Kilidi PIN'iniz son aşamada otomatik olarak gönderilen doğrulama kodundan farklıdır.";
/* Title for alert indicating that attempt to register with 'two-factor auth' failed. */
"REGISTER_2FA_REGISTRATION_FAILED_ALERT_TITLE" = "Kaydolma İşlemi Başarısız Oldu";
@ -1944,7 +1944,7 @@
"SETTINGS_BLOCK_LIST_NO_CONTACTS" = "Signal'de kişiniz yok.";
/* A label that indicates the user's search has no matching results. */
"SETTINGS_BLOCK_LIST_NO_SEARCH_RESULTS" = "Arama sonucu yok";
"SETTINGS_BLOCK_LIST_NO_SEARCH_RESULTS" = "Arama Sonucu Yok";
/* Label for the block list section of the settings view */
"SETTINGS_BLOCK_LIST_TITLE" = "Engellenen";
@ -2007,7 +2007,7 @@
"SETTINGS_NOTIFICATIONS" = "Bildirimler";
/* Label for 'CallKit privacy' preference */
"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE" = "Arayan adı ve numarasını göster";
"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE" = "Arayanın Adını ve Numarasını Göster";
/* Settings table section footer. */
"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_DESCRIPTION" = "iOS Telefon uygulamasında \"Son Aramalar\" listesinde aramaları göster.";
@ -2109,13 +2109,13 @@
"SHARE_EXTENSION_NOT_YET_MIGRATED_TITLE" = "Hazır Değil";
/* Alert title */
"SHARE_EXTENSION_SENDING_FAILURE_TITLE" = "Ek Dosyayı Gönderme Başarısız Oldu";
"SHARE_EXTENSION_SENDING_FAILURE_TITLE" = "Eklenti Gönderilemedi";
/* Alert title */
"SHARE_EXTENSION_SENDING_IN_PROGRESS_TITLE" = "Yükleniyor...";
/* Shown when trying to share content to a Signal user for the share extension. Followed by failure details. */
"SHARE_EXTENSION_UNABLE_TO_BUILD_ATTACHMENT_ALERT_TITLE" = "Ek Dosyayı Hazırlama Başarısız Oldu";
"SHARE_EXTENSION_UNABLE_TO_BUILD_ATTACHMENT_ALERT_TITLE" = "Eklenti Hazırlanamadı";
/* Title for the 'share extension' view. */
"SHARE_EXTENSION_VIEW_TITLE" = "Signal'de Paylaş";

View file

@ -40,6 +40,7 @@ public class OWSNavigationBar: UINavigationBar {
@objc
public static let backgroundBlurMutingFactor: CGFloat = 0.5
var blurEffectView: UIView?
override init(frame: CGRect) {
super.init(frame: frame)
@ -53,6 +54,7 @@ public class OWSNavigationBar: UINavigationBar {
let blurEffect = UIBlurEffect(style: .light)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.isUserInteractionEnabled = false
self.blurEffectView = blurEffectView
// remove hairline below bar.
self.shadowImage = UIImage()
@ -71,6 +73,8 @@ public class OWSNavigationBar: UINavigationBar {
NotificationCenter.default.addObserver(self, selector: #selector(didChangeStatusBarFrame), name: .UIApplicationDidChangeStatusBarFrame, object: nil)
}
// MARK: Layout
@objc
public func callDidChange() {
Logger.debug("\(self.logTag) in \(#function)")
@ -125,4 +129,15 @@ public class OWSNavigationBar: UINavigationBar {
}
}
}
// MARK:
@objc
public func makeClear() {
self.backgroundColor = .clear
self.setBackgroundImage(UIImage(), for: .default)
self.shadowImage = UIImage()
self.clipsToBounds = true
self.blurEffectView?.isHidden = true
}
}

View file

@ -67,11 +67,11 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
let vc = AttachmentApprovalViewController(attachment: attachment, delegate: delegate)
let navController = OWSNavigationController(rootViewController: vc)
// Make navigationBar clear
navController.navigationBar.backgroundColor = .clear
navController.navigationBar.setBackgroundImage(UIImage(), for: .default)
navController.navigationBar.shadowImage = UIImage()
navController.navigationBar.clipsToBounds = true
guard let navigationBar = navController.navigationBar as? OWSNavigationBar else {
owsFail("\(self.logTag) in \(#function) navigationBar was nil or unexpected class")
return navController
}
navigationBar.makeClear()
return navController
}

View file

@ -348,6 +348,15 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
#pragma mark - Update With... Methods
- (void)applyChangeToSelfAndLatestCopy:(YapDatabaseReadWriteTransaction *)transaction
changeBlock:(void (^)(id))changeBlock
{
OWSAssert(transaction);
[super applyChangeToSelfAndLatestCopy:transaction changeBlock:changeBlock];
[self touchThreadWithTransaction:transaction];
}
- (void)updateWithExpireStartedAt:(uint64_t)expireStartedAt transaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssert(expireStartedAt > 0);

View file

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>2.28.0</string>
<key>CFBundleVersion</key>
<string>2.28.0.10</string>
<string>2.28.0.12</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>NSAppTransportSecurity</key>