mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge tag '2.28.0.12'
This commit is contained in:
commit
6e1c1a681b
|
@ -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 */,
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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. ";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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ş";
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue