diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index 61efe221a..03261fea5 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -46,3 +46,5 @@ jobs: testnet dashpay wallet + coinjoin + voting diff --git a/DashPay/Assets/DPAssets.xcassets/Contents.json b/DashPay/Assets/DPAssets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/DashPay/Assets/DPAssets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/Contents.json b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/Contents.json similarity index 66% rename from DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/Contents.json rename to DashPay/Assets/DPAssets.xcassets/icon_info.imageset/Contents.json index e68fe0dab..5cf97ee01 100644 --- a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/Contents.json +++ b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "tabbar_pay_button.png", + "filename" : "icon_info.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "tabbar_pay_button@2x.png", + "filename" : "icon_info@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "tabbar_pay_button@3x.png", + "filename" : "icon_info@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info.png b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info.png new file mode 100644 index 000000000..3c55b320d Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info.png differ diff --git a/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@2x.png b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@2x.png new file mode 100644 index 000000000..418d6e959 Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@2x.png differ diff --git a/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@3x.png b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@3x.png new file mode 100644 index 000000000..be49e6bca Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/icon_info.imageset/icon_info@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/Contents.json b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/Contents.json similarity index 64% rename from DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/Contents.json rename to DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/Contents.json index acb97821a..d42e8bea6 100644 --- a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/Contents.json +++ b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "tabbar_discover_icon.png", + "filename" : "pay_user_accessory.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "tabbar_discover_icon@2x.png", + "filename" : "pay_user_accessory@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "tabbar_discover_icon@3x.png", + "filename" : "pay_user_accessory@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory.png b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory.png new file mode 100644 index 000000000..fcf4edee9 Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory.png differ diff --git a/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@2x.png b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@2x.png new file mode 100644 index 000000000..781f3d0e8 Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@2x.png differ diff --git a/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@3x.png b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@3x.png new file mode 100644 index 000000000..f7396494c Binary files /dev/null and b/DashPay/Assets/DPAssets.xcassets/pay_user_accessory.imageset/pay_user_accessory@3x.png differ diff --git a/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.h b/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.h new file mode 100644 index 000000000..4a44f584f --- /dev/null +++ b/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.h @@ -0,0 +1,44 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWFullScreenModalControllerViewController; + +@protocol DWFullScreenModalControllerViewControllerDelegate + +- (void)fullScreenModalControllerViewControllerDidCancel:(DWFullScreenModalControllerViewController *)controller; + +@end + +@interface DWFullScreenModalControllerViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +- (instancetype)initWithController:(UIViewController *)controller; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil + bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)initWithCoder:(nullable NSCoder *)coder NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.m b/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.m new file mode 100644 index 000000000..dab274a32 --- /dev/null +++ b/DashPay/Presentation/Containers/DWFullScreenModalControllerViewController.m @@ -0,0 +1,104 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWFullScreenModalControllerViewController.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWFullScreenModalControllerViewController () + +@property (readonly, nonatomic, strong) UIViewController *contentController; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWFullScreenModalControllerViewController + +- (instancetype)initWithController:(UIViewController *)controller { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _contentController = controller; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + UIView *header = [[UIView alloc] init]; + header.translatesAutoresizingMaskIntoConstraints = NO; + [self.view addSubview:header]; + + UILabel *label = [[UILabel alloc] init]; + label.translatesAutoresizingMaskIntoConstraints = NO; + label.textColor = [UIColor dw_darkTitleColor]; + label.textAlignment = NSTextAlignmentCenter; + label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + label.text = self.title; + label.adjustsFontForContentSizeCategory = YES; + [header addSubview:label]; + + UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeSystem]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setImage:[[UIImage imageNamed:@"payments_nav_cross"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] + forState:UIControlStateNormal]; + cancelButton.tintColor = [UIColor dw_darkTitleColor]; + [cancelButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside]; + [header addSubview:cancelButton]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self.view addSubview:contentView]; + + [NSLayoutConstraint activateConstraints:@[ + [header.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], + [header.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor + constant:8], + [self.view.trailingAnchor constraintEqualToAnchor:header.trailingAnchor + constant:8], + [header.heightAnchor constraintEqualToConstant:44], + + [contentView.topAnchor constraintEqualToAnchor:header.bottomAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [self.view.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + + [label.topAnchor constraintEqualToAnchor:header.topAnchor], + [label.leadingAnchor constraintEqualToAnchor:header.leadingAnchor + constant:44], + [header.bottomAnchor constraintEqualToAnchor:label.bottomAnchor], + + [cancelButton.topAnchor constraintEqualToAnchor:header.topAnchor], + [cancelButton.leadingAnchor constraintEqualToAnchor:label.trailingAnchor], + [cancelButton.trailingAnchor constraintEqualToAnchor:header.trailingAnchor], + [header.bottomAnchor constraintEqualToAnchor:cancelButton.bottomAnchor], + [cancelButton.widthAnchor constraintEqualToConstant:44], + ]]; + + [self dw_embedChild:self.contentController inContainer:contentView]; +} + +- (void)cancelButtonAction { + [self.delegate fullScreenModalControllerViewControllerDidCancel:self]; +} + +@end diff --git a/DashPay/Presentation/Error/DWNetworkErrorViewController.h b/DashPay/Presentation/Error/DWNetworkErrorViewController.h new file mode 100644 index 000000000..6fb0c9902 --- /dev/null +++ b/DashPay/Presentation/Error/DWNetworkErrorViewController.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, DWErrorDescriptionType) { + DWErrorDescriptionType_Profile, + DWErrorDescriptionType_AcceptContactRequest, + DWErrorDescriptionType_SendContactRequest, +}; + +@interface DWNetworkErrorViewController : UIViewController + +- (instancetype)initWithType:(DWErrorDescriptionType)type; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Error/DWNetworkErrorViewController.m b/DashPay/Presentation/Error/DWNetworkErrorViewController.m new file mode 100644 index 000000000..b7b859021 --- /dev/null +++ b/DashPay/Presentation/Error/DWNetworkErrorViewController.m @@ -0,0 +1,107 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWNetworkErrorViewController.h" + +#import "DWModalPopupTransition.h" +#import "DWNetworkUnavailableView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWNetworkErrorViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; +@property (nonatomic, assign) DWErrorDescriptionType type; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWNetworkErrorViewController + +- (instancetype)initWithType:(DWErrorDescriptionType)type { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _type = type; + + _modalTransition = [[DWModalPopupTransition alloc] initWithInteractiveTransitionAllowed:NO]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + [self.view addSubview:contentView]; + + DWNetworkUnavailableView *errorView = [[DWNetworkUnavailableView alloc] initWithFrame:CGRectZero]; + errorView.translatesAutoresizingMaskIntoConstraints = NO; + switch (self.type) { + case DWErrorDescriptionType_Profile: + errorView.error = NSLocalizedString(@"Unable to fetch contact details", nil); + break; + case DWErrorDescriptionType_AcceptContactRequest: + errorView.error = NSLocalizedString(@"Unable to accept contact request", nil); + break; + case DWErrorDescriptionType_SendContactRequest: + errorView.error = NSLocalizedString(@"Unable to send contact request", nil); + break; + } + [contentView addSubview:errorView]; + + UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeSystem]; + closeButton.translatesAutoresizingMaskIntoConstraints = NO; + [closeButton setTitle:NSLocalizedString(@"Close", nil) forState:UIControlStateNormal]; + [closeButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [contentView addSubview:closeButton]; + + + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + [contentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + + [errorView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:32.0], + [errorView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [errorView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + + [closeButton.topAnchor constraintEqualToAnchor:errorView.bottomAnchor + constant:32.0], + [closeButton.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:closeButton.bottomAnchor + constant:16.0], + [closeButton.heightAnchor constraintGreaterThanOrEqualToConstant:44.0], + ]]; +} + +- (void)closeButtonAction:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/DashPay/Presentation/Filter View/DWFilterHeaderView.xib b/DashPay/Presentation/Filter View/DWFilterHeaderView.xib new file mode 100644 index 000000000..d68e3374d --- /dev/null +++ b/DashPay/Presentation/Filter View/DWFilterHeaderView.xib @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.h b/DashPay/Presentation/Home/Cells/DWFilterHeaderView.h similarity index 82% rename from DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.h rename to DashPay/Presentation/Home/Cells/DWFilterHeaderView.h index b484e0f96..5aa8abf88 100644 --- a/DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.h +++ b/DashPay/Presentation/Home/Cells/DWFilterHeaderView.h @@ -16,6 +16,7 @@ // #import +#import "BaseCollectionReusableView.h" NS_ASSUME_NONNULL_BEGIN @@ -24,10 +25,11 @@ NS_ASSUME_NONNULL_BEGIN @protocol DWFilterHeaderViewDelegate - (void)filterHeaderView:(DWFilterHeaderView *)view filterButtonAction:(UIView *)sender; +- (void)filterHeaderView:(DWFilterHeaderView *)view infoButtonAction:(UIView *)sender; @end -@interface DWFilterHeaderView : UICollectionReusableView +@interface DWFilterHeaderView : BaseCollectionReusableView @property (strong, nonatomic) IBOutlet UILabel *titleLabel; @property (strong, nonatomic) IBOutlet UIButton *filterButton; @@ -36,6 +38,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nullable, nonatomic, weak) id delegate; +@property (strong, nonatomic) IBOutlet UIButton *infoButton; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.m b/DashPay/Presentation/Home/Cells/DWFilterHeaderView.m similarity index 94% rename from DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.m rename to DashPay/Presentation/Home/Cells/DWFilterHeaderView.m index 50e2005ac..aaa1a873c 100644 --- a/DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.m +++ b/DashPay/Presentation/Home/Cells/DWFilterHeaderView.m @@ -65,6 +65,8 @@ - (void)commonInit { self.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; self.filterButton.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; + + [self.infoButton setHidden:YES]; } - (void)setPadding:(CGFloat)padding { @@ -79,6 +81,10 @@ - (IBAction)filterButtonAction:(UIButton *)sender { [self.delegate filterHeaderView:self filterButtonAction:sender]; } +- (IBAction)infoButtonAction:(UIButton *)sender { + [self.delegate filterHeaderView:self infoButtonAction:sender]; +} + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.xib b/DashPay/Presentation/Home/Cells/DWFilterHeaderView.xib similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/DWFilterHeaderView.xib rename to DashPay/Presentation/Home/Cells/DWFilterHeaderView.xib diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.h b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.h similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.h rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.h diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.m b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.m similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.m rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.m diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.xib b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.xib similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationDoneTableViewCell.xib rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationDoneTableViewCell.xib diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorRetryDelegate.h b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorRetryDelegate.h similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorRetryDelegate.h rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorRetryDelegate.h diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.h b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.h similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.h rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.h diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.m b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.m similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.m rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.m diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.xib b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.xib similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationErrorTableViewCell.xib rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationErrorTableViewCell.xib diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.h b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.h similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.h rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.h diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.m b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.m similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.m rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.m diff --git a/DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.xib b/DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.xib similarity index 100% rename from DashWallet/Sources/UI/Home/Views/Cells/RegistrationStatus/DWDPRegistrationStatusTableViewCell.xib rename to DashPay/Presentation/Home/Cells/Registration Status/DWDPRegistrationStatusTableViewCell.xib diff --git a/DashPay/Presentation/Home/DWDashPayReadyProtocol.h b/DashPay/Presentation/Home/DWDashPayReadyProtocol.h new file mode 100644 index 000000000..635b0103e --- /dev/null +++ b/DashPay/Presentation/Home/DWDashPayReadyProtocol.h @@ -0,0 +1,30 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +//extern NSNotificationName const DWDashPayAvailabilityStatusUpdatedNotification; TODO: check if needed + +@protocol DWDashPayReadyProtocol + +- (BOOL)shouldShowCreateUserNameButton; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.h b/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.h new file mode 100644 index 000000000..d9bc75111 --- /dev/null +++ b/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.h @@ -0,0 +1,44 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWDPUpdateProfileModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DSBlockchainIdentity; + +typedef NS_ENUM(NSUInteger, DWCurrentUserProfileModelState) { + DWCurrentUserProfileModel_None, + DWCurrentUserProfileModel_Loading, + DWCurrentUserProfileModel_Done, + DWCurrentUserProfileModel_Error, +}; + +@interface DWCurrentUserProfileModel : NSObject + +@property (readonly, nonatomic, strong) DWDPUpdateProfileModel *updateModel; + +@property (readonly, nonatomic, assign) DWCurrentUserProfileModelState state; +@property (readonly, nullable, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +- (void)update; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.m b/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.m new file mode 100644 index 000000000..14359c6c0 --- /dev/null +++ b/DashPay/Presentation/Home/Model/DWCurrentUserProfileModel.m @@ -0,0 +1,84 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWCurrentUserProfileModel.h" + +#import "DWEnvironment.h" +// if MOCK_DASHPAY +#import "DWDashPayConstants.h" +#import "DWGlobalOptions.h" + +@interface DWCurrentUserProfileModel () + +@property (nonatomic, assign) DWCurrentUserProfileModelState state; + +@end + +@implementation DWCurrentUserProfileModel + +- (instancetype)init { + self = [super init]; + if (self) { + _updateModel = [[DWDPUpdateProfileModel alloc] init]; + } + return self; +} + +- (DSBlockchainIdentity *)blockchainIdentity { + if (MOCK_DASHPAY) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + return [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + return [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; +} + +- (void)update { + if (self.blockchainIdentity == nil) { + self.state = DWCurrentUserProfileModel_None; + return; + } + + if (self.state == DWCurrentUserProfileModel_Loading) { + return; + } + + self.state = DWCurrentUserProfileModel_Loading; + + if (MOCK_DASHPAY) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + self.state = DWCurrentUserProfileModel_Done; + }); + + return; + } + + __weak typeof(self) weakSelf = self; + [self.blockchainIdentity fetchProfileWithCompletion:^(BOOL success, NSError *_Nonnull error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + strongSelf.state = success ? DWCurrentUserProfileModel_Done : DWCurrentUserProfileModel_Error; + }]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.h b/DashPay/Presentation/Home/Views/DWDPWelcomeView.h similarity index 86% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.h rename to DashPay/Presentation/Home/Views/DWDPWelcomeView.h index cb6558a4f..9b57a3681 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.h +++ b/DashPay/Presentation/Home/Views/DWDPWelcomeView.h @@ -15,11 +15,11 @@ // limitations under the License. // -#import "DWUsernameValidationRule.h" +#import "DWBasePressableControl.h" NS_ASSUME_NONNULL_BEGIN -@interface DWMinLengthUsernameValidationRule : DWUsernameValidationRule +@interface DWDPWelcomeView : DWBasePressableControl @end diff --git a/DashPay/Presentation/Home/Views/DWDPWelcomeView.m b/DashPay/Presentation/Home/Views/DWDPWelcomeView.m new file mode 100644 index 000000000..30ac0207a --- /dev/null +++ b/DashPay/Presentation/Home/Views/DWDPWelcomeView.m @@ -0,0 +1,133 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPWelcomeView.h" + +#import "DWUIKit.h" +#import "UIView+DWAnimations.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPWelcomeView () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *subtitleLabel; +@property (readonly, nonatomic, strong) UIImageView *arrowImageView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPWelcomeView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + + self.layoutMargins = UIEdgeInsetsMake(0, 16, 0, 16); + + DWShadowView *shadowView = [[DWShadowView alloc] initWithFrame:CGRectZero]; + shadowView.translatesAutoresizingMaskIntoConstraints = NO; + shadowView.insetsLayoutMarginsFromSafeArea = YES; + shadowView.userInteractionEnabled = NO; + [self addSubview:shadowView]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + contentView.userInteractionEnabled = NO; + [shadowView addSubview:contentView]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + titleLabel.text = NSLocalizedString(@"Join DashPay", nil); + titleLabel.userInteractionEnabled = NO; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.textColor = [UIColor dw_tertiaryTextColor]; + subtitleLabel.numberOfLines = 0; + subtitleLabel.adjustsFontForContentSizeCategory = YES; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; + subtitleLabel.text = NSLocalizedString(@"Create a username, add your friends.", nil); + subtitleLabel.userInteractionEnabled = NO; + [contentView addSubview:subtitleLabel]; + _subtitleLabel = subtitleLabel; + + UIImageView *arrowImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_user_accessory"]]; + arrowImageView.translatesAutoresizingMaskIntoConstraints = NO; + arrowImageView.userInteractionEnabled = NO; + [contentView addSubview:arrowImageView]; + _arrowImageView = arrowImageView; + + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 forAxis:UILayoutConstraintAxisHorizontal]; + [subtitleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 forAxis:UILayoutConstraintAxisHorizontal]; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 forAxis:UILayoutConstraintAxisVertical]; + [subtitleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 forAxis:UILayoutConstraintAxisVertical]; + + const CGFloat horizontalPadding = 12; + const CGFloat verticalPadding = 16; + UILayoutGuide *guide = self.layoutMarginsGuide; + [NSLayoutConstraint activateConstraints:@[ + [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [shadowView.topAnchor constraintEqualToAnchor:self.topAnchor], + [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:shadowView.bottomAnchor], + + [contentView.leadingAnchor constraintEqualToAnchor:shadowView.leadingAnchor], + [contentView.topAnchor constraintEqualToAnchor:shadowView.topAnchor], + [shadowView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [shadowView.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:verticalPadding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:horizontalPadding], + + [subtitleLabel.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:2.0], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:horizontalPadding], + [contentView.bottomAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor + constant:verticalPadding], + + [arrowImageView.leadingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor + constant:horizontalPadding], + [arrowImageView.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:horizontalPadding], + [arrowImageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:arrowImageView.trailingAnchor + constant:horizontalPadding], + + [arrowImageView.widthAnchor constraintEqualToConstant:32.0], + [arrowImageView.heightAnchor constraintEqualToConstant:32.0], + ]]; + } + return self; +} + +@end diff --git a/DashWallet/Sources/UI/Home/Views/Home Header View/DashPayProfileView.swift b/DashPay/Presentation/Home/Views/DashPayProfileView.swift similarity index 94% rename from DashWallet/Sources/UI/Home/Views/Home Header View/DashPayProfileView.swift rename to DashPay/Presentation/Home/Views/DashPayProfileView.swift index e6adcf621..9605be28c 100644 --- a/DashWallet/Sources/UI/Home/Views/Home Header View/DashPayProfileView.swift +++ b/DashPay/Presentation/Home/Views/DashPayProfileView.swift @@ -31,11 +31,13 @@ class DashPayProfileView: UIControl { var username: String? { didSet { - avatarView.username = username + if let username { + avatarView.configure(withUsername: username) + } } } - var unreadCount = 0 { + var unreadCount: UInt = 0 { didSet { badgeView.text = "\(unreadCount)" bellImageView.isHidden = unreadCount > 0 @@ -79,7 +81,7 @@ class DashPayProfileView: UIControl { contentView.addSubview(badgeView) NSLayoutConstraint.activate([ - contentView.topAnchor.constraint(equalTo: topAnchor), + contentView.topAnchor.constraint(equalTo: topAnchor, constant: 10), contentView.leadingAnchor.constraint(equalTo: leadingAnchor), contentView.trailingAnchor.constraint(equalTo: trailingAnchor), contentView.bottomAnchor.constraint(equalTo: bottomAnchor), diff --git a/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.h b/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.h new file mode 100644 index 000000000..3b97cfdb5 --- /dev/null +++ b/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInfoPopupContentView : UIView + +@property (nullable, copy, nonatomic) NSString *text; +@property (assign, nonatomic) CGPoint pointerOffset; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.m b/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.m new file mode 100644 index 000000000..524226186 --- /dev/null +++ b/DashPay/Presentation/InfoPopup/DWInfoPopupContentView.m @@ -0,0 +1,170 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInfoPopupContentView.h" + +#import "DWUIKit.h" + +@interface DWInfoPopupTextView : UIView + +@property (readonly, nonatomic, strong) UILabel *textLabel; + +@end + +@implementation DWInfoPopupTextView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + self.layer.cornerRadius = 8.0; + self.layer.masksToBounds = YES; + + UILabel *textLabel = [[UILabel alloc] init]; + textLabel.translatesAutoresizingMaskIntoConstraints = NO; + textLabel.textColor = [UIColor dw_darkTitleColor]; + textLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; + textLabel.numberOfLines = 0; + [self addSubview:textLabel]; + _textLabel = textLabel; + + UIImageView *crossImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"payments_nav_cross"]]; + crossImageView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:crossImageView]; + + [NSLayoutConstraint activateConstraints:@[ + [crossImageView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:12.0], + [self.trailingAnchor constraintEqualToAnchor:crossImageView.trailingAnchor + constant:12.0], + + [textLabel.topAnchor constraintEqualToAnchor:self.topAnchor + constant:22.0], + [textLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:22.0], + [self.bottomAnchor constraintEqualToAnchor:textLabel.bottomAnchor + constant:22.0], + [self.trailingAnchor constraintEqualToAnchor:textLabel.trailingAnchor + constant:44.0], + ]]; + } + return self; +} + +@end + +#pragma mark - + +@interface DWInfoPopupContentView () + +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UIImageView *arrowImageView; +@property (readonly, nonatomic, strong) DWInfoPopupTextView *textView; + +@property (nonatomic, assign) BOOL isArrowRotated; + +@end + +@implementation DWInfoPopupContentView + +- (NSString *)text { + return self.textView.textLabel.text; +} + +- (void)setText:(NSString *)text { + self.textView.textLabel.text = text; + [self setNeedsLayout]; +} + +- (void)setPointerOffset:(CGPoint)pointerOffset { + _pointerOffset = pointerOffset; + [self setNeedsLayout]; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + + UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_info"]]; + [self addSubview:iconImageView]; + _iconImageView = iconImageView; + + UIImageView *arrowImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"info_triangle"]]; + [self addSubview:arrowImageView]; + _arrowImageView = arrowImageView; + + DWInfoPopupTextView *textView = [[DWInfoPopupTextView alloc] initWithFrame:CGRectMake(0, 0, 200, 80)]; + [self addSubview:textView]; + _textView = textView; + } + return self; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGSize size = self.bounds.size; + const CGFloat padding = IS_IPAD ? 100.0 : 30.0; + const CGFloat contentWidth = size.width - padding * 2; + + const CGSize textSize = [self.textView systemLayoutSizeFittingSize:CGSizeMake(contentWidth, UILayoutFittingExpandedSize.height) + withHorizontalFittingPriority:UILayoutPriorityRequired + verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; + + const BOOL hideArrow = textSize.height > size.height / 2.0; + self.iconImageView.hidden = hideArrow; + self.arrowImageView.hidden = hideArrow; + + if (hideArrow) { + self.textView.frame = CGRectMake(padding, (size.height - textSize.height) / 2.0, textSize.width, textSize.height); + } + else { + const CGSize iconSize = self.iconImageView.image.size; + const CGSize arrowSize = self.arrowImageView.image.size; + const CGFloat spacing = 4.0; + + const CGFloat contentHeight = iconSize.height + spacing + arrowSize.height + textSize.height; + const BOOL rotated = (self.pointerOffset.y + contentHeight) > size.height; + if (rotated) { + self.arrowImageView.transform = CGAffineTransformMakeRotation(M_PI); + + CGFloat top = self.pointerOffset.y; + self.iconImageView.frame = CGRectMake(self.pointerOffset.x, top, iconSize.width, iconSize.height); + top -= iconSize.height + spacing; + + self.arrowImageView.frame = CGRectMake(self.pointerOffset.x, top, arrowSize.width, arrowSize.height); + + top -= textSize.height; + self.textView.frame = CGRectMake(padding, top, textSize.width, textSize.height); + } + else { + self.arrowImageView.transform = CGAffineTransformIdentity; + + CGFloat top = self.pointerOffset.y; + self.iconImageView.frame = CGRectMake(self.pointerOffset.x, top, iconSize.width, iconSize.height); + top += iconSize.height + spacing; + + self.arrowImageView.frame = CGRectMake(self.pointerOffset.x, top, arrowSize.width, arrowSize.height); + top += arrowSize.height; + + self.textView.frame = CGRectMake(padding, top, textSize.width, textSize.height); + } + } +} + +@end diff --git a/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.h b/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.h new file mode 100644 index 000000000..2d97bf4ff --- /dev/null +++ b/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.h @@ -0,0 +1,33 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInfoPopupViewController : UIViewController + +- (instancetype)initWithText:(NSString *)text offset:(CGPoint)offset; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.m b/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.m new file mode 100644 index 000000000..b313042ee --- /dev/null +++ b/DashPay/Presentation/InfoPopup/DWInfoPopupViewController.m @@ -0,0 +1,73 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInfoPopupViewController.h" + +#import "DWInfoPopupContentView.h" + +@interface DWInfoPopupViewController () + +@property (readonly, nonatomic, copy) NSString *text; +@property (readonly, nonatomic, assign) CGPoint offset; + +@property (nonatomic, strong) DWInfoPopupContentView *contentView; + +@end + +@implementation DWInfoPopupViewController + +- (instancetype)initWithText:(NSString *)text offset:(CGPoint)offset { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _text = text; + _offset = offset; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.4]; + + DWInfoPopupContentView *contentView = [[DWInfoPopupContentView alloc] initWithFrame:CGRectZero]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.text = self.text; + contentView.pointerOffset = self.offset; + [self.view addSubview:contentView]; + self.contentView = contentView; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.topAnchor constraintEqualToAnchor:self.view.topAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [self.view.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + ]]; + + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)]; + [self.view addGestureRecognizer:tapRecognizer]; +} + +- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)tapAction { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.h b/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.h new file mode 100644 index 000000000..798c45290 --- /dev/null +++ b/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.h @@ -0,0 +1,26 @@ +// +// Created by PT +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMainMenuViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMainMenuViewController (DashPay) + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.m b/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.m new file mode 100644 index 000000000..3eb77931f --- /dev/null +++ b/DashPay/Presentation/Menu/DWMainMenuViewController+DashPay.m @@ -0,0 +1,39 @@ +// +// Created by PT +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMainMenuViewController+DashPay.h" +#import "DWRootEditProfileViewController.h" +#import "DWMainMenuContentView.h" + +@implementation DWMainMenuViewController (DashPay) + +#pragma mark - DWRootEditProfileViewControllerDelegate + +- (void)editProfileViewController:(DWRootEditProfileViewController *)controller + updateDisplayName:(NSString *)rawDisplayName + aboutMe:(NSString *)rawAboutMe + avatarURLString:(nullable NSString *)avatarURLString { + DWMainMenuContentView *view = (DWMainMenuContentView *) self.view; + [view.userModel.updateModel updateWithDisplayName:rawDisplayName aboutMe:rawAboutMe avatarURLString:avatarURLString]; + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)editProfileViewControllerDidCancel:(DWRootEditProfileViewController *)controller { + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.h b/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.h new file mode 100644 index 000000000..1a83f89e1 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWAvatarEditSelectorViewController; + +@protocol DWAvatarEditSelectorViewControllerDelegate + +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller photoButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller galleryButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller gravatarButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller urlButtonAction:(UIButton *)sender; + +@end + +@interface DWAvatarEditSelectorViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.m b/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.m new file mode 100644 index 000000000..a29502236 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Avatar/DWAvatarEditSelectorViewController.m @@ -0,0 +1,103 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarEditSelectorViewController.h" + +#import "DWAvatarEditSelectorContentView.h" +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarEditSelectorViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWAvatarEditSelectorViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _modalTransition = [[DWModalPopupTransition alloc] init]; + _modalTransition.appearanceStyle = DWModalPopupAppearanceStyle_Fullscreen; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognizerAction)]; + [self.view addGestureRecognizer:tapRecognizer]; + + DWAvatarEditSelectorContentView *contentView = [[DWAvatarEditSelectorContentView alloc] initWithFrame:CGRectZero]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.delegate = self; + [self.view addSubview:contentView]; + + UIView *overscroll = [[UIView alloc] init]; + overscroll.translatesAutoresizingMaskIntoConstraints = NO; + overscroll.backgroundColor = [UIColor dw_backgroundColor]; + [self.view addSubview:overscroll]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + + [overscroll.topAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-10], + [overscroll.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:overscroll.trailingAnchor], + [overscroll.heightAnchor constraintEqualToConstant:500], + ]]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)tapRecognizerAction { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWAvatarEditSelectorContentViewDelegate + +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view photoButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorViewController:self photoButtonAction:sender]; +} + +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view galleryButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorViewController:self galleryButtonAction:sender]; +} + +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view publicURLButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorViewController:self urlButtonAction:sender]; +} + +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view gravatarButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorViewController:self gravatarButtonAction:sender]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.h b/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.h new file mode 100644 index 000000000..24bf3b589 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWAvatarEditSelectorContentView; + +@protocol DWAvatarEditSelectorContentViewDelegate + +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view photoButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view galleryButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view publicURLButtonAction:(UIButton *)sender; +- (void)avatarEditSelectorContentView:(DWAvatarEditSelectorContentView *)view gravatarButtonAction:(UIButton *)sender; + +@end + +@interface DWAvatarEditSelectorContentView : UIView + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.m b/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.m new file mode 100644 index 000000000..1fa0824bb --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Avatar/Views/DWAvatarEditSelectorContentView.m @@ -0,0 +1,128 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarEditSelectorContentView.h" + +#import "DWPressableButton.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarEditSelectorContentView () + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWAvatarEditSelectorContentView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + self.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; + self.layer.cornerRadius = 8.0; + self.layer.masksToBounds = YES; + + UIButton *gravatarButton = [self.class button]; + [gravatarButton setImage:[UIImage imageNamed:@"dp_avatar_gravatar"] forState:UIControlStateNormal]; + [gravatarButton setTitle:@"Gravatar" forState:UIControlStateNormal]; + [gravatarButton addTarget:self action:@selector(gravatarButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIButton *urlButton = [self.class button]; + [urlButton setImage:[UIImage imageNamed:@"dp_avatar_url"] forState:UIControlStateNormal]; + [urlButton setTitle:NSLocalizedString(@"Public URL", nil) forState:UIControlStateNormal]; + [urlButton addTarget:self action:@selector(urlButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIButton *photoButton = [self.class button]; + [photoButton setImage:[UIImage imageNamed:@"dp_avatar_photo"] forState:UIControlStateNormal]; + [photoButton setTitle:NSLocalizedString(@"Take a Photo from Camera", nil) forState:UIControlStateNormal]; + [photoButton addTarget:self action:@selector(photoButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIButton *galleryButton = [self.class button]; + [galleryButton setImage:[UIImage imageNamed:@"dp_avatar_gallery"] forState:UIControlStateNormal]; + [galleryButton setTitle:NSLocalizedString(@"Select from Gallery", nil) forState:UIControlStateNormal]; + [galleryButton addTarget:self action:@selector(galleryButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIView *separator1 = [[UIView alloc] init]; + separator1.translatesAutoresizingMaskIntoConstraints = NO; + separator1.backgroundColor = [UIColor dw_separatorLineColor]; + + UIView *separator2 = [[UIView alloc] init]; + separator2.translatesAutoresizingMaskIntoConstraints = NO; + separator2.backgroundColor = [UIColor dw_separatorLineColor]; + + UIView *separator3 = [[UIView alloc] init]; + separator3.translatesAutoresizingMaskIntoConstraints = NO; + separator3.backgroundColor = [UIColor dw_separatorLineColor]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ gravatarButton, separator1, urlButton, separator2, photoButton, separator3, galleryButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + [self addSubview:stackView]; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [stackView.topAnchor constraintEqualToAnchor:self.topAnchor], + [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor + constant:padding], + [self.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor], + + [photoButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + [galleryButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + [gravatarButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + [urlButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + + [separator1.heightAnchor constraintEqualToConstant:1], + [separator2.heightAnchor constraintEqualToConstant:1], + [separator3.heightAnchor constraintEqualToConstant:1], + ]]; + } + return self; +} + +- (void)photoButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorContentView:self photoButtonAction:sender]; +} + +- (void)galleryButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorContentView:self galleryButtonAction:sender]; +} + +- (void)gravatarButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorContentView:self gravatarButtonAction:sender]; +} + +- (void)urlButtonAction:(UIButton *)sender { + [self.delegate avatarEditSelectorContentView:self publicURLButtonAction:sender]; +} + ++ (UIButton *)button { + DWPressableButton *button = [[DWPressableButton alloc] initWithFrame:CGRectZero]; + button.translatesAutoresizingMaskIntoConstraints = NO; + button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + button.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + button.adjustsImageWhenHighlighted = NO; + [button setTitleColor:[UIColor dw_darkTitleColor] forState:UIControlStateNormal]; + [button setInsetsForContentPadding:UIEdgeInsetsMake(20, 20, 20, 20) imageTitlePadding:30]; + return button; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.h b/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.h new file mode 100644 index 000000000..399c76cc6 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.h @@ -0,0 +1,47 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWCropAvatarViewController; + +@protocol DWCropAvatarViewControllerDelegate + +- (void)cropAvatarViewController:(DWCropAvatarViewController *)controller + didCropImage:(UIImage *)croppedImage + urlString:(NSString *)urlString; +- (void)cropAvatarViewControllerDidCancel:(DWCropAvatarViewController *)controller; + +@end + +@interface DWCropAvatarViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +- (instancetype)initWithImage:(UIImage *)image imageURL:(nullable NSURL *)imageURL; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithCoder:(nullable NSCoder *)coder NS_UNAVAILABLE; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil + bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.m b/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.m new file mode 100644 index 000000000..de2a81123 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWCropAvatarViewController.m @@ -0,0 +1,290 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWCropAvatarViewController.h" + +#import +#import + +#import "DWBaseActionButtonViewController.h" +#import "DWDPAvatarView.h" +#import "DWFaceDetector.h" +#import "DWImgurInfoViewController.h" +#import "DWUIKit.h" +#import "DWUploadAvatarViewController.h" +#import "dashwallet-Swift.h" + +@interface DWTOCropViewController : TOCropViewController +@end + +@implementation DWTOCropViewController + +- (CGRect)frameForToolbarWithVerticalLayout:(BOOL)verticalLayout { + return CGRectZero; +} + +- (CGRect)frameForCropViewWithVerticalLayout:(BOOL)verticalLayout { + return self.view.bounds; +} + +@end + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const PADDING = 38.0; + +@interface DWCropAvatarViewController () + +@property (nullable, nonatomic, strong) DWFaceDetector *faceDetector; + +@property (readonly, nonatomic, strong) TOCropViewController *cropController; +@property (null_resettable, nonatomic, strong) UILabel *titleLabel; +@property (null_resettable, nonatomic, strong) UIButton *selectButton; +@property (null_resettable, nonatomic, strong) UIButton *cancelButton; +@property (null_resettable, nonatomic, strong) UIStackView *buttonsStackView; + +@property (nullable, nonatomic, strong) NSURL *imageURL; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWCropAvatarViewController + +- (instancetype)initWithImage:(UIImage *)image imageURL:(NSURL *)imageURL { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _imageURL = imageURL; + + _cropController = [[DWTOCropViewController alloc] initWithCroppingStyle:TOCropViewCroppingStyleCircular + image:image]; + _cropController.hidesNavigationBar = YES; + _cropController.rotateClockwiseButtonHidden = YES; + _cropController.rotateButtonsHidden = YES; + _cropController.resetButtonHidden = YES; + _cropController.aspectRatioPickerButtonHidden = YES; + _cropController.doneButtonHidden = YES; + _cropController.cancelButtonHidden = YES; + _cropController.cropView.cropViewPadding = PADDING; + + if (image.CGImage) { + __weak typeof(self) weakSelf = self; + _faceDetector = + [[DWFaceDetector alloc] initWithImage:image + completion:^(CGRect roi) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (!CGRectEqualToRect(roi, CGRectZero)) { + strongSelf.cropController.imageCropFrame = roi; + } + + strongSelf.faceDetector = nil; + }]; + } + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self dw_embedChild:self.cropController]; + self.cropController.view.preservesSuperviewLayoutMargins = NO; + + [self.view addSubview:self.titleLabel]; + [self.view addSubview:self.buttonsStackView]; + + UILayoutGuide *marginsGuide = self.view.layoutMarginsGuide; + UILayoutGuide *safeAreaGuide = self.view.safeAreaLayoutGuide; + + const CGFloat bottomPadding = [DWCropAvatarViewController deviceSpecificBottomPadding]; + [NSLayoutConstraint activateConstraints:@[ + [self.titleLabel.topAnchor constraintEqualToAnchor:safeAreaGuide.topAnchor + constant:PADDING * 3], + [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor + constant:PADDING], + [self.view.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor + constant:PADDING], + + [safeAreaGuide.bottomAnchor constraintEqualToAnchor:self.buttonsStackView.bottomAnchor + constant:bottomPadding], + [self.buttonsStackView.leadingAnchor constraintEqualToAnchor:marginsGuide.leadingAnchor], + [self.buttonsStackView.trailingAnchor constraintEqualToAnchor:marginsGuide.trailingAnchor], + ]]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Actions + +- (void)selectButtonAction:(UIButton *)sender { + CGRect cropFrame = self.cropController.cropView.imageCropFrame; + NSInteger angle = self.cropController.cropView.angle; + UIImage *croppedImage = [self.cropController.image croppedImageWithFrame:cropFrame angle:angle circularClip:NO]; + + // external image + if (self.imageURL != nil) { + CGSize imageSize = self.cropController.image.size; + + CGRect rectOfInterest = CGRectMake(cropFrame.origin.x / imageSize.width, + cropFrame.origin.y / imageSize.height, + cropFrame.size.width / imageSize.width, + cropFrame.size.height / imageSize.height); + // dashpay-profile-pic-zoom=left,top,right,bottom + NSString *paramSpecifier = nil; + if ([NSURLComponents componentsWithURL:self.imageURL resolvingAgainstBaseURL:NO].queryItems.count > 0) { + paramSpecifier = @"&"; + } + else { + paramSpecifier = @"?"; + } + + NSString *parameter = [NSString stringWithFormat:@"%@%@=%f,%f,%f,%f", + paramSpecifier, + DPCropParameterName, + rectOfInterest.origin.x, // left, + rectOfInterest.origin.y, // top + rectOfInterest.origin.x + rectOfInterest.size.width, // right, + rectOfInterest.origin.y + rectOfInterest.size.height]; // bottom + + [self.delegate cropAvatarViewController:self + didCropImage:croppedImage + urlString:[self.imageURL.absoluteString stringByAppendingString:parameter]]; + + return; + } + + self.titleLabel.hidden = YES; + self.buttonsStackView.hidden = YES; + + DWImgurInfoViewController *controller = [[DWImgurInfoViewController alloc] init]; + controller.croppedImage = croppedImage; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (void)cancelButtonAction:(UIButton *)sender { + [self.delegate cropAvatarViewControllerDidCancel:self]; +} + +#pragma mark - DWImgurInfoViewControllerDelegate + +- (void)imgurInfoViewControllerDidAccept:(DWImgurInfoViewController *)controller { + UIImage *croppedImage = controller.croppedImage; + [controller + dismissViewControllerAnimated:YES + completion:^{ + if (croppedImage == nil) { + return; + } + + DWUploadAvatarViewController *controller = [[DWUploadAvatarViewController alloc] initWithImage:croppedImage]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; + }]; +} + +- (void)imgurInfoViewControllerDidCancel:(DWImgurInfoViewController *)controller { + self.titleLabel.hidden = NO; + self.buttonsStackView.hidden = NO; + + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWUploadAvatarViewControllerDelegate + +- (void)uploadAvatarViewControllerDidCancel:(DWUploadAvatarViewController *)controller { + self.titleLabel.hidden = NO; + self.buttonsStackView.hidden = NO; + + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)uploadAvatarViewController:(DWUploadAvatarViewController *)controller didFinishWithURLString:(NSString *)urlString { + UIImage *image = controller.image; + [controller dismissViewControllerAnimated:YES + completion:^{ + [self.delegate cropAvatarViewController:self didCropImage:image urlString:urlString]; + }]; +} + +#pragma mark - Private + +- (UILabel *)titleLabel { + if (_titleLabel == nil) { + UILabel *label = [[UILabel alloc] init]; + label.translatesAutoresizingMaskIntoConstraints = NO; + label.numberOfLines = 0; + label.textColor = [UIColor whiteColor]; + label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + label.text = NSLocalizedString(@"Move and Zoom your photo to find the perfect fit", nil); + label.lineBreakMode = NSLineBreakByWordWrapping; + label.textAlignment = NSTextAlignmentCenter; + _titleLabel = label; + } + return _titleLabel; +} + +- (UIButton *)selectButton { + if (_selectButton == nil) { + DWActionButton *button = [[DWActionButton alloc] init]; + button.translatesAutoresizingMaskIntoConstraints = NO; + [button setTitle:NSLocalizedString(@"Select", nil) forState:UIControlStateNormal]; + [button addTarget:self + action:@selector(selectButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + _selectButton = button; + } + return _selectButton; +} + +- (UIButton *)cancelButton { + if (_cancelButton == nil) { + PlainButton *button = [[PlainButton alloc] init]; + button.translatesAutoresizingMaskIntoConstraints = NO; + [button setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [button addTarget:self + action:@selector(cancelButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + _cancelButton = button; + } + return _cancelButton; +} + +- (UIStackView *)buttonsStackView { + if (_buttonsStackView == nil) { + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ self.selectButton, self.cancelButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.spacing = 8.0; + stackView.axis = UILayoutConstraintAxisVertical; + stackView.alignment = UIStackViewAlignmentFill; + + [NSLayoutConstraint activateConstraints:@[ + [self.selectButton.heightAnchor constraintEqualToConstant:DWBottomButtonHeight()], + [self.cancelButton.heightAnchor constraintEqualToConstant:DWBottomButtonHeight()], + ]]; + _buttonsStackView = stackView; + } + return _buttonsStackView; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.h b/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.h new file mode 100644 index 000000000..907c95b89 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.h @@ -0,0 +1,47 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSBlockchainIdentity; +@class DWEditProfileViewController; + +@protocol DWEditProfileViewControllerDelegate + +- (void)editProfileViewControllerDidUpdate:(DWEditProfileViewController *)controller; + +@end + +@interface DWEditProfileViewController : UITableViewController + +@property (nullable, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +@property (readonly, nonatomic, copy) NSString *displayName; +@property (readonly, nonatomic, copy) NSString *aboutMe; +@property (nullable, readonly, nonatomic, copy) NSString *avatarURLString; +@property (readonly, nonatomic, assign, getter=isValid) BOOL valid; + +@property (nullable, nonatomic, weak) id delegate; + +- (BOOL)hasChanges; +- (void)updateDisplayName:(NSString *)displayName aboutMe:(NSString *)aboutMe; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.m b/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.m new file mode 100644 index 000000000..495cdd73f --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWEditProfileViewController.m @@ -0,0 +1,381 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileViewController.h" + +#import + +#import "DSBlockchainIdentity+DWDisplayName.h" +#import "DWAvatarEditSelectorViewController.h" +#import "DWAvatarGravatarViewController.h" +#import "DWAvatarPublicURLViewController.h" +#import "DWCropAvatarViewController.h" +#import "DWEditProfileAvatarView.h" +#import "DWEditProfileTextFieldCell.h" +#import "DWEditProfileTextViewCell.h" +#import "DWEnvironment.h" +#import "DWProfileAboutCellModel.h" +#import "DWProfileDisplayNameCellModel.h" +#import "DWSharedUIConstants.h" +#import "DWTextInputFormTableViewCell.h" +#import "DWUIKit.h" +// if MOCK_DASHPAY +#import "DWDashPayConstants.h" +#import "DWGlobalOptions.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileViewController () + +@property (nullable, nonatomic, strong) DWEditProfileAvatarView *headerView; + +@property (nullable, nonatomic, copy) NSArray *items; +@property (nullable, nonatomic, strong) DWProfileDisplayNameCellModel *displayNameModel; +@property (nullable, nonatomic, strong) DWProfileAboutCellModel *aboutModel; +@property (nullable, nonatomic, copy) NSString *unsavedAvatarURL; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWEditProfileViewController + +- (instancetype)init { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + } + return self; +} + +- (BOOL)hasChanges { + if (![self.displayName isEqualToString:[self.blockchainIdentity dw_displayNameOrUsername]]) { + return YES; + } + + if (self.aboutMe && ![self.aboutMe isEqualToString:self.blockchainIdentity.matchingDashpayUserInViewContext.publicMessage]) { + return YES; + } + + if (self.unsavedAvatarURL != nil) { + return YES; + } + + return NO; +} + +- (NSString *)displayName { + return self.displayNameModel.text; +} + +- (NSString *)aboutMe { + return self.aboutModel.text; +} + +- (NSString *)avatarURLString { + return self.unsavedAvatarURL ?: self.blockchainIdentity.avatarPath; +} + +- (BOOL)isValid { + return [self.aboutModel postValidate].isErrored == NO && [self.displayNameModel postValidate].isErrored == NO; +} + +- (void)updateDisplayName:(NSString *)displayName aboutMe:(NSString *)aboutMe { + self.displayNameModel.text = displayName; + self.aboutModel.text = aboutMe; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + self.blockchainIdentity = [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; + + if (MOCK_DASHPAY && self.blockchainIdentity == nil) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + self.blockchainIdentity = [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + NSParameterAssert(self.blockchainIdentity); + + [self setupItems]; + [self setupView]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + UIView *tableHeaderView = self.tableView.tableHeaderView; + if (tableHeaderView) { + CGSize headerSize = [tableHeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; + if (CGRectGetHeight(tableHeaderView.frame) != headerSize.height) { + tableHeaderView.frame = CGRectMake(0.0, 0.0, headerSize.width, headerSize.height); + self.tableView.tableHeaderView = tableHeaderView; + } + } +} + +#pragma mark - Private + +- (void)setupView { + self.headerView = [[DWEditProfileAvatarView alloc] initWithFrame:CGRectZero]; + self.headerView.delegate = self; + [self.headerView setImageWithBlockchainIdentity:self.blockchainIdentity]; + + self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; + self.tableView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 60.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.tableFooterView = [[UIView alloc] init]; + self.tableView.tableHeaderView = self.headerView; + + NSArray *cellClasses = @[ + DWEditProfileTextViewCell.class, + DWEditProfileTextFieldCell.class, + ]; + for (Class cellClass in cellClasses) { + [self.tableView registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; + } +} + +- (void)setupItems { + NSMutableArray *items = [NSMutableArray array]; + + { + DWProfileDisplayNameCellModel *cellModel = [[DWProfileDisplayNameCellModel alloc] initWithTitle:NSLocalizedString(@"Display Name", nil)]; + self.displayNameModel = cellModel; + cellModel.autocorrectionType = UITextAutocorrectionTypeNo; + cellModel.returnKeyType = UIReturnKeyNext; + cellModel.text = [self.blockchainIdentity dw_displayNameOrUsername]; + __weak typeof(self) weakSelf = self; + cellModel.didChangeValueBlock = ^(DWTextFieldFormCellModel *_Nonnull cellModel) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf.delegate editProfileViewControllerDidUpdate:strongSelf]; + }; + [items addObject:cellModel]; + } + + { + DWProfileAboutCellModel *cellModel = [[DWProfileAboutCellModel alloc] initWithTitle:NSLocalizedString(@"About me", nil)]; + self.aboutModel = cellModel; + cellModel.text = self.blockchainIdentity.matchingDashpayUserInViewContext.publicMessage; + __weak typeof(self) weakSelf = self; + cellModel.didChangeValueBlock = ^(DWTextFieldFormCellModel *_Nonnull cellModel) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf.delegate editProfileViewControllerDidUpdate:strongSelf]; + }; + [items addObject:cellModel]; + } + + self.items = items; +} + +#pragma mark - UITableView + +- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWBaseFormCellModel *cellModel = self.items[indexPath.row]; + + if ([cellModel isKindOfClass:DWTextViewFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWEditProfileTextViewCell.class); + DWEditProfileTextViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWTextViewFormCellModel *)cellModel; + return cell; + } + else if ([cellModel isKindOfClass:DWTextFieldFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWEditProfileTextFieldCell.class); + DWEditProfileTextFieldCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWTextFieldFormCellModel *)cellModel; + cell.delegate = self; + return cell; + } + else { + NSAssert(NO, @"Unknown cell model %@", cellModel); + return [UITableViewCell new]; + } +} + +- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + UIView *view = [[UIView alloc] init]; + return view; +} + +#pragma mark - DWEditProfileAvatarViewDelegate + +- (void)editProfileAvatarView:(DWEditProfileAvatarView *)view editAvatarAction:(UIButton *)sender { + DWAvatarEditSelectorViewController *controller = [[DWAvatarEditSelectorViewController alloc] init]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +#pragma mark - DWAvatarEditSelectorViewControllerDelegate + +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller photoButtonAction:(UIButton *)sender { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self showImagePickerWithType:UIImagePickerControllerSourceTypeCamera]; + }]; +} + +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller galleryButtonAction:(UIButton *)sender { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self showImagePickerWithType:UIImagePickerControllerSourceTypePhotoLibrary]; + }]; +} + +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller gravatarButtonAction:(UIButton *)sender { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self showGravatarSource]; + }]; +} + +- (void)avatarEditSelectorViewController:(DWAvatarEditSelectorViewController *)controller urlButtonAction:(UIButton *)sender { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self showPublicURLSource]; + }]; +} + +#pragma mark - UIImagePickerControllerDelegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + UIImage *image = info[UIImagePickerControllerOriginalImage]; + [picker dismissViewControllerAnimated:YES + completion:^{ + if (image == nil) { + return; + } + + DWCropAvatarViewController *cropController = [[DWCropAvatarViewController alloc] initWithImage:image imageURL:nil]; + cropController.delegate = self; + cropController.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:cropController animated:YES completion:nil]; + }]; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWCropAvatarViewControllerDelegate + +- (void)cropAvatarViewController:(DWCropAvatarViewController *)controller + didCropImage:(UIImage *)croppedImage + urlString:(NSString *)urlString { + self.headerView.image = croppedImage; + self.unsavedAvatarURL = urlString; + + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)cropAvatarViewControllerDidCancel:(DWCropAvatarViewController *)controller { + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWTextInputFormTableViewCell + +- (void)editProfileTextFieldCellActivateNextFirstResponder:(DWEditProfileTextFieldCell *)cell { + DWTextFieldFormCellModel *cellModel = cell.cellModel; + NSParameterAssert((cellModel.returnKeyType == UIReturnKeyNext)); + NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; + if (!indexPath) { + return; + } + + for (NSUInteger i = indexPath.row + 1; i < self.items.count; i++) { + DWBaseFormCellModel *cellModel = self.items[i]; + if ([cellModel isKindOfClass:DWTextFieldFormCellModel.class]) { + NSIndexPath *nextIndexPath = [NSIndexPath indexPathForRow:i inSection:0]; + id cell = [self.tableView cellForRowAtIndexPath:nextIndexPath]; + if ([cell conformsToProtocol:@protocol(DWTextInputFormTableViewCell)]) { + [cell textInputBecomeFirstResponder]; + } + else { + NSAssert(NO, @"Invalid cell class for TextFieldFormCellModel"); + } + + return; // we're done + } + } +} + +#pragma mark - DWExternalSourceViewControllerDelegate + +- (void)externalSourceViewController:(DWExternalSourceViewController *)controller didLoadImage:(UIImage *)image url:(NSURL *)url shouldCrop:(BOOL)shouldCrop { + if (!shouldCrop) { + self.headerView.image = image; + self.unsavedAvatarURL = url.absoluteString; + [controller dismissViewControllerAnimated:YES completion:nil]; + } + else { + [controller dismissViewControllerAnimated:YES + completion:^{ + DWCropAvatarViewController *cropController = [[DWCropAvatarViewController alloc] initWithImage:image imageURL:url]; + cropController.delegate = self; + cropController.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:cropController animated:YES completion:nil]; + }]; + } +} + +#pragma mark - Private + +- (void)showPublicURLSource { + DWAvatarPublicURLViewController *controller = [[DWAvatarPublicURLViewController alloc] init]; + controller.delegate = self; + [controller setCurrentInput:[self avatarURLString]]; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (void)showGravatarSource { + DWAvatarGravatarViewController *controller = [[DWAvatarGravatarViewController alloc] init]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (void)showImagePickerWithType:(UIImagePickerControllerSourceType)sourceType { + if (![UIImagePickerController isSourceTypeAvailable:sourceType]) { + return; + } + + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.sourceType = sourceType; + picker.mediaTypes = @[ (id)kUTTypeImage ]; + [self presentViewController:picker animated:YES completion:nil]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.h b/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.h new file mode 100644 index 000000000..7c13b95e8 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.h @@ -0,0 +1,42 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButtonViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWRootEditProfileViewController; + +@protocol DWRootEditProfileViewControllerDelegate + +- (void)editProfileViewController:(DWRootEditProfileViewController *)controller + updateDisplayName:(NSString *)rawDisplayName + aboutMe:(NSString *)rawAboutMe + avatarURLString:(nullable NSString *)avatarURLString; + +- (void)editProfileViewControllerDidCancel:(DWRootEditProfileViewController *)controller; + +@end + + +@interface DWRootEditProfileViewController : DWBaseActionButtonViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.m b/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.m new file mode 100644 index 000000000..f3b45ee94 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/DWRootEditProfileViewController.m @@ -0,0 +1,117 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWRootEditProfileViewController.h" + +#import "DWEditProfileViewController.h" +#import "DWEnvironment.h" +#import "DWSaveAlertViewController.h" +#import "UIViewController+DWEmbedding.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWRootEditProfileViewController () + +@property (nonatomic, strong) DWEditProfileViewController *editController; +@property (readonly, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWRootEditProfileViewController + +- (NSString *)actionButtonTitle { + return NSLocalizedString(@"Save", nil); +} + +- (DSBlockchainIdentity *)blockchainIdentity { + return self.editController.blockchainIdentity; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = NSLocalizedString(@"Edit Profile", nil); + + UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel + target:self + action:@selector(cancelButtonAction)]; + self.navigationItem.leftBarButtonItem = cancel; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self setupContentView:contentView]; + + self.editController = [[DWEditProfileViewController alloc] init]; + self.editController.delegate = self; + [self dw_embedChild:self.editController inContainer:contentView]; + + [self editProfileViewControllerDidUpdate:self.editController]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)performSave { + [self.delegate editProfileViewController:self + updateDisplayName:self.editController.displayName + aboutMe:self.editController.aboutMe + avatarURLString:self.editController.avatarURLString]; +} + +#pragma mark - DWEditProfileViewControllerDelegate + +- (void)editProfileViewControllerDidUpdate:(DWEditProfileViewController *)controller { + self.actionButton.enabled = controller.isValid; +} + +#pragma mark - DWSaveAlertViewController + +- (void)saveAlertViewControllerCancelAction:(DWSaveAlertViewController *)controller { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self.delegate editProfileViewControllerDidCancel:self]; + }]; +} + +- (void)saveAlertViewControllerOKAction:(DWSaveAlertViewController *)controller { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self performSave]; + }]; +} + +#pragma mark - Actions + +- (void)cancelButtonAction { + if ([self.editController hasChanges]) { + DWSaveAlertViewController *saveAlert = [[DWSaveAlertViewController alloc] init]; + saveAlert.delegate = self; + [self presentViewController:saveAlert animated:YES completion:nil]; + } + else { + [self.delegate editProfileViewControllerDidCancel:self]; + } +} + +- (void)actionButtonAction:(id)sender { + [self performSave]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.h b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.h new file mode 100644 index 000000000..07d6b5408 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWExternalSourceViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarGravatarViewController : DWExternalSourceViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.m b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.m new file mode 100644 index 000000000..ad08db07f --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarGravatarViewController.m @@ -0,0 +1,120 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarGravatarViewController.h" + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarGravatarViewController () + +@property (nullable, weak, nonatomic) SDWebImageDownloadToken *token; + +@end + +NS_ASSUME_NONNULL_END + +@implementation NSString (MD5Gravatar) + +- (NSString *)dw_MD5String { + const char *cStr = [self UTF8String]; + unsigned char result[CC_MD5_DIGEST_LENGTH]; + CC_MD5(cStr, (CC_LONG)strlen(cStr), result); + + return [NSString stringWithFormat: + @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", + result[0], result[1], result[2], result[3], + result[4], result[5], result[6], result[7], + result[8], result[9], result[10], result[11], + result[12], result[13], result[14], result[15]]; +} + +@end + +@implementation DWAvatarGravatarViewController + +- (DWAvatarExternalSourceConfig *)config { + DWAvatarExternalSourceConfig *config = [[DWAvatarExternalSourceConfig alloc] init]; + config.icon = [UIImage imageNamed:@"ava_gravatar"]; + config.title = @"Gravatar"; + config.subtitle = NSLocalizedString(@"Enter your Gravatar Email ID", nil); + config.desc = NSLocalizedString(@"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded.", nil); + config.keyboardType = UIKeyboardTypeEmailAddress; + config.placeholder = @"example@email.com"; + return config; +} + + +- (BOOL)isInputValid:(NSString *)input { + NSString *trimmed = [input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + BOOL valid = trimmed.length > 0 && [self validateEmailWithString:trimmed]; + if (valid) { + return YES; + } + else { + [self showError:NSLocalizedString(@"Please enter a valid gravatar email ID.", nil)]; + return NO; + } +} + +- (void)performLoad:(NSString *)email { + [self showLoadingView]; + + NSString *trimmed = [email stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + // fetch size 200px (s=200) and fail if not found (d=404) + NSString *urlString = [NSString stringWithFormat:@"https://www.gravatar.com/avatar/%@?s=200&d=404", + [[trimmed dw_MD5String] lowercaseString]]; + NSURL *url = [NSURL URLWithString:urlString]; + + __weak typeof(self) weakSelf = self; + self.token = [[SDWebImageDownloader sharedDownloader] + downloadImageWithURL:url + options:SDWebImageDownloaderUseNSURLCache + progress:nil + completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image && finished) { + [strongSelf.delegate externalSourceViewController:self didLoadImage:image url:url shouldCrop:NO]; + } + else { + [strongSelf showError:NSLocalizedString(@"Unable to fetch your Gravatar. Please enter a valid gravatar email ID.", nil)]; + } + }]; +} + +- (void)cancelLoading { + [self.token cancel]; + self.token = nil; + + [self showDefaultSubtitle]; +} + +- (BOOL)validateEmailWithString:(NSString *)email { + NSString *emailRegex = @"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$"; + NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; + return [emailTest evaluateWithObject:email]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.h b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.h new file mode 100644 index 000000000..254ed9715 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWExternalSourceViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarPublicURLViewController : DWExternalSourceViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.m b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.m new file mode 100644 index 000000000..b9704c3c2 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/DWAvatarPublicURLViewController.m @@ -0,0 +1,128 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarPublicURLViewController.h" + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarPublicURLViewController () + +@property (nullable, weak, nonatomic) SDWebImageDownloadToken *token; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWAvatarPublicURLViewController + +- (DWAvatarExternalSourceConfig *)config { + DWAvatarExternalSourceConfig *config = [[DWAvatarExternalSourceConfig alloc] init]; + config.icon = [UIImage imageNamed:@"ava_puburl"]; + config.title = NSLocalizedString(@"Public URL", nil); + config.subtitle = NSLocalizedString(@"Paste your image URL", nil); + config.desc = NSLocalizedString(@"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network.", nil); + config.keyboardType = UIKeyboardTypeURL; + return config; +} + +- (BOOL)isInputValid:(NSString *)input { + NSString *trimmed = [input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + if (trimmed.length == 0) { + [self showError:NSLocalizedString(@"Please enter a valid image URL.", nil)]; + return NO; + } + + const NSUInteger maxLength = 256; + if (trimmed.length > maxLength) { + [self showError:[NSString stringWithFormat:NSLocalizedString(@"Image URL can't be longer than %ld characters.", nil), maxLength]]; + return NO; + } + + // regex to check valid url is too complicated, do a dumb check + NSURL *url = [NSURL URLWithString:trimmed]; + if (url) { + return YES; + } + else { + [self showError:NSLocalizedString(@"Please enter a valid image URL.", nil)]; + return NO; + } +} + +- (void)performLoad:(NSString *)urlString { + [self showLoadingView]; + + NSURL *url = [self convertedURLString:urlString]; + + __weak typeof(self) weakSelf = self; + self.token = [[SDWebImageDownloader sharedDownloader] + downloadImageWithURL:url + options:SDWebImageDownloaderUseNSURLCache + progress:nil + completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image && finished) { + [strongSelf.delegate externalSourceViewController:self didLoadImage:image url:url shouldCrop:YES]; + } + else { + [strongSelf showError:NSLocalizedString(@"Unable to fetch image. Please enter a valid image URL or check your connection.", nil)]; + } + }]; +} + +- (void)cancelLoading { + [self.token cancel]; + self.token = nil; + + [self showDefaultSubtitle]; +} + +- (NSURL *)convertedURLString:(NSString *)urlString { + NSString *trimmed = [urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + // https://drive.google.com/file/d/12rhWM7_wIXwDcFfsANkVGa0ArrbnhrMN/view?usp=sharing + NSString *googlePrefix = @"https://drive.google.com/file/d/"; + if ([trimmed hasPrefix:googlePrefix]) { + NSString *rest = [trimmed stringByReplacingOccurrencesOfString:googlePrefix withString:@""]; + NSRange range = [rest rangeOfString:@"/"]; + if (range.location != NSNotFound) { + NSString *googleID = [rest substringToIndex:range.location]; + NSString *resultFormat = [NSString stringWithFormat:@"https://drive.google.com/uc?export=view&id=%@", + googleID]; + return [NSURL URLWithString:resultFormat]; + } + } + + // https://www.dropbox.com/s/2ldd9fjk02yvyv1/IMG_20201103_220114.jpg?dl=0 + NSString *dropboxPrefix = @"https://www.dropbox.com/s/"; + if ([trimmed hasPrefix:dropboxPrefix]) { + NSString *result = [trimmed stringByReplacingOccurrencesOfString:dropboxPrefix + withString:@"https://dl.dropboxusercontent.com/s/"]; + return [NSURL URLWithString:result]; + } + + return [NSURL URLWithString:trimmed]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.h b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.h new file mode 100644 index 000000000..9d97975f5 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.h @@ -0,0 +1,53 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWAvatarExternalSourceConfig.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWExternalSourceViewController; + +@protocol DWExternalSourceViewControllerDelegate + +- (void)externalSourceViewController:(DWExternalSourceViewController *)controller + didLoadImage:(UIImage *)image + url:(NSURL *)url + shouldCrop:(BOOL)shouldCrop; + +@end + +@interface DWExternalSourceViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +- (void)setCurrentInput:(NSString *)input; + +- (DWAvatarExternalSourceConfig *)config; + +- (void)performLoad:(NSString *)urlString; +- (BOOL)isInputValid:(NSString *)input; + +- (void)showError:(NSString *)error; +- (void)showDefaultSubtitle; +- (void)showLoadingView; +- (void)cancelLoading; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.m b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.m new file mode 100644 index 000000000..0983624f7 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/DWExternalSourceViewController.m @@ -0,0 +1,185 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWExternalSourceViewController.h" + +#import + +#import "DWAvatarExternalLoadingView.h" +#import "DWAvatarExternalSourceView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWExternalSourceViewController () + +@property (nonatomic, strong) UIView *contentView; +@property (nonatomic, strong) DWAvatarExternalSourceView *sourceView; +@property (nonatomic, strong) NSLayoutConstraint *centerYConstraint; +@property (nonatomic, strong) DWAvatarExternalLoadingView *loadingView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWExternalSourceViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + self.sourceView = [[DWAvatarExternalSourceView alloc] init]; + } + return self; +} + +- (void)setCurrentInput:(NSString *)input { + self.sourceView.input = input; +} + +- (DWAvatarExternalSourceConfig *)config { + DWAvatarExternalSourceConfig *config = [[DWAvatarExternalSourceConfig alloc] init]; + return config; +} + +- (void)performLoad:(NSString *)url { +} + +- (void)cancelButton { +} + +- (BOOL)isInputValid:(NSString *)input { + return YES; +} + +- (void)showError:(NSString *)error { + self.sourceView.hidden = NO; + self.loadingView.hidden = YES; + [self.sourceView showError:error]; +} + +- (void)showDefaultSubtitle { + self.sourceView.hidden = NO; + self.loadingView.hidden = YES; + [self.sourceView showSubtitle]; +} + +- (void)showLoadingView { + self.loadingView.hidden = NO; + self.sourceView.hidden = YES; +} + +- (void)cancelLoading { +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + [self.view addSubview:contentView]; + self.contentView = contentView; + + self.sourceView.translatesAutoresizingMaskIntoConstraints = NO; + self.sourceView.config = self.config; + self.sourceView.delegate = self; + [contentView addSubview:self.sourceView]; + + DWAvatarExternalLoadingView *loadingView = [[DWAvatarExternalLoadingView alloc] init]; + loadingView.translatesAutoresizingMaskIntoConstraints = NO; + loadingView.delegate = self; + loadingView.hidden = YES; + [contentView addSubview:loadingView]; + self.loadingView = loadingView; + + self.centerYConstraint = [contentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor]; + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + self.centerYConstraint, + + [self.sourceView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:32.0], + [self.sourceView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [self.sourceView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:self.sourceView.bottomAnchor + constant:32.0], + + [loadingView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [loadingView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [loadingView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + ]]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // pre-layout view to avoid undesired animation if the keyboard is shown while appearing + [self.view layoutIfNeeded]; + [self ka_startObservingKeyboardNotifications]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + [self ka_stopObservingKeyboardNotifications]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + [self.sourceView activateTextField]; +} + +#pragma mark - Keyboard + +- (void)ka_keyboardShowOrHideAnimationWithHeight:(CGFloat)height + animationDuration:(NSTimeInterval)animationDuration + animationCurve:(UIViewAnimationCurve)animationCurve { + if (height == 0) { + self.centerYConstraint.constant = 0; + } + else { + self.centerYConstraint.constant = -(CGRectGetHeight(self.view.bounds) - CGRectGetHeight(self.contentView.bounds)) / 2.0; + } + [self.view layoutIfNeeded]; +} + +#pragma mark - DWAvatarExternalSourceViewDelegate + +- (void)avatarExternalSourceViewOKAction:(DWAvatarExternalSourceView *)view { + if ([self isInputValid:view.input]) { + [self.view endEditing:YES]; + [self performLoad:view.input]; + } +} + +- (void)avatarExternalSourceViewCancelAction:(DWAvatarExternalSourceView *)view { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWAvatarExternalLoadingViewDelegate + +- (void)avatarExternalLoadingViewCancelAction:(DWAvatarExternalLoadingView *)view { + [self cancelLoading]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.h b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.h new file mode 100644 index 000000000..ab890f9ac --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.h @@ -0,0 +1,36 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWAvatarExternalLoadingView; + +@protocol DWAvatarExternalLoadingViewDelegate + +- (void)avatarExternalLoadingViewCancelAction:(DWAvatarExternalLoadingView *)view; + +@end + +@interface DWAvatarExternalLoadingView : UIView + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.m b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.m new file mode 100644 index 000000000..96bab4126 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalLoadingView.m @@ -0,0 +1,121 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarExternalLoadingView.h" + +#import "dashwallet-Swift.h" +#import "DWHourGlassAnimationView.h" +#import "DWUIKit.h" + + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const ButtonHeight = 39.0; + +@interface DWAvatarExternalLoadingView () + +@property (readonly, nonatomic, strong) DWHourGlassAnimationView *animationView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWAvatarExternalLoadingView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + const CGFloat circleSize = 86.0; + + UIView *bgView = [[UIView alloc] init]; + bgView.translatesAutoresizingMaskIntoConstraints = NO; + bgView.backgroundColor = [UIColor colorWithRed:1.0 green:232.0 / 255.0 blue:194.0 / 255.0 alpha:1.0]; + bgView.layer.cornerRadius = circleSize / 2.0; + bgView.layer.masksToBounds = YES; + [self addSubview:bgView]; + + DWHourGlassAnimationView *animationView = [[DWHourGlassAnimationView alloc] initWithFrame:CGRectZero]; + animationView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:animationView]; + _animationView = animationView; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.numberOfLines = 0; + subtitleLabel.textAlignment = NSTextAlignmentCenter; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + subtitleLabel.textColor = [UIColor dw_darkTitleColor]; + subtitleLabel.text = NSLocalizedString(@"Fetching Image", nil); + [self addSubview:subtitleLabel]; + + PlainButton *cancelButton = [[PlainButton alloc] init]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:cancelButton]; + + [NSLayoutConstraint activateConstraints:@[ + [bgView.topAnchor constraintEqualToAnchor:self.topAnchor], + [bgView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [bgView.widthAnchor constraintEqualToConstant:circleSize], + [bgView.heightAnchor constraintEqualToConstant:circleSize], + + [animationView.centerXAnchor constraintEqualToAnchor:bgView.centerXAnchor], + [animationView.centerYAnchor constraintEqualToAnchor:bgView.centerYAnchor], + + [subtitleLabel.topAnchor constraintEqualToAnchor:bgView.bottomAnchor + constant:16.0], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor + constant:8.0], + + [cancelButton.topAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor + constant:56.0], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [self.bottomAnchor constraintEqualToAnchor:cancelButton.bottomAnchor], + ]]; + } + return self; +} + +- (void)cancelButtonAction { + [self.delegate avatarExternalLoadingViewCancelAction:self]; +} + +- (void)willMoveToWindow:(nullable UIWindow *)newWindow { + [super willMoveToWindow:newWindow]; + + if (newWindow == nil) { + [self.animationView stopAnimating]; + } +} + +- (void)didMoveToWindow { + [super didMoveToWindow]; + + if (self.window) { + [self.animationView startAnimating]; + } +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.h b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.h new file mode 100644 index 000000000..c3313f11d --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.h @@ -0,0 +1,34 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWAvatarExternalSourceConfig : NSObject + +@property (nonatomic, copy) NSString *title; +@property (nonatomic, strong) UIImage *icon; +@property (nonatomic, copy) NSString *subtitle; +@property (nonatomic, copy) NSString *desc; + +@property (nullable, nonatomic, copy) NSString *placeholder; +@property (nonatomic, assign) UIKeyboardType keyboardType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.m b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.m new file mode 100644 index 000000000..cc38e7e69 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceConfig.m @@ -0,0 +1,22 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarExternalSourceConfig.h" + +@implementation DWAvatarExternalSourceConfig + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.h b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.h new file mode 100644 index 000000000..af8ac60f5 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.h @@ -0,0 +1,48 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWAvatarExternalSourceConfig.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWAvatarExternalSourceView; + +@protocol DWAvatarExternalSourceViewDelegate + +- (void)avatarExternalSourceViewOKAction:(DWAvatarExternalSourceView *)view; +- (void)avatarExternalSourceViewCancelAction:(DWAvatarExternalSourceView *)view; + +@end + +@interface DWAvatarExternalSourceView : UIView + +@property (nullable, nonatomic, copy) NSString *input; + +@property (nullable, nonatomic, strong) DWAvatarExternalSourceConfig *config; + +@property (nullable, nonatomic, weak) id delegate; + +- (void)showError:(NSString *)error; +- (void)showSubtitle; + +- (void)activateTextField; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.m b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.m new file mode 100644 index 000000000..5097da381 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/External Sources/Skeleton/Views/DWAvatarExternalSourceView.m @@ -0,0 +1,233 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWAvatarExternalSourceView.h" + +#import "dashwallet-Swift.h" +#import "DWBorderedActionButton.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGSize const IconSize = {24.0, 24.0}; +static CGFloat const ButtonHeight = 39.0; + +@interface DWAvatarExternalSourceView () + +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *subtitleLabel; +@property (readonly, nonatomic, strong) UITextField *textField; +@property (readonly, nonatomic, strong) UILabel *descLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWAvatarExternalSourceView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + UIImageView *iconImageView = [[UIImageView alloc] init]; + iconImageView.translatesAutoresizingMaskIntoConstraints = NO; + iconImageView.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:iconImageView]; + _iconImageView = iconImageView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + [self addSubview:titleLabel]; + _titleLabel = titleLabel; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.numberOfLines = 0; + subtitleLabel.textAlignment = NSTextAlignmentCenter; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + subtitleLabel.textColor = [UIColor dw_secondaryTextColor]; + [self addSubview:subtitleLabel]; + _subtitleLabel = subtitleLabel; + + UITextField *textField = [[UITextField alloc] init]; + textField.translatesAutoresizingMaskIntoConstraints = NO; + textField.delegate = self; + textField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + textField.textColor = [UIColor dw_darkTitleColor]; + textField.layer.borderColor = [UIColor dw_separatorLineColor].CGColor; + textField.layer.cornerRadius = 8.0; + textField.layer.masksToBounds = YES; + textField.layer.borderWidth = 1.0; + textField.textAlignment = NSTextAlignmentCenter; + textField.autocorrectionType = UITextAutocorrectionTypeNo; + textField.autocapitalizationType = UITextAutocapitalizationTypeNone; + textField.clearButtonMode = UITextFieldViewModeWhileEditing; + [self addSubview:textField]; + _textField = textField; + + UILabel *descLabel = [[UILabel alloc] init]; + descLabel.translatesAutoresizingMaskIntoConstraints = NO; + descLabel.numberOfLines = 0; + descLabel.textAlignment = NSTextAlignmentCenter; + descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; + descLabel.textColor = [UIColor dw_secondaryTextColor]; + [self addSubview:descLabel]; + _descLabel = descLabel; + + DWActionButton *okButton = [[DWActionButton alloc] init]; + okButton.translatesAutoresizingMaskIntoConstraints = NO; + [okButton setTitle:NSLocalizedString(@"OK", nil) forState:UIControlStateNormal]; + [okButton addTarget:self + action:@selector(okButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + DWBorderedActionButton *cancelButton = [[DWBorderedActionButton alloc] initWithFrame:CGRectZero]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ okButton, cancelButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisHorizontal; + stackView.distribution = UIStackViewDistributionFillEqually; + stackView.spacing = 8.0; + stackView.alignment = UIStackViewAlignmentCenter; + [self addSubview:stackView]; + + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 forAxis:UILayoutConstraintAxisVertical]; + [subtitleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 forAxis:UILayoutConstraintAxisVertical]; + [descLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 3 forAxis:UILayoutConstraintAxisVertical]; + + + [NSLayoutConstraint activateConstraints:@[ + [iconImageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [iconImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [iconImageView.widthAnchor constraintEqualToConstant:IconSize.width], + [iconImageView.heightAnchor constraintEqualToConstant:IconSize.height], + + [titleLabel.topAnchor constraintEqualToAnchor:iconImageView.bottomAnchor + constant:8.0], + [titleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:8.0], + + [subtitleLabel.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:16.0], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor + constant:8.0], + + [textField.topAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor + constant:16.0], + [textField.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:16.0], + [self.trailingAnchor constraintEqualToAnchor:textField.trailingAnchor + constant:16.0], + [textField.heightAnchor constraintEqualToConstant:52.0], + + [descLabel.topAnchor constraintEqualToAnchor:textField.bottomAnchor + constant:16.0], + [descLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:descLabel.trailingAnchor + constant:8.0], + + [stackView.topAnchor constraintEqualToAnchor:descLabel.bottomAnchor + constant:56.0], + [stackView.leadingAnchor constraintGreaterThanOrEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintGreaterThanOrEqualToAnchor:stackView.trailingAnchor + constant:8.0], + [self.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor], + [stackView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [okButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [stackView.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + } + return self; +} + +- (NSString *)input { + return self.textField.text; +} + +- (void)setInput:(NSString *)input { + self.textField.text = input; +} + +- (void)setConfig:(DWAvatarExternalSourceConfig *)config { + _config = config; + + self.iconImageView.image = config.icon; + self.titleLabel.text = config.title; + self.subtitleLabel.text = config.subtitle; + self.descLabel.text = config.desc; + self.textField.placeholder = config.placeholder; + self.textField.keyboardType = config.keyboardType; +} + +- (void)showError:(NSString *)error { + self.subtitleLabel.text = error; + self.subtitleLabel.textColor = [UIColor dw_redColor]; +} + +- (void)showSubtitle { + self.subtitleLabel.text = self.config.subtitle; + self.subtitleLabel.textColor = [UIColor dw_secondaryTextColor]; +} + +- (void)activateTextField { + [self.textField becomeFirstResponder]; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + self.textField.layer.borderColor = [UIColor dw_separatorLineColor].CGColor; +} + +- (void)okButtonAction { + [self.delegate avatarExternalSourceViewOKAction:self]; +} + +- (void)cancelButtonAction { + [self.delegate avatarExternalSourceViewCancelAction:self]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { + [self showSubtitle]; // reset error + return YES; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.h b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.h new file mode 100644 index 000000000..7a5f03ad2 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWImgurInfoChildView; + +@protocol DWImgurInfoChildViewDelegate + +- (void)imgurInfoChildViewAcceptAction:(DWImgurInfoChildView *)view; +- (void)imgurInfoChildViewCancelAction:(DWImgurInfoChildView *)view; + +@end + +@interface DWImgurInfoChildView : UIView + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.m b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.m new file mode 100644 index 000000000..6634cd82a --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoChildView.m @@ -0,0 +1,156 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWImgurInfoChildView.h" + +#import "dashwallet-Swift.h" +#import "DWBorderedActionButton.h" +#import "DWImgurItemView.h" +#import "DWUIKit.h" + +static CGFloat const ViewCornerRadius = 8.0; +static CGFloat const ButtonHeight = 39.0; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWImgurInfoChildView () + +@property (nonatomic, strong) DWImgurItemView *item1; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWImgurInfoChildView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + self.layer.cornerRadius = ViewCornerRadius; + self.layer.masksToBounds = YES; + + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle2]; + title.textColor = [UIColor dw_darkTitleColor]; + title.text = NSLocalizedString(@"Images Privacy Policy", nil); + title.textAlignment = NSTextAlignmentCenter; + [self addSubview:title]; + + DWImgurItemView *item1 = [[DWImgurItemView alloc] init]; + item1.translatesAutoresizingMaskIntoConstraints = NO; + _item1 = item1; + + DWImgurItemView *item2 = [[DWImgurItemView alloc] init]; + item2.translatesAutoresizingMaskIntoConstraints = NO; + item2.text = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Image uploaded can be viewed publicly by anyone.", nil)]; + + DWImgurItemView *item3 = [[DWImgurItemView alloc] init]; + item3.translatesAutoresizingMaskIntoConstraints = NO; + item3.text = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"You can always delete the image uploaded, as long as you have access to this wallet.", nil)]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ item1, item2, item3 ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + stackView.spacing = 20.0; + [self addSubview:stackView]; + + DWActionButton *okButton = [[DWActionButton alloc] init]; + okButton.translatesAutoresizingMaskIntoConstraints = NO; + [okButton setTitle:NSLocalizedString(@"Agree", nil) forState:UIControlStateNormal]; + [okButton addTarget:self + action:@selector(okButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + DWBorderedActionButton *cancelButton = [[DWBorderedActionButton alloc] initWithFrame:CGRectZero]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView *buttonsStackView = [[UIStackView alloc] initWithArrangedSubviews:@[ okButton, cancelButton ]]; + buttonsStackView.translatesAutoresizingMaskIntoConstraints = NO; + buttonsStackView.axis = UILayoutConstraintAxisHorizontal; + buttonsStackView.distribution = UIStackViewDistributionFillEqually; + buttonsStackView.spacing = 8.0; + buttonsStackView.alignment = UIStackViewAlignmentCenter; + [self addSubview:buttonsStackView]; + + [NSLayoutConstraint activateConstraints:@[ + [title.topAnchor constraintEqualToAnchor:self.topAnchor + constant:32.0], + [title.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:16.0], + [self.trailingAnchor constraintEqualToAnchor:title.trailingAnchor + constant:16.0], + + [stackView.topAnchor constraintEqualToAnchor:title.bottomAnchor + constant:18.0], + [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:25.0], + [self.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor + constant:25.0], + + + [buttonsStackView.topAnchor constraintEqualToAnchor:stackView.bottomAnchor + constant:40], + [buttonsStackView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [self.bottomAnchor constraintEqualToAnchor:buttonsStackView.bottomAnchor + constant:32.0], + + [okButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [buttonsStackView.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + + [self updateItem1Text]; + } + return self; +} + +- (void)okButtonAction { + [self.delegate imgurInfoChildViewAcceptAction:self]; +} + +- (void)cancelButtonAction { + [self.delegate imgurInfoChildViewCancelAction:self]; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self updateItem1Text]; +} + +- (void)updateItem1Text { + NSString *s1 = NSLocalizedString(@"The image you select will be uploaded to Imgur anonymously.", + @"Don't translate 'Imgur'"); + NSRange range = [s1 rangeOfString:@"Imgur"]; + NSMutableAttributedString *att1 = [[NSMutableAttributedString alloc] initWithString:s1]; + if (range.location != NSNotFound) { + NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; + attachment.image = [UIImage imageNamed:@"logo_imgur_small"]; + attachment.bounds = CGRectMake(0.0, -4.0, 45.0, 16.0); + NSAttributedString *imageString = [NSAttributedString attributedStringWithAttachment:attachment]; + [att1 replaceCharactersInRange:range withAttributedString:imageString]; + } + self.item1.text = att1; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.h b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.h new file mode 100644 index 000000000..3e1cab240 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.h @@ -0,0 +1,38 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWImgurInfoViewController; + +@protocol DWImgurInfoViewControllerDelegate + +- (void)imgurInfoViewControllerDidAccept:(DWImgurInfoViewController *)controller; +- (void)imgurInfoViewControllerDidCancel:(DWImgurInfoViewController *)controller; + +@end + +@interface DWImgurInfoViewController : UIViewController + +@property (nonatomic, strong) UIImage *croppedImage; +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.m b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.m new file mode 100644 index 000000000..8bda70ffb --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurInfoViewController.m @@ -0,0 +1,72 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWImgurInfoViewController.h" + +#import "DWImgurInfoChildView.h" +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWImgurInfoViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWImgurInfoViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _modalTransition = [[DWModalPopupTransition alloc] initWithInteractiveTransitionAllowed:YES]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + DWImgurInfoChildView *childView = [[DWImgurInfoChildView alloc] init]; + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.delegate = self; + [self.view addSubview:childView]; + + [NSLayoutConstraint activateConstraints:@[ + [childView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + [childView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [childView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + ]]; +} + +#pragma mark DWImgurInfoChildViewDelegate + +- (void)imgurInfoChildViewAcceptAction:(DWImgurInfoChildView *)view { + [self.delegate imgurInfoViewControllerDidAccept:self]; +} + +- (void)imgurInfoChildViewCancelAction:(DWImgurInfoChildView *)view { + [self.delegate imgurInfoViewControllerDidCancel:self]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.h b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.h new file mode 100644 index 000000000..cfab9343a --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWImgurItemView : UIView + +@property (nullable, nonatomic, strong) NSAttributedString *text; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.m b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.m new file mode 100644 index 000000000..ca631e03b --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Imgur/DWImgurItemView.m @@ -0,0 +1,74 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWImgurItemView.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWImgurItemView () + +@property (readonly, nonatomic, strong) UILabel *label; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWImgurItemView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UILabel *label = [[UILabel alloc] init]; + label.translatesAutoresizingMaskIntoConstraints = NO; + label.textColor = [UIColor dw_darkTitleColor]; + label.numberOfLines = 0; + label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + [self addSubview:label]; + _label = label; + + UIImageView *imageView = [[UIImageView alloc] init]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + imageView.image = [UIImage imageNamed:@"icon_info"]; + [self addSubview:imageView]; + + [NSLayoutConstraint activateConstraints:@[ + [imageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [imageView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [imageView.widthAnchor constraintEqualToConstant:20.0], + [imageView.heightAnchor constraintEqualToConstant:20.0], + + [label.leadingAnchor constraintEqualToAnchor:imageView.trailingAnchor + constant:12.0], + [label.topAnchor constraintEqualToAnchor:self.topAnchor], + [self.trailingAnchor constraintEqualToAnchor:label.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:label.bottomAnchor], + ]]; + } + return self; +} + +- (NSAttributedString *)text { + return self.label.attributedText; +} + +- (void)setText:(NSAttributedString *)text { + self.label.attributedText = text; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.h b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.h new file mode 100644 index 000000000..ce8146673 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWSaveAlertChildView; + +@protocol DWSaveAlertChildViewDelegate + +- (void)saveAlertChildViewCancelAction:(DWSaveAlertChildView *)view; +- (void)saveAlertChildViewOKAction:(DWSaveAlertChildView *)view; + +@end + +@interface DWSaveAlertChildView : UIView + +@property (nullable, weak, nonatomic) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.m b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.m new file mode 100644 index 000000000..8385dab34 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertChildView.m @@ -0,0 +1,143 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBorderedActionButton.h" +#import "DWSaveAlertChildView.h" +#import "dashwallet-Swift.h" +#import "DWUIKit.h" + +static CGFloat const ViewCornerRadius = 8.0; +static CGSize const IconSize = {36.0, 36.0}; +static CGFloat const ButtonHeight = 39.0; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSaveAlertChildView () + +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *subtitleLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWSaveAlertChildView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + UIImageView *iconImageView = [[UIImageView alloc] init]; + iconImageView.translatesAutoresizingMaskIntoConstraints = NO; + iconImageView.contentMode = UIViewContentModeScaleAspectFit; + iconImageView.image = [UIImage imageNamed:@"icon_exclamation_light"]; + [self addSubview:iconImageView]; + _iconImageView = iconImageView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.text = NSLocalizedString(@"Save Changes", nil); + [self addSubview:titleLabel]; + _titleLabel = titleLabel; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.numberOfLines = 0; + subtitleLabel.textAlignment = NSTextAlignmentCenter; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + subtitleLabel.textColor = [UIColor dw_secondaryTextColor]; + subtitleLabel.text = NSLocalizedString(@"Would you like to save the changes you made to your profile?", nil); + [self addSubview:subtitleLabel]; + _subtitleLabel = subtitleLabel; + + DWActionButton *okButton = [[DWActionButton alloc] init]; + okButton.translatesAutoresizingMaskIntoConstraints = NO; + [okButton setTitle:NSLocalizedString(@"Yes", nil) forState:UIControlStateNormal]; + [okButton addTarget:self + action:@selector(okButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + DWBorderedActionButton *cancelButton = [[DWBorderedActionButton alloc] initWithFrame:CGRectZero]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"No", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ okButton, cancelButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisHorizontal; + stackView.distribution = UIStackViewDistributionFillEqually; + stackView.spacing = 8.0; + stackView.alignment = UIStackViewAlignmentCenter; + [self addSubview:stackView]; + + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 forAxis:UILayoutConstraintAxisVertical]; + [subtitleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 forAxis:UILayoutConstraintAxisVertical]; + + [NSLayoutConstraint activateConstraints:@[ + [iconImageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [iconImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [iconImageView.widthAnchor constraintEqualToConstant:IconSize.width], + [iconImageView.heightAnchor constraintEqualToConstant:IconSize.height], + + [titleLabel.topAnchor constraintEqualToAnchor:iconImageView.bottomAnchor + constant:8.0], + [titleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:8.0], + + [subtitleLabel.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:16.0], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor + constant:8.0], + + [stackView.topAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor + constant:44.0], + [stackView.leadingAnchor constraintGreaterThanOrEqualToAnchor:self.leadingAnchor + constant:8.0], + [self.trailingAnchor constraintGreaterThanOrEqualToAnchor:stackView.trailingAnchor + constant:8.0], + [self.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor], + [stackView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [okButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [stackView.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + } + return self; +} + +- (void)okButtonAction { + [self.delegate saveAlertChildViewOKAction:self]; +} + +- (void)cancelButtonAction { + [self.delegate saveAlertChildViewCancelAction:self]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.h b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.h new file mode 100644 index 000000000..3ec65688e --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWSaveAlertViewController; + +@protocol DWSaveAlertViewControllerDelegate + +- (void)saveAlertViewControllerOKAction:(DWSaveAlertViewController *)controller; +- (void)saveAlertViewControllerCancelAction:(DWSaveAlertViewController *)controller; + +@end + +@interface DWSaveAlertViewController : UIViewController + +@property (weak, nonatomic) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.m b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.m new file mode 100644 index 000000000..693b61f9a --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/SaveAlert/DWSaveAlertViewController.m @@ -0,0 +1,89 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSaveAlertViewController.h" + +#import "DWModalPopupTransition.h" +#import "DWSaveAlertChildView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSaveAlertViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWSaveAlertViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _modalTransition = [[DWModalPopupTransition alloc] initWithInteractiveTransitionAllowed:NO]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + [self.view addSubview:contentView]; + + DWSaveAlertChildView *childView = [[DWSaveAlertChildView alloc] init]; + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.delegate = self; + [contentView addSubview:childView]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + + [childView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:32.0], + [childView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [childView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:childView.bottomAnchor + constant:32.0], + ]]; +} + +#pragma mark - DWSaveAlertChildViewDelegate + +- (void)saveAlertChildViewCancelAction:(DWSaveAlertChildView *)view { + [self.delegate saveAlertViewControllerCancelAction:self]; +} + +- (void)saveAlertChildViewOKAction:(DWSaveAlertChildView *)view { + [self.delegate saveAlertViewControllerOKAction:self]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.h b/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.h new file mode 100644 index 000000000..4d60c5b44 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWHourGlassAnimationView : UIView + +- (void)startAnimating; +- (void)stopAnimating; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.m b/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.m new file mode 100644 index 000000000..670a61318 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWHourGlassAnimationView.m @@ -0,0 +1,103 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWHourGlassAnimationView.h" + +NS_ASSUME_NONNULL_BEGIN + +static CFTimeInterval const Step = 1.2; + +@interface DWHourGlassAnimationView () + +@property (readonly, nonatomic, strong) CALayer *hgLayer; +@property (nonatomic, assign) BOOL animating; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWHourGlassAnimationView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + CALayer *hgLayer = [CALayer layer]; + hgLayer.contentsGravity = kCAGravityResizeAspect; + [self.layer addSublayer:hgLayer]; + _hgLayer = hgLayer; + } + return self; +} + +- (void)startAnimating { + if (self.animating) { + return; + } + self.animating = YES; + + self.hgLayer.contents = nil; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self performOneStep]; + }); +} + +- (void)stopAnimating { + self.animating = NO; + [self.hgLayer removeAllAnimations]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGSize size = self.bounds.size; + CGSize hgsize = CGSizeMake(18, 24); + self.hgLayer.frame = CGRectMake((size.width - hgsize.width) / 2, (size.height - hgsize.height) / 2, hgsize.width, hgsize.height); +} + +- (void)performOneStep { + const CFTimeInterval subStep = 0.235; + + CAKeyframeAnimation *keyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"]; + keyframeAnimation.values = @[ + (id)[UIImage imageNamed:@"hourglass_1"].CGImage, + (id)[UIImage imageNamed:@"hourglass_2"].CGImage, + (id)[UIImage imageNamed:@"hourglass_3"].CGImage, + (id)[UIImage imageNamed:@"hourglass_4"].CGImage, + (id)[UIImage imageNamed:@"hourglass_5"].CGImage, + ]; + keyframeAnimation.duration = Step; + keyframeAnimation.removedOnCompletion = NO; + keyframeAnimation.fillMode = kCAFillModeForwards; + + CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; + rotationAnimation.toValue = @(M_PI); + rotationAnimation.duration = subStep * 2; + rotationAnimation.beginTime = Step + subStep; + rotationAnimation.removedOnCompletion = NO; + rotationAnimation.fillMode = kCAFillModeForwards; + + CAAnimationGroup *groupAnimation = [CAAnimationGroup animation]; + groupAnimation.animations = @[ keyframeAnimation, rotationAnimation ]; + groupAnimation.duration = Step + subStep * 4; + groupAnimation.beginTime = CACurrentMediaTime(); + groupAnimation.repeatCount = HUGE_VALF; + groupAnimation.removedOnCompletion = NO; + + [self.hgLayer addAnimation:groupAnimation forKey:@"hg_animation"]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.h b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.h new file mode 100644 index 000000000..94c926dfd --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWUploadAvatarModel; +@class DWUploadAvatarChildView; + +@protocol DWUploadAvatarChildViewDelegate + +- (void)uploadAvatarChildViewDidFinish:(DWUploadAvatarChildView *)view; +- (void)uploadAvatarChildViewDidCancel:(DWUploadAvatarChildView *)view; + +@end + +@interface DWUploadAvatarChildView : KVOUIView + +@property (nullable, nonatomic, strong) DWUploadAvatarModel *model; +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.m b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.m new file mode 100644 index 000000000..b37afd8d3 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarChildView.m @@ -0,0 +1,233 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUploadAvatarChildView.h" + +#import "dashwallet-Swift.h" +#import "DWHourGlassAnimationView.h" +#import "DWUIKit.h" +#import "DWUploadAvatarModel.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const ViewCornerRadius = 8.0; +static CGSize const ImageSize = {87.0, 87.0}; +static CGSize const IconSize = {28.0, 28.0}; +static CGFloat const ButtonHeight = 39.0; + +@interface DWUploadAvatarChildView () + +@property (readonly, nonatomic, strong) UIImageView *imageView; +@property (readonly, nonatomic, strong) DWHourGlassAnimationView *animationView; +@property (readonly, nonatomic, strong) UIImageView *errorImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *subtitleLabel; +@property (readonly, strong, nonatomic) UIButton *cancelButton; +@property (readonly, strong, nonatomic) UIButton *retryButton; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUploadAvatarChildView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + self.clipsToBounds = YES; + self.layer.cornerRadius = ViewCornerRadius; + + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = self.backgroundColor; + + UIImageView *imageView = [[UIImageView alloc] init]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + imageView.layer.cornerRadius = ImageSize.width / 2.0; + imageView.layer.masksToBounds = YES; + [contentView addSubview:imageView]; + _imageView = imageView; + + UIView *titleContentView = [[UIView alloc] init]; + titleContentView.translatesAutoresizingMaskIntoConstraints = NO; + titleContentView.backgroundColor = self.backgroundColor; + [contentView addSubview:titleContentView]; + + UIView *iconView = [[UIView alloc] init]; + iconView.translatesAutoresizingMaskIntoConstraints = NO; + [titleContentView addSubview:iconView]; + + DWHourGlassAnimationView *animationView = [[DWHourGlassAnimationView alloc] initWithFrame:CGRectZero]; + animationView.translatesAutoresizingMaskIntoConstraints = NO; + [iconView addSubview:animationView]; + _animationView = animationView; + + UIImageView *errorImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_error"]]; + errorImageView.translatesAutoresizingMaskIntoConstraints = NO; + errorImageView.contentMode = UIViewContentModeScaleAspectFit; + [iconView addSubview:errorImageView]; + _errorImageView = errorImageView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleContentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.numberOfLines = 0; + subtitleLabel.textColor = [UIColor dw_secondaryTextColor]; + subtitleLabel.textAlignment = NSTextAlignmentCenter; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + subtitleLabel.adjustsFontForContentSizeCategory = YES; + subtitleLabel.adjustsFontSizeToFitWidth = YES; + [contentView addSubview:subtitleLabel]; + _subtitleLabel = subtitleLabel; + + PlainButton *cancelButton = [[PlainButton alloc] init]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + _cancelButton = cancelButton; + + DWActionButton *retryButton = [[DWActionButton alloc] init]; + retryButton.translatesAutoresizingMaskIntoConstraints = NO; + [retryButton setTitle:NSLocalizedString(@"Try again", nil) forState:UIControlStateNormal]; + [retryButton addTarget:self + action:@selector(retryButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + _retryButton = retryButton; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ contentView, cancelButton, retryButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + stackView.spacing = 54.0; + stackView.alignment = UIStackViewAlignmentCenter; + [self addSubview:stackView]; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [stackView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:stackView.bottomAnchor], + [stackView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor + constant:padding], + + [imageView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [imageView.widthAnchor constraintEqualToConstant:ImageSize.width], + [imageView.heightAnchor constraintEqualToConstant:ImageSize.height], + [imageView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [titleContentView.topAnchor constraintEqualToAnchor:imageView.bottomAnchor + constant:12], + [titleContentView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + [titleContentView.leadingAnchor constraintGreaterThanOrEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintGreaterThanOrEqualToAnchor:titleContentView.trailingAnchor], + + [iconView.topAnchor constraintEqualToAnchor:titleContentView.topAnchor], + [iconView.leadingAnchor constraintEqualToAnchor:titleContentView.leadingAnchor], + [titleContentView.bottomAnchor constraintEqualToAnchor:iconView.bottomAnchor], + [iconView.widthAnchor constraintEqualToConstant:IconSize.width], + [iconView.heightAnchor constraintEqualToConstant:IconSize.height], + + [animationView.topAnchor constraintEqualToAnchor:iconView.topAnchor], + [animationView.leadingAnchor constraintEqualToAnchor:iconView.leadingAnchor], + [iconView.trailingAnchor constraintEqualToAnchor:animationView.trailingAnchor], + [iconView.bottomAnchor constraintEqualToAnchor:animationView.bottomAnchor], + + [errorImageView.topAnchor constraintEqualToAnchor:iconView.topAnchor], + [errorImageView.leadingAnchor constraintEqualToAnchor:iconView.leadingAnchor], + [iconView.trailingAnchor constraintEqualToAnchor:errorImageView.trailingAnchor], + [iconView.bottomAnchor constraintEqualToAnchor:errorImageView.bottomAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:titleContentView.topAnchor], + [titleLabel.leadingAnchor constraintEqualToAnchor:iconView.trailingAnchor], + [titleContentView.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor], + [titleContentView.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + + [subtitleLabel.topAnchor constraintEqualToAnchor:titleContentView.bottomAnchor + constant:2], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor], + + [retryButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + + [self mvvm_observe:DW_KEYPATH(self, model.state) + with:^(typeof(self) self, id value) { + switch (self.model.state) { + case DWUploadAvatarModelState_Loading: + self.titleLabel.text = NSLocalizedString(@"Please Wait", nil); + self.subtitleLabel.text = NSLocalizedString(@"Uploading your picture to the network", nil); + self.retryButton.hidden = YES; + self.cancelButton.hidden = NO; + self.errorImageView.hidden = YES; + + self.animationView.hidden = NO; + [self.animationView startAnimating]; + + break; + case DWUploadAvatarModelState_Error: + self.titleLabel.text = NSLocalizedString(@"Upload Error", nil); + self.subtitleLabel.text = NSLocalizedString(@"Unable to upload your picture. Please try again.", nil); + self.retryButton.hidden = NO; + self.cancelButton.hidden = YES; + self.errorImageView.hidden = NO; + + [self.animationView stopAnimating]; + self.animationView.hidden = YES; + + break; + case DWUploadAvatarModelState_Success: + [self.delegate uploadAvatarChildViewDidFinish:self]; + break; + } + }]; + } + return self; +} + +- (void)setModel:(DWUploadAvatarModel *)model { + _model = model; + + self.imageView.image = model.image; +} + +- (void)cancelButtonAction:(UIButton *)sender { + [self.model cancel]; + [self.delegate uploadAvatarChildViewDidCancel:self]; +} + +- (void)retryButtonAction:(UIButton *)sender { + [self.model retry]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.h b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.h new file mode 100644 index 000000000..b02368a50 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.h @@ -0,0 +1,44 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class UIImage; + +typedef NS_ENUM(NSUInteger, DWUploadAvatarModelState) { + DWUploadAvatarModelState_Loading, + DWUploadAvatarModelState_Error, + DWUploadAvatarModelState_Success, +}; + +@interface DWUploadAvatarModel : NSObject + +@property (readonly, nonatomic, assign) DWUploadAvatarModelState state; +@property (readonly, nonatomic, strong) UIImage *image; + +@property (readonly, nullable, nonatomic, copy) NSString *resultURLString; + +- (instancetype)initWithImage:(UIImage *)image; + +- (void)retry; +- (void)cancel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.m b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.m new file mode 100644 index 000000000..3ec405ee2 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarModel.m @@ -0,0 +1,169 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUploadAvatarModel.h" + +#import "DWEnvironment.h" +#import "UIImage+Utils.h" + +NS_ASSUME_NONNULL_BEGIN + +NSString *const ImageDeleteHash = @"ImgurImageDeleteHash"; + +@interface DWUploadAvatarModel () + +@property (nonatomic, assign) DWUploadAvatarModelState state; + +@property (atomic, assign) BOOL cancelled; +@property (nullable, nonatomic, copy) NSString *resultURLString; +@property (nullable, weak, nonatomic) id uploadOperation; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUploadAvatarModel + +- (instancetype)initWithImage:(UIImage *)image { + self = [super init]; + if (self) { + _image = image; + + [self retry]; + } + return self; +} + +- (void)retry { + self.cancelled = NO; + self.state = DWUploadAvatarModelState_Loading; + + NSString *imgurClientID = @"imgurId"; //TODO: DashPay + + NSString *deleteHash = [[NSUserDefaults standardUserDefaults] stringForKey:ImageDeleteHash]; + if (deleteHash.length > 0) { + NSString *urlString = [NSString stringWithFormat:@"https://api.imgur.com/3/image/%@", deleteHash]; + NSURL *url = [NSURL URLWithString:urlString]; + HTTPRequest *request = [HTTPRequest requestWithURL:url method:HTTPRequestMethod_DELETE parameters:nil]; + [request addValue:[NSString stringWithFormat:@"Client-ID %@", imgurClientID] forHeader:@"Authorization"]; + request.maximumRetryCount = 3; + + HTTPLoaderManager *loaderManager = [DSNetworkingCoordinator sharedInstance].loaderManager; + __weak typeof(self) weakSelf = self; + [loaderManager + sendRequest:request + completion:^(id _Nullable parsedData, NSDictionary *_Nullable responseHeaders, NSInteger statusCode, NSError *_Nullable error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [strongSelf upload]; + }); + }]; + } + else { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self upload]; + }); + } +} + +- (void)cancel { + self.cancelled = YES; + [self.uploadOperation cancel]; +} + +- (void)upload { + if (self.cancelled) { + return; + } + + const CGFloat maxImageSide = 600; + UIImage *resultImage = self.image; + if (self.image.size.width > maxImageSide || self.image.size.height > maxImageSide) { + resultImage = [self.image dw_resize:CGSizeMake(maxImageSide, maxImageSide) + withInterpolationQuality:kCGInterpolationHigh]; + } + + NSURL *url = [NSURL URLWithString:@"https://api.imgur.com/3/upload"]; + NSString *imgurClientID = @"imgurId"; //TODO: DashPay + + NSString *boundary = [NSUUID UUID].UUIDString; + NSData *body = [self createBodyWithBoundary:boundary image:resultImage]; + HTTPRequest *request = [[HTTPRequest alloc] initWithURL:url method:HTTPRequestMethod_POST contentType:HTTPContentType_JSON parameters:nil body:body sourceIdentifier:nil]; + [request addValue:[NSString stringWithFormat:@"Client-ID %@", imgurClientID] + forHeader:@"Authorization"]; + [request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] + forHeader:@"Content-Type"]; + + HTTPLoaderManager *loaderManager = [DSNetworkingCoordinator sharedInstance].loaderManager; + + __weak typeof(self) weakSelf = self; + self.uploadOperation = [loaderManager + sendRequest:request + completion:^(id _Nullable parsedData, NSDictionary *_Nullable responseHeaders, NSInteger statusCode, NSError *_Nullable error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (error) { + strongSelf.state = DWUploadAvatarModelState_Error; + } + else { + NSDictionary *response = (NSDictionary *)parsedData; + if ([response[@"success"] boolValue]) { + NSDictionary *data = response[@"data"]; + + NSDictionary *deleteHash = data[@"deletehash"]; + [[NSUserDefaults standardUserDefaults] setObject:deleteHash forKey:ImageDeleteHash]; + + strongSelf.resultURLString = data[@"link"]; + + strongSelf.state = DWUploadAvatarModelState_Success; + } + else { + strongSelf.state = DWUploadAvatarModelState_Error; + } + } + }]; +} + +- (NSData *)createBodyWithBoundary:(NSString *)boundary + image:(UIImage *)image { + NSMutableData *httpBody = [NSMutableData data]; + + NSString *fieldName = @"image"; // Imgur field + + NSString *filename = @"image.jpg"; + NSData *data = UIImageJPEGRepresentation(image, 0.5); + NSString *mimetype = @"image/jpeg"; + + [httpBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [httpBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", fieldName, filename] dataUsingEncoding:NSUTF8StringEncoding]]; + [httpBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", mimetype] dataUsingEncoding:NSUTF8StringEncoding]]; + [httpBody appendData:data]; + [httpBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + + [httpBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + + return httpBody; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.h b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.h new file mode 100644 index 000000000..14219b23b --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.h @@ -0,0 +1,45 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWUploadAvatarViewController; + +@protocol DWUploadAvatarViewControllerDelegate + +- (void)uploadAvatarViewControllerDidCancel:(DWUploadAvatarViewController *)controller; +- (void)uploadAvatarViewController:(DWUploadAvatarViewController *)controller didFinishWithURLString:(NSString *)urlString; + +@end + +@interface DWUploadAvatarViewController : UIViewController + +@property (readonly, nonatomic, strong) UIImage *image; +@property (nullable, nonatomic, weak) id delegate; + +- (instancetype)initWithImage:(UIImage *)image; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.m b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.m new file mode 100644 index 000000000..77841a6e2 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Upload/DWUploadAvatarViewController.m @@ -0,0 +1,92 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUploadAvatarViewController.h" + +#import "DWUIKit.h" +#import "DWUploadAvatarChildView.h" +#import "DWUploadAvatarModel.h" + +static CGFloat VerticalPadding(void) { + if (IS_IPAD) { + return 32.0; + } + else if (IS_IPHONE_6 || IS_IPHONE_5_OR_LESS) { + return 16.0; + } + else { + return 24.0; + } +} + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUploadAvatarViewController () + +@property (nonatomic, strong) DWUploadAvatarModel *model; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUploadAvatarViewController + +- (instancetype)initWithImage:(UIImage *)image { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _model = [[DWUploadAvatarModel alloc] initWithImage:image]; + } + return self; +} + +- (UIImage *)image { + return self.model.image; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = self.view; + + DWUploadAvatarChildView *childView = [[DWUploadAvatarChildView alloc] initWithFrame:CGRectZero]; + childView.model = self.model; + childView.delegate = self; + childView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:childView]; + + const CGFloat padding = VerticalPadding(); + [NSLayoutConstraint activateConstraints:@[ + [childView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [childView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [childView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [childView.heightAnchor constraintEqualToAnchor:childView.widthAnchor], + ]]; +} + +#pragma mark - DWUploadAvatarChildViewDelegate + +- (void)uploadAvatarChildViewDidFinish:(DWUploadAvatarChildView *)view { + [self.delegate uploadAvatarViewController:self didFinishWithURLString:self.model.resultURLString]; +} + +- (void)uploadAvatarChildViewDidCancel:(DWUploadAvatarChildView *)view { + [self.delegate uploadAvatarViewControllerDidCancel:self]; +} + +@end diff --git a/DashWallet/Sources/Models/DWDateFormatter.h b/DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.h similarity index 75% rename from DashWallet/Sources/Models/DWDateFormatter.h rename to DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.h index b48e26e70..d5d3b4ada 100644 --- a/DashWallet/Sources/Models/DWDateFormatter.h +++ b/DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.h @@ -15,17 +15,13 @@ // limitations under the License. // -#import +#import NS_ASSUME_NONNULL_BEGIN -@interface DWDateFormatter : NSObject +@interface DWFaceDetector : NSObject -- (NSString *)shortStringFromDate:(NSDate *)date; -- (NSString *)longStringFromDate:(NSDate *)date; -- (NSString *)iso8601StringFromDate:(NSDate *)date; - -+ (instancetype)sharedInstance; +- (instancetype)initWithImage:(UIImage *)image completion:(void (^)(CGRect roi))completion; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; diff --git a/DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.m b/DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.m new file mode 100644 index 000000000..f47bb8a0a --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Utils/DWFaceDetector.m @@ -0,0 +1,95 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWFaceDetector.h" + +#import + +NS_ASSUME_NONNULL_BEGIN + +static CGImagePropertyOrientation UIImageOrientationToCGImageOrientation(UIImageOrientation orientation) { + switch (orientation) { + case UIImageOrientationUp: + return kCGImagePropertyOrientationUp; + case UIImageOrientationDown: + return kCGImagePropertyOrientationDown; + case UIImageOrientationRight: + return kCGImagePropertyOrientationRight; + case UIImageOrientationUpMirrored: + return kCGImagePropertyOrientationUpMirrored; + case UIImageOrientationDownMirrored: + return kCGImagePropertyOrientationDownMirrored; + case UIImageOrientationLeftMirrored: + return kCGImagePropertyOrientationLeftMirrored; + case UIImageOrientationRightMirrored: + return kCGImagePropertyOrientationRightMirrored; + default: + return kCGImagePropertyOrientationUp; + } +} + +@interface DWFaceDetector () + +@property (nonatomic, readonly, strong) VNDetectFaceRectanglesRequest *request; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWFaceDetector + +- (instancetype)initWithImage:(UIImage *)image completion:(void (^)(CGRect roi))completion { + NSParameterAssert(image.CGImage); + + self = [super init]; + if (self) { + CGSize imageSize = image.size; + _request = [[VNDetectFaceRectanglesRequest alloc] initWithCompletionHandler:^(VNRequest *_Nonnull request, NSError *_Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + VNFaceObservation *observation = request.results.firstObject; + if (error != nil || ![observation isKindOfClass:VNFaceObservation.class]) { + completion(CGRectZero); + } + else { + CGRect rect = observation.boundingBox; + CGFloat x = rect.origin.x * imageSize.width; + CGFloat w = rect.size.width * imageSize.width; + CGFloat h = rect.size.height * imageSize.height; + CGFloat y = imageSize.height * (1 - rect.origin.y) - h; + completion(CGRectMake(x, y, w, h)); + } + }); + }]; + + VNImageRequestHandler *requestHandler = + [[VNImageRequestHandler alloc] initWithCGImage:image.CGImage + orientation:UIImageOrientationToCGImageOrientation(image.imageOrientation) + options:@{}]; + dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ + NSError *error = nil; + [requestHandler performRequests:@[ self.request ] error:&error]; + if (error != nil) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(CGRectZero); + }); + } + }); + } + return self; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.h b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.h new file mode 100644 index 000000000..65b8dd36e --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.h @@ -0,0 +1,62 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWTextFieldFormValidationResult : NSObject + +@property (readonly, nonatomic, assign, getter=isErrored) BOOL errored; +@property (readonly, nonatomic, copy) NSString *info; + +- (instancetype)initWithInfo:(NSString *)info; +- (instancetype)initWithError:(NSString *)info; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +@interface DWTextFieldFormCellModel : DWBaseFormCellModel + +@property (nullable, copy, nonatomic) NSString *placeholder; +@property (nullable, copy, nonatomic) NSString *text; + +@property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWTextFieldFormCellModel *cellModel); +@property (nullable, copy, nonatomic) void (^didReturnValueBlock)(DWTextFieldFormCellModel *cellModel); + +// Some of UITextInputTraits protocol params +@property (assign, nonatomic) UITextAutocapitalizationType autocapitalizationType; +@property (assign, nonatomic) UITextAutocorrectionType autocorrectionType; +@property (assign, nonatomic) UIKeyboardType keyboardType; +@property (assign, nonatomic) UIReturnKeyType returnKeyType; +@property (assign, nonatomic) BOOL enablesReturnKeyAutomatically; +@property (assign, nonatomic, getter=isSecureTextEntry) BOOL secureTextEntry; + +- (instancetype)initWithTitle:(nullable NSString *)title placeholder:(nullable NSString *)placeholder NS_DESIGNATED_INITIALIZER; + +- (BOOL)validateReplacementString:(NSString *)string text:(nullable NSString *)text; + +/// Non-null! +- (DWTextFieldFormValidationResult *)postValidate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.m b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.m new file mode 100644 index 000000000..40e274269 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextFieldFormCellModel.m @@ -0,0 +1,68 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWTextFieldFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWTextFieldFormValidationResult + +- (instancetype)initWithInfo:(NSString *)info { + self = [super init]; + if (self) { + _info = info; + } + return self; +} + +- (instancetype)initWithError:(NSString *)info { + self = [super init]; + if (self) { + _info = info; + _errored = YES; + } + return self; +} + + +@end + +@implementation DWTextFieldFormCellModel + +- (instancetype)initWithTitle:(nullable NSString *)title placeholder:(nullable NSString *)placeholder { + self = [super initWithTitle:title]; + if (self) { + _placeholder = [placeholder copy]; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title { + return [self initWithTitle:title placeholder:nil]; +} + +- (BOOL)validateReplacementString:(NSString *)string text:(nullable NSString *)text { + return YES; +} + +- (DWTextFieldFormValidationResult *)postValidate { + return [[DWTextFieldFormValidationResult alloc] initWithInfo:@""]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextInputFormTableViewCell.h b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextInputFormTableViewCell.h new file mode 100644 index 000000000..3687039b8 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextInputFormTableViewCell.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWTextInputFormTableViewCell + +- (void)textInputBecomeFirstResponder; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Views/SharedViews/DWShadowView.h b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.h similarity index 85% rename from DashWallet/Sources/UI/Views/SharedViews/DWShadowView.h rename to DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.h index a7511a6f7..c1683361e 100644 --- a/DashWallet/Sources/UI/Views/SharedViews/DWShadowView.h +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.h @@ -15,13 +15,11 @@ // limitations under the License. // -#import +#import "DWTextFieldFormCellModel.h" NS_ASSUME_NONNULL_BEGIN -@interface DWShadowView : UIView - -@property (nonatomic, assign) IBInspectable CGFloat spread; +@interface DWTextViewFormCellModel : DWTextFieldFormCellModel @end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.m b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.m new file mode 100644 index 000000000..8a4738564 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/Base/DWTextViewFormCellModel.m @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWTextViewFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWTextViewFormCellModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.h b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.h new file mode 100644 index 000000000..2dbd659f4 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWTextViewFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProfileAboutCellModel : DWTextViewFormCellModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.m b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.m similarity index 54% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.m rename to DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.m index d3a38f1fd..6414185f4 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.m +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileAboutCellModel.m @@ -15,19 +15,19 @@ // limitations under the License. // -#import "DWMaxLengthUsernameValidationRule.h" +#import "DWProfileAboutCellModel.h" -#import "DWDashPayConstants.h" -#import "DWUsernameValidationRule+Protected.h" +@implementation DWProfileAboutCellModel -@implementation DWMaxLengthUsernameValidationRule - -- (NSString *)title { - return [NSString stringWithFormat:NSLocalizedString(@"Maximum %ld characters", @"Validation rule: Maximum 24 characters"), DW_MAX_USERNAME_LENGTH]; -} - -- (void)validateText:(NSString *)text { - self.validationResult = text.length <= DW_MAX_USERNAME_LENGTH ? DWUsernameValidationRuleResultHidden : DWUsernameValidationRuleResultInvalid; +- (DWTextFieldFormValidationResult *)postValidate { + NSUInteger len = self.text.length; + const NSUInteger max = 250; + NSString *info = [NSString stringWithFormat:NSLocalizedString(@"%ld/%ld Characters", @"10/20 Characters"), + len, max]; + if (len > max) { + return [[DWTextFieldFormValidationResult alloc] initWithError:info]; + } + return [[DWTextFieldFormValidationResult alloc] initWithInfo:info]; } @end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.h b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.h new file mode 100644 index 000000000..7088e68ae --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWTextFieldFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProfileDisplayNameCellModel : DWTextFieldFormCellModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.m b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.m new file mode 100644 index 000000000..e0eb839f7 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/CellModels/DWProfileDisplayNameCellModel.m @@ -0,0 +1,33 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWProfileDisplayNameCellModel.h" + +@implementation DWProfileDisplayNameCellModel + +- (DWTextFieldFormValidationResult *)postValidate { + NSUInteger len = self.text.length; + const NSUInteger max = 25; + NSString *info = [NSString stringWithFormat:NSLocalizedString(@"%ld/%ld Characters", @"10/20 Characters"), + len, max]; + if (len > max) { + return [[DWTextFieldFormValidationResult alloc] initWithError:info]; + } + return [[DWTextFieldFormValidationResult alloc] initWithInfo:info]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.h b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.h new file mode 100644 index 000000000..54880e80d --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.h @@ -0,0 +1,41 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWEditProfileAvatarView; +@class DSBlockchainIdentity; + +@protocol DWEditProfileAvatarViewDelegate + +- (void)editProfileAvatarView:(DWEditProfileAvatarView *)view editAvatarAction:(UIButton *)sender; + +@end + +@interface DWEditProfileAvatarView : UIView + +@property (nullable, nonatomic, strong) UIImage *image; + +@property (nullable, nonatomic, weak) id delegate; + +- (void)setImageWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.m b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.m new file mode 100644 index 000000000..53354ba45 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileAvatarView.m @@ -0,0 +1,105 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileAvatarView.h" + +#import "UIImageView+DWDPAvatar.h" +#import + +static CGFloat const AvatarSize = 134.0; +static CGSize const EditSize = {46.0, 45.0}; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileAvatarView () + +@property (readonly, nonatomic, strong) UIImageView *avatarImageView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWEditProfileAvatarView + +- (UIImage *)image { + return self.avatarImageView.image; +} + +- (void)setImage:(UIImage *)image { + self.avatarImageView.image = image; +} + +- (void)setImageWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + __weak typeof(self) weakSelf = self; + [self.avatarImageView dw_setAvatarWithURLString:blockchainIdentity.avatarPath + completion:^(UIImage *_Nullable image) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image) { + strongSelf.avatarImageView.image = image; + } + else { + strongSelf.avatarImageView.image = [UIImage imageNamed:@"dp_current_user_placeholder"]; + } + }]; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIImageView *avatarImageView = [[UIImageView alloc] init]; + avatarImageView.translatesAutoresizingMaskIntoConstraints = NO; + avatarImageView.image = [UIImage imageNamed:@"dp_current_user_placeholder"]; + avatarImageView.layer.cornerRadius = AvatarSize / 2.0; + avatarImageView.layer.masksToBounds = YES; + [self addSubview:avatarImageView]; + _avatarImageView = avatarImageView; + + UIButton *editButton = [UIButton buttonWithType:UIButtonTypeCustom]; + editButton.translatesAutoresizingMaskIntoConstraints = NO; + [editButton setImage:[UIImage imageNamed:@"dp_avatar_edit"] forState:UIControlStateNormal]; + [editButton addTarget:self action:@selector(editButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:editButton]; + + const CGFloat topSpacing = 32.0; + const CGFloat bottomSpacing = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [avatarImageView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:topSpacing], + [avatarImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [avatarImageView.widthAnchor constraintEqualToConstant:AvatarSize], + [avatarImageView.heightAnchor constraintEqualToConstant:AvatarSize], + [self.bottomAnchor constraintEqualToAnchor:avatarImageView.bottomAnchor + constant:bottomSpacing], + + [editButton.trailingAnchor constraintEqualToAnchor:avatarImageView.trailingAnchor], + [editButton.bottomAnchor constraintEqualToAnchor:avatarImageView.bottomAnchor], + [editButton.widthAnchor constraintEqualToConstant:EditSize.width], + [editButton.heightAnchor constraintEqualToConstant:EditSize.height], + ]]; + } + return self; +} + +- (void)editButtonAction:(UIButton *)sender { + [self.delegate editProfileAvatarView:self editAvatarAction:sender]; +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.h b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.h new file mode 100644 index 000000000..3803439e7 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWTextFieldFormCellModel.h" +#import "DWTextInputFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileBaseCell : KVOUITableViewCell + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UIView *inputContentView; +@property (readonly, nonatomic, strong) UILabel *validationLabel; + +- (void)textInputBecomeFirstResponder; + +- (void)provideValidationResult:(DWTextFieldFormValidationResult *)validationResult; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.m b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.m new file mode 100644 index 000000000..3ebf80702 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileBaseCell.m @@ -0,0 +1,114 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileBaseCell.h" + +#import "DWUIKit.h" +#import "dashwallet-Swift.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileBaseCell () + + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWEditProfileBaseCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.textColor = [UIColor dw_secondaryTextColor]; + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontSizeToFitWidth = YES; + [self.contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + DWShadowView *shadowView = [[DWShadowView alloc] initWithFrame:CGRectZero]; + shadowView.translatesAutoresizingMaskIntoConstraints = NO; + [self.contentView addSubview:shadowView]; + + UIView *inputContentView = [[UIView alloc] initWithFrame:CGRectZero]; + inputContentView.translatesAutoresizingMaskIntoConstraints = NO; + inputContentView.backgroundColor = [UIColor dw_backgroundColor]; + inputContentView.layer.cornerRadius = 8.0; + inputContentView.layer.masksToBounds = YES; + [shadowView addSubview:inputContentView]; + _inputContentView = inputContentView; + + UILabel *validationLabel = [[UILabel alloc] init]; + validationLabel.translatesAutoresizingMaskIntoConstraints = NO; + validationLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + validationLabel.textColor = [UIColor dw_secondaryTextColor]; + validationLabel.numberOfLines = 0; + validationLabel.adjustsFontSizeToFitWidth = YES; + [self.contentView addSubview:validationLabel]; + _validationLabel = validationLabel; + + const CGFloat verticalPadding = 5.0; + + UILayoutGuide *guide = self.contentView.layoutMarginsGuide; + const CGFloat spacing = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:self.contentView.topAnchor + constant:verticalPadding], + [titleLabel.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [guide.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + + [shadowView.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:spacing], + [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor], + + [validationLabel.topAnchor constraintEqualToAnchor:shadowView.bottomAnchor + constant:spacing], + [validationLabel.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [guide.trailingAnchor constraintEqualToAnchor:validationLabel.trailingAnchor], + [self.contentView.bottomAnchor constraintEqualToAnchor:validationLabel.bottomAnchor + constant:verticalPadding], + + [inputContentView.topAnchor constraintEqualToAnchor:shadowView.topAnchor], + [inputContentView.leadingAnchor constraintEqualToAnchor:shadowView.leadingAnchor], + [shadowView.trailingAnchor constraintEqualToAnchor:inputContentView.trailingAnchor], + [shadowView.bottomAnchor constraintEqualToAnchor:inputContentView.bottomAnchor], + ]]; + } + return self; +} + +- (void)textInputBecomeFirstResponder { +} + +- (void)provideValidationResult:(DWTextFieldFormValidationResult *)validationResult { + self.validationLabel.textColor = validationResult.isErrored ? [UIColor dw_redColor] : [UIColor dw_secondaryTextColor]; + if (validationResult.isErrored || self.isFirstResponder) { + self.validationLabel.text = validationResult.info; + } + else { + self.validationLabel.text = @" "; + } +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.h b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.h new file mode 100644 index 000000000..0fccfefcf --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileBaseCell.h" + +#import "DWTextFieldFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWEditProfileTextFieldCell; + +@protocol DWEditProfileTextFieldCellDelegate + +- (void)editProfileTextFieldCellActivateNextFirstResponder:(DWEditProfileTextFieldCell *)cell; + +@end + +@interface DWEditProfileTextFieldCell : DWEditProfileBaseCell + +@property (nullable, strong, nonatomic) DWTextFieldFormCellModel *cellModel; +@property (nullable, weak, nonatomic) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.m b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.m new file mode 100644 index 000000000..c3bf6f596 --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextFieldCell.m @@ -0,0 +1,159 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileTextFieldCell.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileTextFieldCell () + +@property (readonly, nonatomic, strong) UITextField *textField; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWEditProfileTextFieldCell + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.selectionStyle = UITableViewCellSelectionStyleNone; + + UITextField *textField = [[UITextField alloc] initWithFrame:CGRectZero]; + textField.translatesAutoresizingMaskIntoConstraints = NO; + textField.backgroundColor = [UIColor dw_backgroundColor]; + textField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + textField.adjustsFontSizeToFitWidth = YES; + textField.textColor = [UIColor dw_darkTitleColor]; + textField.delegate = self; + [self.inputContentView addSubview:textField]; + _textField = textField; + + const CGFloat padding = 20.0; + const CGFloat verticalPadding = 5.0; + [NSLayoutConstraint activateConstraints:@[ + [textField.topAnchor constraintEqualToAnchor:self.inputContentView.topAnchor + constant:verticalPadding], + [textField.leadingAnchor constraintEqualToAnchor:self.inputContentView.leadingAnchor + constant:padding], + [self.inputContentView.trailingAnchor constraintEqualToAnchor:textField.trailingAnchor + constant:padding], + [self.inputContentView.bottomAnchor constraintEqualToAnchor:textField.bottomAnchor + constant:verticalPadding], + + [textField.heightAnchor constraintEqualToConstant:40], + ]]; + + [self mvvm_observe:@"cellModel.title" + with:^(typeof(self) self, NSString *value) { + self.titleLabel.text = value; + }]; + + [self mvvm_observe:@"cellModel.placeholder" + with:^(typeof(self) self, NSString *value) { + self.textField.placeholder = value; + }]; + + [self mvvm_observe:@"cellModel.text" + with:^(typeof(self) self, NSString *value) { + self.textField.text = value; + + [self provideValidationResult:[self.cellModel postValidate]]; + }]; + } + return self; +} + +- (BOOL)isFirstResponder { + return self.textField.isFirstResponder; +} + +- (void)setCellModel:(nullable DWTextFieldFormCellModel *)cellModel { + _cellModel = cellModel; + + self.textField.autocapitalizationType = cellModel.autocapitalizationType; + self.textField.autocorrectionType = cellModel.autocorrectionType; + self.textField.keyboardType = cellModel.keyboardType; + self.textField.returnKeyType = cellModel.returnKeyType; + self.textField.enablesReturnKeyAutomatically = cellModel.enablesReturnKeyAutomatically; + self.textField.secureTextEntry = cellModel.secureTextEntry; + + [self provideValidationResult:[cellModel postValidate]]; +} + +#pragma mark - TextInputFormTableViewCell + +- (void)textInputBecomeFirstResponder { + [self.textField becomeFirstResponder]; +} + + +#pragma mark UITextFieldDelegate + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + [self provideValidationResult:[self.cellModel postValidate]]; +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { + BOOL allowed = [self.cellModel validateReplacementString:string text:textField.text]; + if (!allowed) { + return NO; + } + + self.cellModel.text = [textField.text stringByReplacingCharactersInRange:range withString:string]; + if (self.cellModel.didChangeValueBlock) { + self.cellModel.didChangeValueBlock(self.cellModel); + } + + [self provideValidationResult:[self.cellModel postValidate]]; + + return NO; +} + +- (BOOL)textFieldShouldClear:(UITextField *)textField { + self.cellModel.text = @""; + if (self.cellModel.didChangeValueBlock) { + self.cellModel.didChangeValueBlock(self.cellModel); + } + + return NO; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField.returnKeyType == UIReturnKeyNext) { + [self.delegate editProfileTextFieldCellActivateNextFirstResponder:self]; + } + else if (textField.returnKeyType == UIReturnKeyDone) { + [self endEditing:YES]; + } + + return YES; +} + +- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason { + [self provideValidationResult:[self.cellModel postValidate]]; + + if (reason == UITextFieldDidEndEditingReasonCommitted && self.cellModel.didReturnValueBlock) { + self.cellModel.didReturnValueBlock(self.cellModel); + } +} + +@end diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.h b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.h new file mode 100644 index 000000000..0b0392fcc --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.h @@ -0,0 +1,31 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileBaseCell.h" + +#import "DWTextInputFormTableViewCell.h" +#import "DWTextViewFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileTextViewCell : DWEditProfileBaseCell + +@property (nullable, strong, nonatomic) DWTextViewFormCellModel *cellModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.m b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.m new file mode 100644 index 000000000..8c98f16ce --- /dev/null +++ b/DashPay/Presentation/Profile/EditProfile/Views/DWEditProfileTextViewCell.m @@ -0,0 +1,132 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWEditProfileTextViewCell.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWEditProfileTextViewCell () + +@property (readonly, nonatomic, strong) UITextView *textView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWEditProfileTextViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.selectionStyle = UITableViewCellSelectionStyleNone; + + UITextView *textView = [[UITextView alloc] initWithFrame:CGRectZero textContainer:nil]; + textView.translatesAutoresizingMaskIntoConstraints = NO; + textView.textContainerInset = UIEdgeInsetsZero; + textView.textContainer.lineFragmentPadding = 0.0; + textView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + textView.delegate = self; + textView.backgroundColor = [UIColor clearColor]; + [self.inputContentView addSubview:textView]; + _textView = textView; + + const CGFloat padding = 20.0; + const CGFloat verticalPadding = 10.0; + [NSLayoutConstraint activateConstraints:@[ + [textView.topAnchor constraintEqualToAnchor:self.inputContentView.topAnchor + constant:verticalPadding], + [textView.leadingAnchor constraintEqualToAnchor:self.inputContentView.leadingAnchor + constant:padding], + [self.inputContentView.trailingAnchor constraintEqualToAnchor:textView.trailingAnchor + constant:padding], + [self.inputContentView.bottomAnchor constraintEqualToAnchor:textView.bottomAnchor + constant:verticalPadding], + [textView.heightAnchor constraintEqualToConstant:125], + ]]; + + [self mvvm_observe:@"cellModel.title" + with:^(typeof(self) self, NSString *value) { + self.titleLabel.text = value; + }]; + + [self mvvm_observe:@"cellModel.placeholder" + with:^(typeof(self) self, NSString *value){ + // not supported + }]; + + [self mvvm_observe:@"cellModel.text" + with:^(typeof(self) self, NSString *value) { + self.textView.text = value; + + [self provideValidationResult:[self.cellModel postValidate]]; + }]; + } + return self; +} + +- (BOOL)isFirstResponder { + return self.textView.isFirstResponder; +} + +- (void)setCellModel:(nullable DWTextViewFormCellModel *)cellModel { + _cellModel = cellModel; + + self.textView.autocapitalizationType = cellModel.autocapitalizationType; + self.textView.autocorrectionType = cellModel.autocorrectionType; + self.textView.keyboardType = cellModel.keyboardType; + self.textView.returnKeyType = cellModel.returnKeyType; + self.textView.enablesReturnKeyAutomatically = cellModel.enablesReturnKeyAutomatically; + self.textView.secureTextEntry = cellModel.secureTextEntry; + + [self provideValidationResult:[self.cellModel postValidate]]; +} + +#pragma mark - TextInputFormTableViewCell + +- (void)textInputBecomeFirstResponder { + [self.textView becomeFirstResponder]; +} + +#pragma mark - UITextViewDelegate + +- (void)textViewDidBeginEditing:(UITextView *)textView { + [self provideValidationResult:[self.cellModel postValidate]]; +} + +- (void)textViewDidEndEditing:(UITextView *)textView { + [self provideValidationResult:[self.cellModel postValidate]]; +} + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + BOOL allowed = [self.cellModel validateReplacementString:text text:textView.text]; + if (!allowed) { + return NO; + } + + self.cellModel.text = [textView.text stringByReplacingCharactersInRange:range withString:text]; + if (self.cellModel.didChangeValueBlock) { + self.cellModel.didChangeValueBlock(self.cellModel); + } + + [self provideValidationResult:[self.cellModel postValidate]]; + + return NO; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/DPWelcomeMenuView.swift b/DashPay/Presentation/Profile/UserProfile/DPWelcomeMenuView.swift new file mode 100644 index 000000000..f03847a37 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DPWelcomeMenuView.swift @@ -0,0 +1,148 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +enum DPWelcomState { + case none + case voting +} + +@objc(DWDPWelcomeMenuView) +class DPWelcomeMenuView: UIView { + private let prefs = VotingPrefs.shared + + private let titleLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.textColor = .dw_label() + label.numberOfLines = 1 + label.adjustsFontForContentSizeCategory = true + label.font = .dw_mediumFont(ofSize: 15) + label.text = NSLocalizedString("Join DashPay", comment: "") + + return label + }() + + private let subtitleLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.textColor = .dw_tertiaryText() + label.numberOfLines = 1 + label.adjustsFontForContentSizeCategory = true + label.font = .dw_regularFont(ofSize: 12) + label.text = NSLocalizedString("Request your username", comment: "") + + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + @objc + func refreshState() { + changeState(state: prefs.requestedUsernameId != nil ? .voting : .none, username: prefs.requestedUsername) + } + + private func setupView() { + backgroundColor = UIColor.clear + + let shadowView = ShadowView(frame: .zero) + shadowView.translatesAutoresizingMaskIntoConstraints = false + shadowView.insetsLayoutMarginsFromSafeArea = true + addSubview(shadowView) + + let contentView = UIView() + contentView.translatesAutoresizingMaskIntoConstraints = false + contentView.backgroundColor = .dw_background() + contentView.layer.cornerRadius = 8.0 + contentView.layer.masksToBounds = true + shadowView.addSubview(contentView) + + let imageView = UIImageView(image: UIImage(named: "dp_user_generic")) + imageView.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(imageView) + + contentView.addSubview(titleLabel) + contentView.addSubview(subtitleLabel) + + let chevronView = UIImageView(image: UIImage(named: "greyarrow")) + chevronView.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(chevronView) + + let padding: CGFloat = 20.0 + let horizontalPadding: CGFloat = 12 + + NSLayoutConstraint.activate([ + contentView.heightAnchor.constraint(equalToConstant: 68), + + shadowView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: padding), + shadowView.topAnchor.constraint(equalTo: topAnchor), + shadowView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -padding), + shadowView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + + contentView.leadingAnchor.constraint(equalTo: shadowView.leadingAnchor), + contentView.topAnchor.constraint(equalTo: shadowView.topAnchor), + contentView.trailingAnchor.constraint(equalTo: shadowView.trailingAnchor), + bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 12), + + imageView.heightAnchor.constraint(equalToConstant: 34), + imageView.widthAnchor.constraint(equalToConstant: 34), + imageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), + imageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + + titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 20), + titleLabel.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: horizontalPadding), + + contentView.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: horizontalPadding), + + subtitleLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 2), + subtitleLabel.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: horizontalPadding), + + chevronView.heightAnchor.constraint(equalToConstant: 16), + chevronView.widthAnchor.constraint(equalToConstant: 9), + chevronView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -25), + chevronView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor) + ]) + + refreshState() + } + + private func changeState(state: DPWelcomState, username: String?) { + switch state { + case .none: + titleLabel.text = NSLocalizedString("Join DashPay", comment: "") + subtitleLabel.text = NSLocalizedString("Request your username", comment: "") + case .voting: + titleLabel.text = username ?? "" + let startDate = Date(timeIntervalSince1970: VotingConstants.votingStartTime) + let endDate = Date(timeIntervalSince1970: VotingConstants.votingEndTime) + let startDateStr = DWDateFormatter.sharedInstance.dateOnly(from: startDate) + let endDateStr = DWDateFormatter.sharedInstance.dateOnly(from: endDate) + let votingPeriod = "\(startDateStr) - \(endDateStr)" + subtitleLabel.text = String.localizedStringWithFormat(NSLocalizedString("Requested · Voting: %@", comment: ""), votingPeriod) + } + } +} + diff --git a/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.h b/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.h new file mode 100644 index 000000000..4c223248d --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWCurrentUserProfileView; +@class DSBlockchainIdentity; + +@protocol DWCurrentUserProfileViewDelegate + +- (void)currentUserProfileView:(DWCurrentUserProfileView *)view showQRAction:(UIButton *)sender; +- (void)currentUserProfileView:(DWCurrentUserProfileView *)view editProfileAction:(UIButton *)sender; + +@end + +@interface DWCurrentUserProfileView : UIView + +@property (nullable, nonatomic, weak) id delegate; +@property (nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.m b/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.m new file mode 100644 index 000000000..d3f277c2e --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWCurrentUserProfileView.m @@ -0,0 +1,160 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWCurrentUserProfileView.h" + +#import "DSBlockchainIdentity+DWDisplayTitleSubtitle.h" +#import "DWButton.h" +#import "DWUIKit.h" + +#import "UIImageView+DWDPAvatar.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const AvatarSize = 134.0; +static CGSize const ShowQRSize = {46.0, 45.0}; + +@interface DWCurrentUserProfileView () + +@property (readonly, nonatomic, strong) UIImageView *avatarImageView; +@property (readonly, nonatomic, strong) UILabel *infoLabel; +@property (readonly, nonatomic, strong) UIButton *editProfileButton; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWCurrentUserProfileView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIImageView *avatarImageView = [[UIImageView alloc] init]; + avatarImageView.translatesAutoresizingMaskIntoConstraints = NO; + avatarImageView.image = [UIImage imageNamed:@"dp_current_user_placeholder"]; + avatarImageView.layer.cornerRadius = AvatarSize / 2.0; + avatarImageView.layer.masksToBounds = YES; + [self addSubview:avatarImageView]; + _avatarImageView = avatarImageView; + + UIButton *showQRButton = [UIButton buttonWithType:UIButtonTypeCustom]; + showQRButton.translatesAutoresizingMaskIntoConstraints = NO; + [showQRButton setImage:[UIImage imageNamed:@"dp_show_qr"] forState:UIControlStateNormal]; + [showQRButton addTarget:self action:@selector(showQRButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:showQRButton]; + + UILabel *infoLabel = [[UILabel alloc] init]; + infoLabel.translatesAutoresizingMaskIntoConstraints = NO; + infoLabel.numberOfLines = 0; + infoLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:infoLabel]; + _infoLabel = infoLabel; + + DWButton *editProfileButton = [DWButton buttonWithType:UIButtonTypeSystem]; + editProfileButton.translatesAutoresizingMaskIntoConstraints = NO; + editProfileButton.tintColor = [UIColor dw_dashBlueColor]; + [editProfileButton setTitle:NSLocalizedString(@"Edit Profile", nil) forState:UIControlStateNormal]; + [editProfileButton addTarget:self action:@selector(editProfileButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:editProfileButton]; + _editProfileButton = editProfileButton; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(reloadAttributedData) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + + const CGFloat padding = 20.0; + const CGFloat spacing = 32.0; + [NSLayoutConstraint activateConstraints:@[ + [avatarImageView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:spacing], + [avatarImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [avatarImageView.widthAnchor constraintEqualToConstant:AvatarSize], + [avatarImageView.heightAnchor constraintEqualToConstant:AvatarSize], + + [showQRButton.trailingAnchor constraintEqualToAnchor:avatarImageView.trailingAnchor], + [showQRButton.bottomAnchor constraintEqualToAnchor:avatarImageView.bottomAnchor], + [showQRButton.widthAnchor constraintEqualToConstant:ShowQRSize.width], + [showQRButton.heightAnchor constraintEqualToConstant:ShowQRSize.height], + + [infoLabel.topAnchor constraintEqualToAnchor:avatarImageView.bottomAnchor + constant:20], + [infoLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:infoLabel.trailingAnchor + constant:padding], + + [editProfileButton.topAnchor constraintEqualToAnchor:infoLabel.bottomAnchor + constant:8.0], + [editProfileButton.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:editProfileButton.trailingAnchor + constant:padding], + [self.bottomAnchor constraintEqualToAnchor:editProfileButton.bottomAnchor + constant:44.0], + [editProfileButton.heightAnchor constraintEqualToConstant:spacing], + ]]; + } + return self; +} + +- (void)setBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + _blockchainIdentity = blockchainIdentity; + + self.avatarImageView.image = [UIImage imageNamed:@"dp_current_user_placeholder"]; + + __weak typeof(self) weakSelf = self; + [self.avatarImageView dw_setAvatarWithURLString:blockchainIdentity.avatarPath + completion:^(UIImage *_Nullable image) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image) { + strongSelf.avatarImageView.image = image; + } + else { + strongSelf.avatarImageView.image = [UIImage imageNamed:@"dp_current_user_placeholder"]; + } + }]; + + [self reloadAttributedData]; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +- (void)showQRButtonAction:(UIButton *)sender { + [self.delegate currentUserProfileView:self showQRAction:sender]; +} + +- (void)editProfileButtonAction:(UIButton *)sender { + [self.delegate currentUserProfileView:self editProfileAction:sender]; +} + +#pragma mark - Private + +- (void)reloadAttributedData { + self.infoLabel.attributedText = [self.blockchainIdentity dw_asTitleSubtitle]; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.h b/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.h new file mode 100644 index 000000000..2b4165713 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWErrorUpdatingUserProfileView; + +@protocol DWErrorUpdatingUserProfileViewDelegate + +- (void)errorUpdatingUserProfileView:(DWErrorUpdatingUserProfileView *)view retryAction:(UIButton *)sender; +- (void)errorUpdatingUserProfileView:(DWErrorUpdatingUserProfileView *)view cancelAction:(UIButton *)sender; + +@end + +@interface DWErrorUpdatingUserProfileView : UIView + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.m b/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.m new file mode 100644 index 000000000..bb82be755 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWErrorUpdatingUserProfileView.m @@ -0,0 +1,123 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWErrorUpdatingUserProfileView.h" + +#import "dashwallet-Swift.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const ButtonHeight = 39.0; + +@interface DWErrorUpdatingUserProfileView () +@end + +NS_ASSUME_NONNULL_END + +@implementation DWErrorUpdatingUserProfileView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + self.layer.cornerRadius = 8.0; + self.layer.masksToBounds = YES; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:contentView]; + + UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_error"]]; + iconImageView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:iconImageView]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + titleLabel.textColor = [UIColor dw_secondaryTextColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.adjustsFontSizeToFitWidth = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.text = NSLocalizedString(@"Error updating your profile", nil); + [contentView addSubview:titleLabel]; + + DWActionButton *retryButton = [[DWActionButton alloc] init]; + retryButton.translatesAutoresizingMaskIntoConstraints = NO; + [retryButton setTitle:NSLocalizedString(@"Try again", nil) forState:UIControlStateNormal]; + [retryButton addTarget:self + action:@selector(retryButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + + PlainButton *cancelButton = [[PlainButton alloc] init]; + cancelButton.translatesAutoresizingMaskIntoConstraints = NO; + [cancelButton setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal]; + [cancelButton addTarget:self + action:@selector(cancelButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ retryButton, cancelButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisHorizontal; + stackView.distribution = UIStackViewDistributionFillEqually; + stackView.spacing = 9.0; + stackView.alignment = UIStackViewAlignmentCenter; + [contentView addSubview:stackView]; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [contentView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:contentView.bottomAnchor], + [self.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:padding], + [contentView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + + [iconImageView.topAnchor constraintEqualToAnchor:contentView.topAnchor], + [iconImageView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:iconImageView.bottomAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + + [stackView.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:50], + [stackView.leadingAnchor constraintGreaterThanOrEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintGreaterThanOrEqualToAnchor:stackView.trailingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor], + [stackView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [retryButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [cancelButton.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + } + return self; +} + +- (void)cancelButtonAction:(UIButton *)sender { + [self.delegate errorUpdatingUserProfileView:self cancelAction:sender]; +} + +- (void)retryButtonAction:(UIButton *)sender { + [self.delegate errorUpdatingUserProfileView:self retryAction:sender]; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.h b/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.h new file mode 100644 index 000000000..657868c9c --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdatingUserProfileView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.m b/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.m new file mode 100644 index 000000000..6def9b37a --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWUpdatingUserProfileView.m @@ -0,0 +1,103 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUpdatingUserProfileView.h" + +#import "DWDashPayAnimationView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdatingUserProfileView () + +@property (readonly, nonatomic, strong) DWDashPayAnimationView *loadingView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUpdatingUserProfileView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + self.layer.cornerRadius = 8.0; + self.layer.masksToBounds = YES; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = self.backgroundColor; + [self addSubview:contentView]; + + DWDashPayAnimationView *loadingView = [[DWDashPayAnimationView alloc] init]; + loadingView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:loadingView]; + _loadingView = loadingView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + titleLabel.textColor = [UIColor dw_secondaryTextColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.adjustsFontSizeToFitWidth = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.text = NSLocalizedString(@"Updating Profile on Dash Network", nil); + [contentView addSubview:titleLabel]; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [contentView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:contentView.bottomAnchor], + [self.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:padding], + [contentView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + + [loadingView.topAnchor constraintEqualToAnchor:contentView.topAnchor], + [loadingView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:loadingView.bottomAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor], + ]]; + } + return self; +} + +- (void)willMoveToWindow:(nullable UIWindow *)newWindow { + [super willMoveToWindow:newWindow]; + + if (newWindow == nil) { + [self.loadingView stopAnimating]; + } +} + +- (void)didMoveToWindow { + [super didMoveToWindow]; + + if (self.window) { + [self.loadingView startAnimating]; + } +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.h b/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.h new file mode 100644 index 000000000..c6c1ad298 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.h @@ -0,0 +1,34 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +#import "DWCurrentUserProfileView.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWCurrentUserProfileModel; + +@interface DWUserProfileContainerView : UIView + +@property (nonatomic, strong) DWCurrentUserProfileModel *userModel; +@property (nullable, nonatomic, weak) id delegate; + +- (void)update; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.m b/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.m new file mode 100644 index 000000000..b92ec54c3 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/DWUserProfileContainerView.m @@ -0,0 +1,137 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUserProfileContainerView.h" + +#import "DWCurrentUserProfileModel.h" +#import "DWErrorUpdatingUserProfileView.h" +#import "DWUIKit.h" +#import "DWUpdatingUserProfileView.h" +#import "DWDashPayModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUserProfileContainerView () + +@property (readonly, nonatomic, strong) DWCurrentUserProfileView *profileView; +@property (readonly, nonatomic, strong) DWUpdatingUserProfileView *updatingView; +@property (readonly, nonatomic, strong) DWErrorUpdatingUserProfileView *errorView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUserProfileContainerView + +- (id)delegate { + return self.profileView.delegate; +} + +- (void)setDelegate:(id)delegate { + self.profileView.delegate = delegate; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + DWCurrentUserProfileView *profileView = [[DWCurrentUserProfileView alloc] init]; + profileView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:profileView]; + _profileView = profileView; + + DWUpdatingUserProfileView *updatingView = [[DWUpdatingUserProfileView alloc] init]; + updatingView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:updatingView]; + _updatingView = updatingView; + + DWErrorUpdatingUserProfileView *errorView = [[DWErrorUpdatingUserProfileView alloc] init]; + errorView.translatesAutoresizingMaskIntoConstraints = NO; + errorView.delegate = self; + [self addSubview:errorView]; + _errorView = errorView; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [profileView.topAnchor constraintEqualToAnchor:self.topAnchor], + [profileView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.bottomAnchor constraintEqualToAnchor:profileView.bottomAnchor], + [self.trailingAnchor constraintEqualToAnchor:profileView.trailingAnchor], + + [updatingView.topAnchor constraintEqualToAnchor:self.topAnchor], + [updatingView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.bottomAnchor constraintEqualToAnchor:updatingView.bottomAnchor + constant:5.0], + [self.trailingAnchor constraintEqualToAnchor:updatingView.trailingAnchor + constant:padding], + + [errorView.topAnchor constraintEqualToAnchor:self.topAnchor], + [errorView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.bottomAnchor constraintEqualToAnchor:errorView.bottomAnchor + constant:5.0], + [self.trailingAnchor constraintEqualToAnchor:errorView.trailingAnchor + constant:padding], + ]]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(registrationStatusDidUpdate) + name:DWDashPayRegistrationStatusUpdatedNotification + object:nil]; + + [self registrationStatusDidUpdate]; + } + return self; +} + +- (void)registrationStatusDidUpdate { + switch (self.userModel.updateModel.state) { + case DWDPUpdateProfileModelState_Ready: + [self update]; + self.profileView.hidden = NO; + self.updatingView.hidden = YES; + self.errorView.hidden = YES; + break; + case DWDPUpdateProfileModelState_Loading: + self.profileView.hidden = YES; + self.updatingView.hidden = NO; + self.errorView.hidden = YES; + break; + case DWDPUpdateProfileModelState_Error: + self.profileView.hidden = YES; + self.updatingView.hidden = YES; + self.errorView.hidden = NO; + break; + } +} + +- (void)update { + self.profileView.blockchainIdentity = self.userModel.blockchainIdentity; +} + +#pragma mark - DWErrorUpdatingUserProfileViewDelegate + +- (void)errorUpdatingUserProfileView:(DWErrorUpdatingUserProfileView *)view retryAction:(UIButton *)sender { + [self.userModel.updateModel retry]; +} + +- (void)errorUpdatingUserProfileView:(DWErrorUpdatingUserProfileView *)view cancelAction:(UIButton *)sender { + [self.userModel.updateModel reset]; + [self.userModel update]; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.h b/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.h new file mode 100644 index 000000000..1a520cda5 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DSBlockchainIdentity.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DSBlockchainIdentity (DWDisplayTitleSubtitle) + +- (NSAttributedString *)dw_asTitleSubtitle; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.m b/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.m new file mode 100644 index 000000000..784dc557c --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/Models/DSBlockchainIdentity+DWDisplayTitleSubtitle.m @@ -0,0 +1,59 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DSBlockchainIdentity+DWDisplayTitleSubtitle.h" + +#import + +#import "DWUIKit.h" + +@implementation DSBlockchainIdentity (DWDisplayTitleSubtitle) + +- (NSAttributedString *)dw_asTitleSubtitle { + NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; + [result beginEditing]; + NSString *title = nil; + NSString *subtitle = nil; + if (self.displayName != nil) { + title = self.displayName; + subtitle = self.currentDashpayUsername; + } + else { + title = self.currentDashpayUsername; + } + if (title != nil) { + [result appendAttributedString:[[NSAttributedString alloc] + initWithString:title + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3], + NSForegroundColorAttributeName : [UIColor dw_darkTitleColor], + }]]; + } + if (subtitle != nil) { + [result appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]]; + [result appendAttributedString:[[NSAttributedString alloc] + initWithString:subtitle + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleCallout], + NSForegroundColorAttributeName : [UIColor dw_tertiaryTextColor], + }]]; + } + [result endEditing]; + return result; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.h b/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.h new file mode 100644 index 000000000..581662f3e --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.h @@ -0,0 +1,41 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, DWDPUpdateProfileModelState) { + DWDPUpdateProfileModelState_Ready, + DWDPUpdateProfileModelState_Loading, + DWDPUpdateProfileModelState_Error, +}; + +@interface DWDPUpdateProfileModel : NSObject + +@property (readonly, nonatomic, assign) DWDPUpdateProfileModelState state; + +- (void)updateWithDisplayName:(NSString *)rawDisplayName + aboutMe:(NSString *)rawAboutMe + avatarURLString:(nullable NSString *)avatarURLString; + +- (void)retry; +- (void)reset; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.m b/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.m new file mode 100644 index 000000000..922c315a0 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfile/Models/DWDPUpdateProfileModel.m @@ -0,0 +1,92 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPUpdateProfileModel.h" + +#import "DWEnvironment.h" + +// if MOCK_DASHPAY +#import "DWDashPayConstants.h" +#import "DWGlobalOptions.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPUpdateProfileModel () + +@property (nonatomic, assign) DWDPUpdateProfileModelState state; +@property (readonly, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPUpdateProfileModel + +- (DSBlockchainIdentity *)blockchainIdentity { + if (MOCK_DASHPAY) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + return [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + return [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; +} + +- (void)updateWithDisplayName:(NSString *)rawDisplayName + aboutMe:(NSString *)rawAboutMe + avatarURLString:(nullable NSString *)avatarURLString { + NSString *displayName = rawDisplayName; + if ([rawDisplayName isEqualToString:self.blockchainIdentity.currentDashpayUsername]) { + displayName = @""; + } + displayName = [displayName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + NSString *aboutMe = [rawAboutMe stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + NSString *avatar = avatarURLString; + if (avatar.length == 0) { + avatar = nil; + } + + [self.blockchainIdentity updateDashpayProfileWithDisplayName:displayName + publicMessage:aboutMe + avatarURLString:avatar]; + + [self retry]; +} + +- (void)retry { + self.state = DWDPUpdateProfileModelState_Loading; + + __weak typeof(self) weakSelf = self; + [self.blockchainIdentity signAndPublishProfileWithCompletion:^(BOOL success, BOOL cancelled, NSError *_Nonnull error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + strongSelf.state = success ? DWDPUpdateProfileModelState_Ready : DWDPUpdateProfileModelState_Error; + }]; +} + +- (void)reset { + self.state = DWDPUpdateProfileModelState_Ready; +} + +@end diff --git a/DashPay/Presentation/Profile/UserProfileModalQR/DWDWUserProfileModalQRContentView.h b/DashPay/Presentation/Profile/UserProfileModalQR/DWDWUserProfileModalQRContentView.h new file mode 100644 index 000000000..84542e865 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfileModalQR/DWDWUserProfileModalQRContentView.h @@ -0,0 +1,46 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWReceiveModelProtocol; +@class DWUserProfileModalQRContentView; + +@protocol DWDWUserProfileModalQRContentViewDelegate + +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view shareButtonAction:(UIButton *)sender; +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view closeButtonAction:(UIButton *)sender; + +@end + +@interface DWUserProfileModalQRContentView : KVOUIView + +@property (nullable, weak, nonatomic) id delegate; + +- (void)viewDidAppear; + +- (instancetype)initWithModel:(id)model; + +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.h b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.h new file mode 100644 index 000000000..827485425 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.h @@ -0,0 +1,46 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWReceiveModelProtocol; +@class DWUserProfileModalQRContentView; + +@protocol DWUserProfileModalQRContentViewDelegate + +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view shareButtonAction:(UIButton *)sender; +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view closeButtonAction:(UIButton *)sender; + +@end + +@interface DWUserProfileModalQRContentView : KVOUIView + +@property (nullable, weak, nonatomic) id delegate; + +- (void)viewDidAppear; + +- (instancetype)initWithModel:(id)model; + +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.m b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.m new file mode 100644 index 000000000..396628184 --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRContentView.m @@ -0,0 +1,174 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUserProfileModalQRContentView.h" + +#import "DSBlockchainIdentity+DWDisplayTitleSubtitle.h" +#import "dashwallet-Swift.h" +#import "DWEnvironment.h" +#import "DWReceiveModelProtocol.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const ButtonHeight = 39.0; + +@interface DWUserProfileModalQRContentView () + +@property (nonatomic, strong) id model; + +@property (readonly, strong, nonatomic) UIButton *qrCodeButton; +@property (readonly, strong, nonatomic) UILabel *infoLabel; + +@property (nonatomic, strong) UINotificationFeedbackGenerator *feedbackGenerator; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUserProfileModalQRContentView + +- (instancetype)initWithModel:(id)model { + self = [super initWithFrame:CGRectZero]; + if (self) { + _model = model; + + self.backgroundColor = [UIColor dw_backgroundColor]; + + _feedbackGenerator = [[UINotificationFeedbackGenerator alloc] init]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = self.backgroundColor; + [self addSubview:contentView]; + + UIButton *qrCodeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + qrCodeButton.translatesAutoresizingMaskIntoConstraints = NO; + qrCodeButton.backgroundColor = [UIColor whiteColor]; + [qrCodeButton addTarget:self action:@selector(qrCodeButtonAction) forControlEvents:UIControlEventTouchUpInside]; + [contentView addSubview:qrCodeButton]; + _qrCodeButton = qrCodeButton; + + UILabel *infoLabel = [[UILabel alloc] init]; + infoLabel.translatesAutoresizingMaskIntoConstraints = NO; + infoLabel.numberOfLines = 0; + infoLabel.textAlignment = NSTextAlignmentCenter; + [contentView addSubview:infoLabel]; + _infoLabel = infoLabel; + + DWActionButton *shareButton = [[DWActionButton alloc] init]; + [shareButton setTitle:NSLocalizedString(@"Share", nil) forState:UIControlStateNormal]; + [shareButton addTarget:self + action:@selector(shareButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + + PlainButton *closeButton = [[PlainButton alloc] init]; + [closeButton setTitle:NSLocalizedString(@"Close", nil) forState:UIControlStateNormal]; + [closeButton addTarget:self + action:@selector(closeButtonAction:) + forControlEvents:UIControlEventTouchUpInside]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ shareButton, closeButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + stackView.spacing = 10.0; + [contentView addSubview:stackView]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(reloadAttributedData) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + + const CGFloat spacing = 44.0; + const CGSize qrSize = model.qrCodeSize; + const CGFloat interitem = 24.0; + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [contentView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:contentView.bottomAnchor], + [contentView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:padding], + + [qrCodeButton.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:spacing], + [qrCodeButton.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + [qrCodeButton.widthAnchor constraintEqualToConstant:qrSize.width], + [qrCodeButton.heightAnchor constraintEqualToConstant:qrSize.height], + + [infoLabel.topAnchor constraintEqualToAnchor:qrCodeButton.bottomAnchor + constant:interitem], + [infoLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:infoLabel.trailingAnchor], + + [stackView.topAnchor constraintEqualToAnchor:infoLabel.bottomAnchor + constant:interitem], + [stackView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + // [stackView.centerXAnchor ] + // [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + // constant:padding], + // [self.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor + // constant:padding], + [contentView.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor + constant:spacing], + + [shareButton.heightAnchor constraintEqualToConstant:ButtonHeight], + [closeButton.heightAnchor constraintEqualToConstant:ButtonHeight], + ]]; + + [self mvvm_observe:DW_KEYPATH(self, model.qrCodeImage) + with:^(typeof(self) self, UIImage *value) { + [self.qrCodeButton setImage:value forState:UIControlStateNormal]; + self.qrCodeButton.hidden = (value == nil); + }]; + } + return self; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +- (void)viewDidAppear { + [self reloadAttributedData]; + [self.feedbackGenerator prepare]; +} + +- (void)reloadAttributedData { + DSBlockchainIdentity *blockchainIdentity = [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; + self.infoLabel.attributedText = [blockchainIdentity dw_asTitleSubtitle]; +} + +- (void)qrCodeButtonAction { + [self.feedbackGenerator notificationOccurred:UINotificationFeedbackTypeSuccess]; + + [self.model copyQRImageToPasteboard]; +} + +- (void)shareButtonAction:(UIButton *)sender { + [self.delegate userProfileModalQRContentView:self shareButtonAction:sender]; +} + +- (void)closeButtonAction:(UIButton *)sender { + [self.delegate userProfileModalQRContentView:self closeButtonAction:sender]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.h b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.h similarity index 85% rename from DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.h rename to DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.h index 14149d9b9..2f50e60cc 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.h +++ b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.h @@ -17,13 +17,13 @@ #import -#import "DWDashPayProtocol.h" - NS_ASSUME_NONNULL_BEGIN -@interface DWDashPaySetupFlowController : UIViewController +@protocol DWReceiveModelProtocol; + +@interface DWUserProfileModalQRViewController : UIViewController -- (instancetype)initWithDashPayModel:(id)dashPayModel; +- (instancetype)initWithModel:(id)model; - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE; diff --git a/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.m b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.m new file mode 100644 index 000000000..7cb3f11bc --- /dev/null +++ b/DashPay/Presentation/Profile/UserProfileModalQR/DWUserProfileModalQRViewController.m @@ -0,0 +1,102 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUserProfileModalQRViewController.h" + +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" +#import "DWUserProfileModalQRContentView.h" +#import "UIViewController+DWShareReceiveInfo.h" + +static CGFloat const CORNER_RADIUS = 8.0; + +static CGFloat VerticalPadding(void) { + if (IS_IPAD) { + return 32.0; + } + else if (IS_IPHONE_6 || IS_IPHONE_5_OR_LESS) { + return 16.0; + } + else { + return 24.0; + } +} + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUserProfileModalQRViewController () + +@property (readonly, nonatomic, strong) id model; + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWUserProfileModalQRViewController + +- (instancetype)initWithModel:(id)model { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _model = model; + + _modalTransition = [[DWModalPopupTransition alloc] init]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_backgroundColor]; + self.view.clipsToBounds = YES; + self.view.layer.cornerRadius = CORNER_RADIUS; + + UIView *contentView = self.view; + + DWUserProfileModalQRContentView *childView = [[DWUserProfileModalQRContentView alloc] initWithModel:self.model]; + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.delegate = self; + [contentView addSubview:childView]; + + const CGFloat padding = VerticalPadding(); + [NSLayoutConstraint activateConstraints:@[ + [childView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [childView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [childView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [childView.topAnchor constraintGreaterThanOrEqualToAnchor:contentView.topAnchor + constant:padding], + [childView.bottomAnchor constraintGreaterThanOrEqualToAnchor:contentView.bottomAnchor + constant:-padding], + ]]; +} + +#pragma mark - DWUserProfileModalQRContentViewDelegate + +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view closeButtonAction:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)userProfileModalQRContentView:(DWUserProfileModalQRContentView *)view shareButtonAction:(UIButton *)sender { + [self dw_shareReceiveInfo:self.model sender:sender]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/DWConfirmUsernameViewController.h b/DashPay/Presentation/Setup/ConfirmUsername/DWConfirmUsernameViewController.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/DWConfirmUsernameViewController.h rename to DashPay/Presentation/Setup/ConfirmUsername/DWConfirmUsernameViewController.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/DWConfirmUsernameViewController.m b/DashPay/Presentation/Setup/ConfirmUsername/DWConfirmUsernameViewController.m similarity index 97% rename from DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/DWConfirmUsernameViewController.m rename to DashPay/Presentation/Setup/ConfirmUsername/DWConfirmUsernameViewController.m index 23c1250cb..6881fa893 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/DWConfirmUsernameViewController.m +++ b/DashPay/Presentation/Setup/ConfirmUsername/DWConfirmUsernameViewController.m @@ -44,7 +44,7 @@ + (BOOL)isActionButtonInNavigationBar { } - (NSString *)actionButtonTitle { - return NSLocalizedString(@"Confirm & Pay", nil); + return NSLocalizedString(@"Confirm", nil); } - (void)viewDidLoad { diff --git a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.h b/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.h rename to DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m b/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m similarity index 81% rename from DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m rename to DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m index 454138df6..f78bb854a 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m +++ b/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.m @@ -18,7 +18,6 @@ #import "DWConfirmUsernameContentView.h" #import "DWCheckbox.h" -#import "DWDashPayConstants.h" #import "DWUIKit.h" #import "dashwallet-Swift.h" #import @@ -30,9 +29,6 @@ @interface DWConfirmUsernameContentView () @property (strong, nonatomic) IBOutlet UIView *contentView; -@property (weak, nonatomic) IBOutlet UILabel *titleLabel; -@property (weak, nonatomic) IBOutlet UILabel *mainAmountLabel; -@property (weak, nonatomic) IBOutlet UILabel *supplementaryAmountLabel; @property (weak, nonatomic) IBOutlet UILabel *descriptionLabel; @property (weak, nonatomic) IBOutlet DWCheckbox *confirmationCheckbox; @@ -72,16 +68,6 @@ - (void)commonInit { self.backgroundColor = [UIColor dw_backgroundColor]; - self.titleLabel.text = NSLocalizedString(@"Upgrade Fee", nil); - - // These two labels doesn't support Dynamic Type and have same hardcoded values as in DWAmountInputControl - self.mainAmountLabel.font = [UIFont dw_regularFontOfSize:34.0]; - self.supplementaryAmountLabel.font = [UIFont dw_regularFontOfSize:16.0]; - - const uint64_t amount = DWDP_MIN_BALANCE_TO_CREATE_USERNAME; - self.mainAmountLabel.attributedText = [self mainAmountAttributedStringForAmount:amount]; - self.supplementaryAmountLabel.text = [self supplementaryAmountStringForAmount:amount]; - self.confirmationCheckbox.title = NSLocalizedString(@"I Accept", nil); self.confirmationCheckbox.backgroundColor = self.backgroundColor; @@ -113,7 +99,7 @@ - (void)reloadAttributedData { } UIColor *color = [UIColor dw_secondaryTextColor]; - NSString *format = NSLocalizedString(@"You have chosen \"%@\" as your username. Your username cannot be changed once registered.", nil); + NSString *format = NSLocalizedString(@"You have chose \"%@\" as your username. Username cannot be changed once it is registered.", nil); NSString *text = [NSString stringWithFormat:format, self.username]; NSDictionary *attributes = @{ @@ -147,7 +133,8 @@ - (NSAttributedString *)mainAmountAttributedStringForAmount:(uint64_t)amount { } - (NSString *)supplementaryAmountStringForAmount:(uint64_t)amount { - NSString *supplementaryAmount = [CurrencyExchangerObjcWrapper localCurrencyStringForDashAmount:amount]; + DSPriceManager *priceManager = [DSPriceManager sharedInstance]; + NSString *supplementaryAmount = [priceManager localCurrencyStringForDashAmount:amount]; return supplementaryAmount; } diff --git a/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.xib b/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.xib new file mode 100644 index 000000000..d65b13d3a --- /dev/null +++ b/DashPay/Presentation/Setup/ConfirmUsername/Views/DWConfirmUsernameContentView.xib @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWCreateUsernameViewController.h b/DashPay/Presentation/Setup/CreateUsername/DWCreateUsernameViewController.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWCreateUsernameViewController.h rename to DashPay/Presentation/Setup/CreateUsername/DWCreateUsernameViewController.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWCreateUsernameViewController.m b/DashPay/Presentation/Setup/CreateUsername/DWCreateUsernameViewController.m similarity index 77% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWCreateUsernameViewController.m rename to DashPay/Presentation/Setup/CreateUsername/DWCreateUsernameViewController.m index cdc9b1650..ba8fe1b31 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWCreateUsernameViewController.m +++ b/DashPay/Presentation/Setup/CreateUsername/DWCreateUsernameViewController.m @@ -26,8 +26,6 @@ @interface DWCreateUsernameViewController () @property (readonly, nonatomic, strong) id dashPayModel; - -@property (null_resettable, nonatomic, strong) UIScrollView *scrollView; @property (null_resettable, nonatomic, strong) DWInputUsernameViewController *inputUsername; @end @@ -83,38 +81,17 @@ - (void)viewDidLoad { self.view.clipsToBounds = YES; self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - [self.view addSubview:self.scrollView]; - - const BOOL isLandscape = CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds); - - [NSLayoutConstraint activateConstraints:@[ - [self.scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [self.scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.view.trailingAnchor constraintEqualToAnchor:self.scrollView.trailingAnchor], - [self.view.bottomAnchor constraintEqualToAnchor:self.scrollView.bottomAnchor], - [self.scrollView.widthAnchor constraintEqualToAnchor:self.view.widthAnchor], - ]]; - - [self dw_embedChild:self.inputUsername inContainer:self.scrollView]; + [self dw_embedChild:self.inputUsername inContainer:self.view]; - NSLayoutConstraint *heightConstraint = [self.inputUsername.view.heightAnchor constraintEqualToAnchor:self.scrollView.heightAnchor]; + NSLayoutConstraint *heightConstraint = [self.inputUsername.view.heightAnchor constraintEqualToAnchor:self.view.heightAnchor]; heightConstraint.priority = UILayoutPriorityRequired - 1; [NSLayoutConstraint activateConstraints:@[ heightConstraint, - [self.inputUsername.view.widthAnchor constraintEqualToAnchor:self.scrollView.widthAnchor] + [self.inputUsername.view.widthAnchor constraintEqualToAnchor:self.view.widthAnchor] ]]; } -- (UIScrollView *)scrollView { - if (_scrollView == nil) { - _scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; - _scrollView.translatesAutoresizingMaskIntoConstraints = NO; - } - - return _scrollView; -} - - (DWInputUsernameViewController *)inputUsername { if (_inputUsername == nil) { _inputUsername = [[DWInputUsernameViewController alloc] init]; diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.h b/DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.h similarity index 91% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.h rename to DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.h index 9b34ea0cd..ff280c6a1 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.h +++ b/DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.h @@ -15,7 +15,7 @@ // limitations under the License. // -#import +#import "DWBaseViewController.h" NS_ASSUME_NONNULL_BEGIN @@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN @end -@interface DWInputUsernameViewController : UIViewController +@interface DWInputUsernameViewController : DWBaseViewController @property (nullable, nonatomic, copy) NSString *text; @property (nullable, nonatomic, weak) id delegate; diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.m b/DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.m similarity index 85% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.m rename to DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.m index 63bdd9641..5039d8ada 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/DWInputUsernameViewController.m +++ b/DashPay/Presentation/Setup/CreateUsername/DWInputUsernameViewController.m @@ -23,8 +23,8 @@ #import "DWBaseActionButtonViewController.h" #import "DWCheckExistenceUsernameValidationRule.h" #import "DWDashPayConstants.h" -#import "DWMaxLengthUsernameValidationRule.h" -#import "DWMinLengthUsernameValidationRule.h" +#import "DWFirstUsernameSymbolValidationRule.h" +#import "DWLengthUsernameValidationRule.h" #import "DWTextField.h" #import "DWUIKit.h" #import "DWUsernameValidationView.h" @@ -38,6 +38,7 @@ @interface DWInputUsernameViewController () +@property (null_resettable, nonatomic, strong) UIStackView *stackView; @property (null_resettable, nonatomic, strong) UITextField *textField; @property (null_resettable, nonatomic, strong) UIStackView *validationContentView; @property (nonatomic, copy) NSArray *validationViews; @@ -67,9 +68,9 @@ - (void)viewDidLoad { self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; NSArray *validators = @[ - [[DWMinLengthUsernameValidationRule alloc] init], + [[DWLengthUsernameValidationRule alloc] init], [[DWAllowedCharactersUsernameValidationRule alloc] init], - [[DWMaxLengthUsernameValidationRule alloc] init], + [[DWFirstUsernameSymbolValidationRule alloc] init], self.checkExistenceValidator, ]; @@ -89,9 +90,12 @@ - (void)viewDidLoad { stackView.translatesAutoresizingMaskIntoConstraints = NO; stackView.alignment = UIStackViewAlignmentTop; - [self.view addSubview:self.textField]; - [self.view addSubview:stackView]; - [self.view addSubview:self.registerButton]; + [self.view addSubview:self.stackView]; + + [self.stackView addArrangedSubview: self.textField]; + [self.stackView addArrangedSubview: stackView]; + [self.stackView addArrangedSubview: [UIView new]]; + [self.stackView addArrangedSubview: self.registerButton]; [self updateValidationContentViewForSize:self.view.bounds.size]; @@ -100,27 +104,19 @@ - (void)viewDidLoad { const CGFloat bottomPadding = [self.class deviceSpecificBottomPadding]; // constraint relation is inverted so we can use positive padding values - self.contentBottomConstraint = [safeAreaGuide.bottomAnchor constraintEqualToAnchor:self.registerButton.bottomAnchor + self.contentBottomConstraint = [safeAreaGuide.bottomAnchor constraintEqualToAnchor:self.stackView.bottomAnchor constant:bottomPadding]; [NSLayoutConstraint activateConstraints:@[ - [self.textField.topAnchor constraintEqualToAnchor:safeAreaGuide.topAnchor + [self.textField.heightAnchor constraintLessThanOrEqualToConstant:TEXTFIELD_MAX_HEIGHT], + [self.registerButton.heightAnchor constraintEqualToConstant:DWBottomButtonHeight()], + + [self.stackView.topAnchor constraintEqualToAnchor:safeAreaGuide.topAnchor constant:SPACING], - [self.textField.leadingAnchor constraintEqualToAnchor:marginsGuide.leadingAnchor], - [marginsGuide.trailingAnchor constraintEqualToAnchor:self.textField.trailingAnchor], - [self.textField.heightAnchor constraintLessThanOrEqualToConstant:TEXTFIELD_MAX_HEIGHT], - - [stackView.topAnchor constraintEqualToAnchor:self.textField.bottomAnchor - constant:SPACING], - [stackView.leadingAnchor constraintEqualToAnchor:marginsGuide.leadingAnchor], - [marginsGuide.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor], - - [self.registerButton.topAnchor constraintEqualToAnchor:stackView.bottomAnchor - constant:SPACING], - [self.registerButton.leadingAnchor constraintEqualToAnchor:marginsGuide.leadingAnchor], - [self.registerButton.trailingAnchor constraintEqualToAnchor:marginsGuide.trailingAnchor], - [self.registerButton.heightAnchor constraintEqualToConstant:DWBottomButtonHeight()], - self.contentBottomConstraint, + [self.stackView.leadingAnchor constraintEqualToAnchor:marginsGuide.leadingAnchor], + [self.stackView.trailingAnchor constraintEqualToAnchor:marginsGuide.trailingAnchor], + //[self.stackView.bottomAnchor constraintEqualToAnchor:safeAreaGuide.bottomAnchor], + self.contentBottomConstraint ]]; } @@ -164,7 +160,7 @@ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRang isDone = YES; string = @""; } - NSString *text = [[self.textField.text stringByReplacingCharactersInRange:range withString:string] lowercaseString]; + NSString *text = [self.textField.text stringByReplacingCharactersInRange:range withString:string]; for (DWUsernameValidationView *validationView in self.validationViews) { DWUsernameValidationRule *validator = validationView.rule; [validator validateText:text]; @@ -199,6 +195,7 @@ - (void)ka_keyboardShowOrHideAnimationWithHeight:(CGFloat)height #pragma mark - Private + - (void)updateValidationContentViewForSize:(CGSize)size { BOOL isLandscape = size.width > size.height; if (isLandscape) { @@ -209,6 +206,17 @@ - (void)updateValidationContentViewForSize:(CGSize)size { } } +- (UIScrollView *)stackView { + if (_stackView == nil) { + _stackView = [[UIStackView alloc] initWithFrame:CGRectZero]; + _stackView.translatesAutoresizingMaskIntoConstraints = NO; + _stackView.axis = UILayoutConstraintAxisVertical; + _stackView.spacing = SPACING; + } + + return _stackView; +} + - (UITextField *)textField { if (_textField == nil) { _textField = [[DWTextField alloc] initWithFrame:CGRectZero]; diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.h rename to DashPay/Presentation/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m b/DashPay/Presentation/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m similarity index 89% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m rename to DashPay/Presentation/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m index 1634a34aa..d6269b439 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWAllowedCharactersUsernameValidationRule.m @@ -34,14 +34,14 @@ @implementation DWAllowedCharactersUsernameValidationRule - (instancetype)init { self = [super init]; if (self) { - NSCharacterSet *allowedCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz0123456789"]; + NSCharacterSet *allowedCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"]; _illegalChars = [allowedCharacterSet invertedSet]; } return self; } - (NSString *)title { - return NSLocalizedString(@"Letters and numbers only", @"Validation rule"); + return NSLocalizedString(@"Letters, numbers and hyphens only", @"Validation rule"); } - (void)validateText:(NSString *)text { diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.h rename to DashPay/Presentation/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m b/DashPay/Presentation/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m similarity index 80% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m rename to DashPay/Presentation/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m index df45e8096..eb9249171 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWCheckExistenceUsernameValidationRule.m @@ -17,8 +17,11 @@ #import "DWCheckExistenceUsernameValidationRule.h" +#import "DWAllowedCharactersUsernameValidationRule.h" #import "DWDashPayConstants.h" #import "DWEnvironment.h" +#import "DWFirstUsernameSymbolValidationRule.h" +#import "DWLengthUsernameValidationRule.h" #import "DWUsernameValidationRule+Protected.h" NS_ASSUME_NONNULL_BEGIN @@ -32,6 +35,7 @@ @interface DWCheckExistenceUsernameValidationRule () @property (nullable, nonatomic, copy) NSString *username; @property (nullable, nonatomic, strong) id request; +@property (readonly, nonatomic, copy) NSArray *validators; @end @@ -44,9 +48,15 @@ - (instancetype)initWithDelegate:(id *titleByResult = [NSMutableDictionary dictionary]; titleByResult[@(DWUsernameValidationRuleResultLoading)] = NSLocalizedString(@"Validating username…", nil); - titleByResult[@(DWUsernameValidationRuleResultValid)] = NSLocalizedString(@"Validating username done", nil); + titleByResult[@(DWUsernameValidationRuleResultValid)] = NSLocalizedString(@"Username available", nil); titleByResult[@(DWUsernameValidationRuleResultError)] = NSLocalizedString(@"Validating username failed", nil); titleByResult[@(DWUsernameValidationRuleResultInvalidCritical)] = NSLocalizedString(@"Username taken", nil); self.titleByResult = titleByResult; @@ -69,9 +79,18 @@ - (void)validateText:(NSString *)text { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(performValidation) object:nil]; self.username = text; - if (text.length < DW_MIN_USERNAME_LENGTH || text.length > DW_MAX_USERNAME_LENGTH) { - self.validationResult = DWUsernameValidationRuleResultHidden; + [self.validators makeObjectsPerformSelector:@selector(validateText:) withObject:text]; + + BOOL hasInvalid = NO; + for (DWUsernameValidationRule *rule in self.validators) { + if (rule.validationResult == DWUsernameValidationRuleResultInvalid) { + hasInvalid = YES; + break; + } + } + if (hasInvalid || text.length == 0) { + self.validationResult = DWUsernameValidationRuleResultHidden; return; } @@ -89,6 +108,15 @@ - (void)performValidation { - (void)performValidationWithUsername:(NSString *)username { DSIdentitiesManager *manager = [DWEnvironment sharedInstance].currentChainManager.identitiesManager; __weak typeof(self) weakSelf = self; + + if (MOCK_DASHPAY) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + self.validationResult = DWUsernameValidationRuleResultValid; + }); + + return; + } + self.request = [manager searchIdentityByDashpayUsername:username withCompletion:^(BOOL succeess, DSBlockchainIdentity *_Nullable blockchainIdentity, NSError *_Nullable error) { diff --git a/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.h new file mode 100644 index 000000000..ec496b710 --- /dev/null +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWUsernameValidationRule.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWFirstUsernameSymbolValidationRule : DWUsernameValidationRule + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.m b/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.m new file mode 100644 index 000000000..9406fcb87 --- /dev/null +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWFirstUsernameSymbolValidationRule.m @@ -0,0 +1,44 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWFirstUsernameSymbolValidationRule.h" + +#import "DWUsernameValidationRule+Protected.h" + +@implementation DWFirstUsernameSymbolValidationRule + +- (NSString *)title { + return NSLocalizedString(@"Must start and end with a letter or number", @"Validation rule"); +} + +- (void)validateText:(NSString *)text { + if (text.length == 0 || [text rangeOfString:@"-"].location == NSNotFound) { + self.validationResult = DWUsernameValidationRuleResultHidden; + return; + } + + // The user should be able use a hyphen anywhere in the username except the first or last characters + if ([text hasPrefix:@"-"] || [text hasSuffix:@"-"]) { + self.validationResult = DWUsernameValidationRuleResultInvalid; + return; + } + + self.validationResult = DWUsernameValidationRuleResultValid; +} + + +@end diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.h similarity index 91% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.h rename to DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.h index 333ebdf0c..b2b3f77da 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMaxLengthUsernameValidationRule.h +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.h @@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface DWMaxLengthUsernameValidationRule : DWUsernameValidationRule +@interface DWLengthUsernameValidationRule : DWUsernameValidationRule @end diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.m b/DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.m similarity index 63% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.m rename to DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.m index c54c345a2..b631b6bba 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWMinLengthUsernameValidationRule.m +++ b/DashPay/Presentation/Setup/CreateUsername/Models/DWLengthUsernameValidationRule.m @@ -15,25 +15,27 @@ // limitations under the License. // -#import "DWMinLengthUsernameValidationRule.h" +#import "DWLengthUsernameValidationRule.h" #import "DWDashPayConstants.h" #import "DWUsernameValidationRule+Protected.h" -@implementation DWMinLengthUsernameValidationRule +@implementation DWLengthUsernameValidationRule - (NSString *)title { - return NSLocalizedString(@"Minimum 3 characters", @"Validation rule"); + return [NSString stringWithFormat:NSLocalizedString(@"Between %ld and %ld characters", @"Validation rule: Between 3 and 24 characters"), DW_MIN_USERNAME_LENGTH, DW_MAX_USERNAME_LENGTH]; } -- (void)validateText:(NSString *_Nullable)text { +- (void)validateText:(NSString *)text { const NSUInteger length = text.length; if (length == 0) { self.validationResult = DWUsernameValidationRuleResultEmpty; return; } - self.validationResult = length >= DW_MIN_USERNAME_LENGTH ? DWUsernameValidationRuleResultValid : DWUsernameValidationRuleResultInvalid; + BOOL isValid = length >= DW_MIN_USERNAME_LENGTH && length <= DW_MAX_USERNAME_LENGTH; + + self.validationResult = isValid ? DWUsernameValidationRuleResultValid : DWUsernameValidationRuleResultInvalid; } @end diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule+Protected.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule+Protected.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule+Protected.h rename to DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule+Protected.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule.h b/DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule.h rename to DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule.m b/DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule.m similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Models/DWUsernameValidationRule.m rename to DashPay/Presentation/Setup/CreateUsername/Models/DWUsernameValidationRule.m diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWPlanetarySystemView.h b/DashPay/Presentation/Setup/CreateUsername/Views/DWPlanetarySystemView.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWPlanetarySystemView.h rename to DashPay/Presentation/Setup/CreateUsername/Views/DWPlanetarySystemView.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWPlanetarySystemView.m b/DashPay/Presentation/Setup/CreateUsername/Views/DWPlanetarySystemView.m similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWPlanetarySystemView.m rename to DashPay/Presentation/Setup/CreateUsername/Views/DWPlanetarySystemView.m diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.h b/DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.h similarity index 83% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.h rename to DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.h index 017848598..88134fb91 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.h +++ b/DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.h @@ -21,6 +21,11 @@ NS_ASSUME_NONNULL_BEGIN @interface DWTextField : UITextField +/// Defaults to 30 +@property (nonatomic, assign) CGFloat horizontalPadding; +/// Defaults to 16 +@property (nonatomic, assign) CGFloat verticalPadding; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.m b/DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.m similarity index 66% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.m rename to DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.m index fea74346e..ec80a3eac 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWTextField.m +++ b/DashPay/Presentation/Setup/CreateUsername/Views/DWTextField.m @@ -17,21 +17,27 @@ #import "DWTextField.h" -static CGFloat const HORIZONTAL_PADDING = 30.0; -static CGFloat const VERTICAL_PADDING = 16.0; - @implementation DWTextField +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + _horizontalPadding = 30; + _verticalPadding = 16; + } + return self; +} + - (CGRect)textRectForBounds:(CGRect)bounds { - return CGRectInset(bounds, HORIZONTAL_PADDING, VERTICAL_PADDING); + return CGRectInset(bounds, self.horizontalPadding, self.verticalPadding); } - (CGRect)editingRectForBounds:(CGRect)bounds { - return CGRectInset(bounds, HORIZONTAL_PADDING, VERTICAL_PADDING); + return CGRectInset(bounds, self.horizontalPadding, self.verticalPadding); } - (CGRect)placeholderRectForBounds:(CGRect)bounds { - return CGRectInset(bounds, HORIZONTAL_PADDING, VERTICAL_PADDING); + return CGRectInset(bounds, self.horizontalPadding, self.verticalPadding); } @end diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameHeaderView.h b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameHeaderView.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameHeaderView.h rename to DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameHeaderView.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameHeaderView.m b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameHeaderView.m similarity index 98% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameHeaderView.m rename to DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameHeaderView.m index aca6488fb..890c168b1 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameHeaderView.m +++ b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameHeaderView.m @@ -115,7 +115,7 @@ static CGFloat PlanetarySize(void) { DWPlanetObject *planet = [[DWPlanetObject alloc] init]; if (username.length > 0) { DWDPAvatarView *avatarView = [[DWDPAvatarView alloc] initWithFrame:(CGRect){{0.0, 0.0}, avatarSize}]; - avatarView.username = username; + [avatarView configureWithUsername:username]; planet.customView = avatarView; } else { @@ -183,7 +183,7 @@ static CGFloat PlanetarySize(void) { DWPlanetObject *planet = [[DWPlanetObject alloc] init]; if (username.length > 0) { DWDPAvatarView *avatarView = [[DWDPAvatarView alloc] initWithFrame:(CGRect){{0.0, 0.0}, avatarSize}]; - avatarView.username = username; + [avatarView configureWithUsername:username]; planet.customView = avatarView; } else { diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameValidationView.h b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameValidationView.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameValidationView.h rename to DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameValidationView.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameValidationView.m b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameValidationView.m similarity index 98% rename from DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameValidationView.m rename to DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameValidationView.m index 805a4e3cc..2059f8e5a 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/CreateUsername/Views/DWUsernameValidationView.m +++ b/DashPay/Presentation/Setup/CreateUsername/Views/DWUsernameValidationView.m @@ -46,7 +46,7 @@ - (instancetype)initWithFrame:(CGRect)frame { [self addSubview:iconImageView]; _iconImageView = iconImageView; - UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; activityIndicatorView.color = [UIColor dw_darkTitleColor]; [self addSubview:activityIndicatorView]; @@ -107,7 +107,7 @@ - (void)setValidationResult:(DWUsernameValidationRuleResult)validationResult { case DWUsernameValidationRuleResultValid: self.hidden = NO; self.iconImageView.image = [UIImage imageNamed:@"validation_checkmark"]; - self.iconImageView.tintColor = [UIColor dw_darkTitleColor]; + self.iconImageView.tintColor = [UIColor dw_greenColor]; self.titleLabel.textColor = [UIColor dw_darkTitleColor]; [self.activityIndicatorView stopAnimating]; break; diff --git a/DashPay/Presentation/Setup/DWDashPaySetupFlowController.h b/DashPay/Presentation/Setup/DWDashPaySetupFlowController.h new file mode 100644 index 000000000..181377b05 --- /dev/null +++ b/DashPay/Presentation/Setup/DWDashPaySetupFlowController.h @@ -0,0 +1,49 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWDashPayProtocol.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWDashPaySetupFlowController; + +@protocol DWDashPaySetupFlowControllerDelegate + +- (void)dashPaySetupFlowController:(DWDashPaySetupFlowController *)controller + didConfirmUsername:(NSString *)username; + +@end + +@interface DWDashPaySetupFlowController : UIViewController + +- (instancetype)initWithDashPayModel:(id)dashPayModel + invitation:(nullable NSURL *)invitationURL + definedUsername:(nullable NSString *)definedUsername; + +- (instancetype)initWithConfirmationDelegate:(id)delegate; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.m b/DashPay/Presentation/Setup/DWDashPaySetupFlowController.m similarity index 82% rename from DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.m rename to DashPay/Presentation/Setup/DWDashPaySetupFlowController.m index 0f5dd09b0..b703e0233 100644 --- a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupFlowController.m +++ b/DashPay/Presentation/Setup/DWDashPaySetupFlowController.m @@ -21,6 +21,7 @@ #import "DWContainerViewController.h" #import "DWCreateUsernameViewController.h" #import "DWDPRegistrationStatus.h" +#import "DWDashPaySetupModel.h" #import "DWRegistrationCompletedViewController.h" #import "DWUIKit.h" #import "DWUsernameHeaderView.h" @@ -49,6 +50,9 @@ @interface DWDashPaySetupFlowController () @property (readonly, nonatomic, strong) id dashPayModel; +@property (nullable, nonatomic, readonly, strong) NSURL *invitationURL; +@property (nullable, nonatomic, readonly, copy) NSString *definedUsername; +@property (nullable, nonatomic, weak) id confirmationDelegate; @property (null_resettable, nonatomic, strong) DWUsernameHeaderView *headerView; @property (null_resettable, nonatomic, strong) UIView *contentView; @@ -63,10 +67,24 @@ @interface DWDashPaySetupFlowController () )dashPayModel { +- (instancetype)initWithDashPayModel:(id)dashPayModel + invitation:(NSURL *)invitationURL + definedUsername:(NSString *)definedUsername { self = [super initWithNibName:nil bundle:nil]; if (self) { _dashPayModel = dashPayModel; + _invitationURL = invitationURL; + _definedUsername = definedUsername; + } + return self; +} + +- (instancetype)initWithConfirmationDelegate:(id)delegate { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _dashPayModel = [[DWDashPaySetupModel alloc] init]; + _invitationURL = nil; + _confirmationDelegate = delegate; } return self; } @@ -137,9 +155,20 @@ - (void)viewDidAppear:(BOOL)animated { [self.headerView showInitialAnimation]; } +#pragma mark - DWNavigationFullscreenable + +- (BOOL)requiresNoNavigationBar { + return YES; +} + #pragma mark - Private - (void)registrationStatusUpdatedNotification { + if (MOCK_DASHPAY) { + [self setCurrentStateController]; + return; + } + if (self.dashPayModel.lastRegistrationError) { [self dw_displayErrorModally:self.dashPayModel.lastRegistrationError]; } @@ -148,6 +177,11 @@ - (void)registrationStatusUpdatedNotification { } - (void)setCurrentStateController { + if (self.definedUsername != nil) { + [self createUsername:self.definedUsername]; + return; + } + if (self.dashPayModel.registrationStatus == nil || self.dashPayModel.registrationStatus.failed) { [self showCreateUsernameController]; @@ -164,7 +198,7 @@ - (void)setCurrentStateController { - (void)createUsername:(NSString *)username { __weak typeof(self) weakSelf = self; - [self.dashPayModel createUsername:username]; + [self.dashPayModel createUsername:username invitation:self.invitationURL]; [self showPendingController:username]; } @@ -181,6 +215,7 @@ - (DWUsernameHeaderView *)headerView { _headerView = [[DWUsernameHeaderView alloc] initWithFrame:CGRectZero]; _headerView.translatesAutoresizingMaskIntoConstraints = NO; _headerView.preservesSuperviewLayoutMargins = YES; + _headerView.cancelButton.hidden = self.confirmationDelegate != nil; [_headerView.cancelButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside]; @@ -200,6 +235,12 @@ - (DWCreateUsernameViewController *)createUsernameViewController { } - (void)showPendingController:(NSString *)username { + if (MOCK_DASHPAY) { + [DWGlobalOptions sharedInstance].dashpayUsername = username; + [self showRegistrationCompletedController:username]; + return; + } + DWUsernamePendingViewController *controller = [[DWUsernamePendingViewController alloc] init]; controller.username = username; controller.delegate = self; @@ -236,6 +277,10 @@ - (void)showRegistrationCompletedController:(NSString *)username { #pragma mark - Actions - (void)cancelButtonAction { + if ([_containerController.currentController isKindOfClass:[DWRegistrationCompletedViewController class]]) { + [self.dashPayModel completeRegistration]; + } + [self dismissViewControllerAnimated:YES completion:nil]; } @@ -259,9 +304,14 @@ - (void)confirmUsernameViewControllerDidConfirm:(DWConfirmUsernameViewController NSString *username = controller.username; [controller dismissViewControllerAnimated:YES completion:^{ - // initiate creation process once confirmation is dismissed because - // DashSync will be showing pin request modally - [self createUsername:username]; + if (self.confirmationDelegate) { + [self.confirmationDelegate dashPaySetupFlowController:self didConfirmUsername:username]; + } + else { + // initiate creation process once confirmation is dismissed because + // DashSync will be showing pin request modally + [self createUsername:username]; + } }]; } diff --git a/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.h b/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.h new file mode 100644 index 000000000..ac876f39d --- /dev/null +++ b/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDashPayProtocol.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDashPaySetupModel : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.m b/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.m new file mode 100644 index 000000000..1b9a6c8dd --- /dev/null +++ b/DashPay/Presentation/Setup/Model/DWDashPaySetupModel.m @@ -0,0 +1,71 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDashPaySetupModel.h" + +@implementation DWDashPaySetupModel + +@synthesize blockchainIdentity; + +@synthesize lastRegistrationError; + +@synthesize registrationCompleted; + +@synthesize registrationStatus; + +@synthesize unreadNotificationsCount; + +@synthesize username; + +@synthesize userProfile; + +- (BOOL)canRetry { + return NO; +} + +- (void)completeRegistration { + // nop +} + +- (void)createUsername:(nonnull NSString *)username invitation:(nonnull NSURL *)invitation { + NSAssert(NO, @"Should not be called"); + // nop +} + +- (void)retry { + NSAssert(NO, @"Should not be called"); + // nop +} + +- (void)setHasEnoughBalanceForInvitationNotification:(BOOL)value { + // nop +} + +- (BOOL)shouldPresentRegistrationPaymentConfirmation { + return YES; +} + +- (void)updateUsernameStatus { + // nop +} + +- (void)verifyDeeplink:(nonnull NSURL *)url completion:(nonnull void (^)(BOOL, NSString *_Nullable, NSString *_Nullable))completion { + NSAssert(NO, @"Should not be called"); + // nop +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.h b/DashPay/Presentation/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.h rename to DashPay/Presentation/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.m b/DashPay/Presentation/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.m similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.m rename to DashPay/Presentation/Setup/RegistrationCompleted/DWRegistrationCompletedViewController.m diff --git a/DashWallet/Sources/UI/DashPay/Setup/UsernamePending/DWUsernamePendingViewController.h b/DashPay/Presentation/Setup/UsernamePending/DWUsernamePendingViewController.h similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/UsernamePending/DWUsernamePendingViewController.h rename to DashPay/Presentation/Setup/UsernamePending/DWUsernamePendingViewController.h diff --git a/DashWallet/Sources/UI/DashPay/Setup/UsernamePending/DWUsernamePendingViewController.m b/DashPay/Presentation/Setup/UsernamePending/DWUsernamePendingViewController.m similarity index 100% rename from DashWallet/Sources/UI/DashPay/Setup/UsernamePending/DWUsernamePendingViewController.m rename to DashPay/Presentation/Setup/UsernamePending/DWUsernamePendingViewController.m diff --git a/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.h b/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.h new file mode 100644 index 000000000..ce7d5e9c2 --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSArray (DWFlatten) + +- (NSArray *)dw_flatten; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.m b/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.m new file mode 100644 index 000000000..d9f00a077 --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/NSArray+DWFlatten.m @@ -0,0 +1,47 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "NSArray+DWFlatten.h" + +@implementation NSArray (DWFlatten) + +- (NSArray *)dw_flatten { + BOOL needsFlatten = ^{ + for (id object in self) + if ([object respondsToSelector:@selector(dw_flatten)]) + return YES; + return NO; + }(); + + if (!needsFlatten) { + return self; + } + + NSMutableArray *arr = [NSMutableArray arrayWithCapacity:self.count]; + for (id object in self) { + if ([object respondsToSelector:@selector(dw_flatten)]) { + [arr addObjectsFromArray:[object dw_flatten]]; + } + else { + [arr addObject:object]; + } + } + + return arr; +} + +@end diff --git a/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.h b/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.h new file mode 100644 index 000000000..7685aad9f --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSLayoutConstraint (DWAutolayout) + ++ (void)dw_activate:(NSArray *)constraints; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.m b/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.m new file mode 100644 index 000000000..1ab3257fd --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/NSLayoutConstraint+DWAutolayout.m @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "NSLayoutConstraint+DWAutolayout.h" + +#import "NSArray+DWFlatten.h" + +@implementation NSLayoutConstraint (DWAutolayout) + ++ (void)dw_activate:(NSArray *)constraints { + NSArray *flattened = [constraints dw_flatten]; + [NSLayoutConstraint activateConstraints:flattened]; +} + +@end diff --git a/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.h b/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.h new file mode 100644 index 000000000..cfe322668 --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.h @@ -0,0 +1,82 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, DWAnchor) { + DWAnchorTop, + DWAnchorLeft, + DWAnchorBottom, + DWAnchorRight, +}; + +@protocol DWHorizontalAnchors + +@property (nonatomic, readonly, strong) NSLayoutXAxisAnchor *leadingAnchor; +@property (nonatomic, readonly, strong) NSLayoutXAxisAnchor *trailingAnchor; + +@end + +@protocol DWVerticalAnchors + +@property (nonatomic, readonly, strong) NSLayoutYAxisAnchor *topAnchor; +@property (nonatomic, readonly, strong) NSLayoutYAxisAnchor *bottomAnchor; + +@end + +@protocol DWAnchors +@end + +#pragma mark - + +@interface UIView (DWAutolayout) + +- (NSArray *)pinHorizontally:(id)horizontalAnchors; +- (NSArray *)pinHorizontally:(id)horizontalAnchors + left:(CGFloat)left + right:(CGFloat)right; +- (NSArray *)pinHorizontally:(id)horizontalAnchors + left:(CGFloat)left + right:(CGFloat)right + except:(DWAnchor)exceptAnchor; + +- (NSArray *)pinVertically:(id)verticalAnchors; +- (NSArray *)pinVertically:(id)verticalAnchors + top:(CGFloat)top + bottom:(CGFloat)bottom; +- (NSArray *)pinVertically:(id)verticalAnchors + top:(CGFloat)top + bottom:(CGFloat)bottom + except:(DWAnchor)exceptAnchor; + +- (NSArray *)pinEdges:(id)anchors; +- (NSArray *)pinEdges:(id)anchors + insets:(UIEdgeInsets)insets; +- (NSArray *)pinEdges:(id)anchors + insets:(UIEdgeInsets)insets + except:(DWAnchor)exceptAnchor; + +- (NSArray *)pinSize:(CGSize)size; + +@end + +@interface UILayoutGuide (DWAutolayout) +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.m b/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.m new file mode 100644 index 000000000..bbb7051f7 --- /dev/null +++ b/DashPay/Presentation/Shared/Autolayout/UIView+DWAutolayout.m @@ -0,0 +1,119 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "UIView+DWAutolayout.h" + +@implementation UIView (DWAutolayout) + +- (NSArray *)pinHorizontally:(id)horizontalAnchors { + return [self pinHorizontally:horizontalAnchors left:0 right:0 except:-1]; +} + +- (NSArray *)pinHorizontally:(id)horizontalAnchors + left:(CGFloat)left + right:(CGFloat)right { + return [self pinHorizontally:horizontalAnchors left:left right:right except:-1]; +} + +- (NSArray *)pinHorizontally:(id)horizontalAnchors + left:(CGFloat)left + right:(CGFloat)right + except:(DWAnchor)exceptAnchor { + NSAssert(self.translatesAutoresizingMaskIntoConstraints == NO, + @"translatesAutoresizingMaskIntoConstraints is invalid"); + + NSMutableArray *res = [NSMutableArray array]; + + if (exceptAnchor != DWAnchorLeft) { + [res addObject:[self.leadingAnchor constraintEqualToAnchor:horizontalAnchors.leadingAnchor constant:left]]; + } + + if (exceptAnchor != DWAnchorRight) { + [res addObject:[horizontalAnchors.trailingAnchor constraintEqualToAnchor:self.trailingAnchor constant:right]]; + } + + return res; +} + +- (NSArray *)pinVertically:(id)verticalAnchors { + return [self pinVertically:verticalAnchors top:0 bottom:0 except:-1]; +} + +- (NSArray *)pinVertically:(id)verticalAnchors + top:(CGFloat)top + bottom:(CGFloat)bottom { + return [self pinVertically:verticalAnchors top:top bottom:bottom except:-1]; +} + +- (NSArray *)pinVertically:(id)verticalAnchors + top:(CGFloat)top + bottom:(CGFloat)bottom + except:(DWAnchor)exceptAnchor { + NSAssert(self.translatesAutoresizingMaskIntoConstraints == NO, + @"translatesAutoresizingMaskIntoConstraints is invalid"); + + NSMutableArray *res = [NSMutableArray array]; + + if (exceptAnchor != DWAnchorTop) { + [res addObject:[self.topAnchor constraintEqualToAnchor:verticalAnchors.topAnchor constant:top]]; + } + + if (exceptAnchor != DWAnchorBottom) { + [res addObject:[verticalAnchors.bottomAnchor constraintEqualToAnchor:self.bottomAnchor constant:bottom]]; + } + + return res; +} + +- (NSArray *)pinEdges:(id)anchors { + return [self pinEdges:anchors insets:UIEdgeInsetsZero except:-1]; +} + +- (NSArray *)pinEdges:(id)anchors + insets:(UIEdgeInsets)insets { + return [self pinEdges:anchors insets:insets except:-1]; +} + +- (NSArray *)pinEdges:(id)anchors + insets:(UIEdgeInsets)insets + except:(DWAnchor)exceptAnchor { + NSAssert(self.translatesAutoresizingMaskIntoConstraints == NO, + @"translatesAutoresizingMaskIntoConstraints is invalid"); + + NSMutableArray *res = [NSMutableArray array]; + + [res addObjectsFromArray:[self pinHorizontally:anchors left:insets.left right:insets.right except:exceptAnchor]]; + [res addObjectsFromArray:[self pinVertically:anchors top:insets.top bottom:insets.bottom except:exceptAnchor]]; + + return res; +} + +- (NSArray *)pinSize:(CGSize)size { + NSAssert(self.translatesAutoresizingMaskIntoConstraints == NO, + @"translatesAutoresizingMaskIntoConstraints is invalid"); + + return @[ + [self.widthAnchor constraintEqualToConstant:size.width], + [self.heightAnchor constraintEqualToConstant:size.height], + ]; +} + +@end + +@implementation UILayoutGuide (DWAutolayout) + +@end diff --git a/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.h b/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.h new file mode 100644 index 000000000..2c70df3cd --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.h @@ -0,0 +1,35 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWBaseActionButton : DWButton + +- (UIColor *)backgroundColorForState:(UIControlState)state; +- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state; + +- (UIColor *)borderColorForState:(UIControlState)state; +- (void)setBorderColor:(UIColor *)color forState:(UIControlState)state; + +- (CGFloat)borderWidthForState:(UIControlState)state; +- (void)setBorderWidth:(CGFloat)width forState:(UIControlState)state; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.m b/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.m new file mode 100644 index 000000000..345a16315 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBaseActionButton.m @@ -0,0 +1,159 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWBaseActionButton () + +@property (strong, nonatomic) NSMutableDictionary *backgroundColors; +@property (strong, nonatomic) NSMutableDictionary *borderColors; +@property (strong, nonatomic) NSMutableDictionary *borderWidths; + +@end + +@implementation DWBaseActionButton + +- (void)setEnabled:(BOOL)enabled { + [super setEnabled:enabled]; + + [self updateButtonHighlighted:self.highlighted selected:self.selected]; +} + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + + [self updateButtonHighlighted:highlighted selected:self.selected]; +} + +- (void)setSelected:(BOOL)selected { + [super setSelected:selected]; + + [self updateButtonHighlighted:self.highlighted selected:selected]; +} + +#pragma mark - Background color + +- (UIColor *)backgroundColorForState:(UIControlState)state { + return self.backgroundColors[@(state)]; +} + +- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state { + if (color) { + self.backgroundColors[@(state)] = color; + } + else { + [self.backgroundColors removeObjectForKey:@(state)]; + } + + [self updateButtonHighlighted:self.highlighted selected:self.selected]; +} + +#pragma mark - Border color + +- (UIColor *)borderColorForState:(UIControlState)state { + return self.borderColors[@(state)]; +} + +- (void)setBorderColor:(UIColor *)color forState:(UIControlState)state { + if (color) { + self.borderColors[@(state)] = color; + } + else { + [self.borderColors removeObjectForKey:@(state)]; + } + + [self updateButtonHighlighted:self.highlighted selected:self.selected]; +} + +#pragma mark - Border width + +- (CGFloat)borderWidthForState:(UIControlState)state { + return self.borderWidths[@(state)].doubleValue; +} + +- (void)setBorderWidth:(CGFloat)width forState:(UIControlState)state { + if (width) { + self.borderWidths[@(state)] = @(width); + } + else { + [self.borderWidths removeObjectForKey:@(state)]; + } + + [self updateButtonHighlighted:self.highlighted selected:self.selected]; +} + +#pragma mark - Private + +- (NSMutableDictionary *)backgroundColors { + if (_backgroundColors == nil) { + _backgroundColors = [NSMutableDictionary dictionary]; + } + return _backgroundColors; +} + +- (NSMutableDictionary *)borderColors { + if (_borderColors == nil) { + _borderColors = [NSMutableDictionary dictionary]; + } + return _borderColors; +} + +- (NSMutableDictionary *)borderWidths { + if (_borderWidths == nil) { + _borderWidths = [NSMutableDictionary dictionary]; + } + return _borderWidths; +} + +- (void)updateButtonHighlighted:(BOOL)highlighted selected:(BOOL)selected { + UIControlState state = self.enabled ? UIControlStateNormal : UIControlStateDisabled; + if (highlighted) { + state = UIControlStateHighlighted; + } + + NSNumber *fallbackStateKey = @(UIControlStateNormal); + + UIColor *backgroundColor = self.backgroundColors[@(state)]; + if (!backgroundColor) { + backgroundColor = self.backgroundColors[fallbackStateKey]; + } + if (backgroundColor) { + self.backgroundColor = backgroundColor; + } + + UIColor *borderColor = self.borderColors[@(state)]; + if (!borderColor) { + borderColor = self.borderColors[fallbackStateKey]; + } + if (borderColor) { + self.layer.borderColor = borderColor.CGColor; + } + + NSNumber *borderWidth = self.borderWidths[@(state)]; + if (!borderWidth) { + borderWidth = self.borderWidths[fallbackStateKey]; + } + if (borderWidth) { + self.layer.borderWidth = borderWidth.doubleValue; + } +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.h b/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.h new file mode 100644 index 000000000..911fd8ed4 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWBasePressableControl : UIControl + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.m b/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.m new file mode 100644 index 000000000..222e61029 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBasePressableControl.m @@ -0,0 +1,63 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBasePressableControl.h" + +#import "UISpringTimingParameters+DWInit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWBasePressableControl () + +@property (nullable, strong, nonatomic) UIViewPropertyAnimator *animator; + +@end + +NS_ASSUME_NONNULL_END + + +@implementation DWBasePressableControl + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self addTarget:self + action:@selector(tochDown) + forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragEnter]; + [self addTarget:self + action:@selector(touchUp) + forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchDragExit | UIControlEventTouchCancel]; + } + return self; +} + +- (void)tochDown { + [self.animator stopAnimation:YES]; + self.transform = CGAffineTransformMakeScale(0.95, 0.95); +} + +- (void)touchUp { + UISpringTimingParameters *params = [[UISpringTimingParameters alloc] initWithDamping:0.6 response:0.3]; + self.animator = [[UIViewPropertyAnimator alloc] initWithDuration:0.25 timingParameters:params]; + __weak typeof(self) weakSelf = self; + [self.animator addAnimations:^{ + weakSelf.transform = CGAffineTransformIdentity; + }]; + [self.animator startAnimation]; +} + +@end diff --git a/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.h b/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.h new file mode 100644 index 000000000..5628070cd --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWBorderedActionButton : DWBaseActionButton + +/// Defaults to Dash Blue color +@property (nonatomic, strong) UIColor *accentColor; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.m b/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.m new file mode 100644 index 000000000..9958214bc --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWBorderedActionButton.m @@ -0,0 +1,109 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBorderedActionButton.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWBorderedActionButton + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + self.accentColor = [UIColor dw_dashBlueColor]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.accentColor = [UIColor dw_dashBlueColor]; + } + return self; +} + +- (void)setAccentColor:(UIColor *)accentColor { + _accentColor = accentColor; + + [self resetAppearance]; +} + +#pragma mark - Private + +- (void)resetAppearance { + UIFontTextStyle textStyle = UIFontTextStyleSubheadline; + self.titleLabel.font = [UIFont dw_fontForTextStyle:textStyle]; + + self.contentEdgeInsets = [self.class buttonContentEdgeInsets]; + + self.layer.cornerRadius = [self.class cornerRadius]; + self.layer.masksToBounds = YES; + + [self setBackgroundColor:[UIColor clearColor] forState:UIControlStateNormal]; + [self setBorderWidth:[self.class borderWidth] forState:UIControlStateNormal]; + + UIColor *color = self.accentColor; + [self setTitleColor:color forState:UIControlStateNormal]; + [self setBorderColor:color forState:UIControlStateNormal]; + + color = [self.class highlightedColorForColor:self.accentColor]; + [self setTitleColor:color forState:UIControlStateHighlighted]; + [self setBorderColor:color forState:UIControlStateHighlighted]; + + color = [self.class disabledColorForColor:self.accentColor]; + [self setTitleColor:color forState:UIControlStateDisabled]; + [self setBorderColor:color forState:UIControlStateDisabled]; +} + +#pragma mark - Styles + ++ (CGFloat)borderWidth { + return 1.0; +} + ++ (UIEdgeInsets)buttonContentEdgeInsets { + return UIEdgeInsetsMake(10.0, 20.0, 10.0, 20.0); +} + ++ (CGFloat)cornerRadius { + return 8.0; +} + ++ (UIColor *)highlightedColorForColor:(UIColor *)color { + return [color colorWithAlphaComponent:0.5]; +} + ++ (UIColor *)disabledColorForColor:(UIColor *)color { + CGFloat hue, saturation, brightness, alpha; + BOOL result = [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; + if (!result) { + return [color colorWithAlphaComponent:0.35]; + } + + UIColor *disabledColor = [UIColor colorWithHue:hue + saturation:saturation * 0.35 + brightness:brightness * 0.95 + alpha:alpha]; + return disabledColor; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWButton.h b/DashPay/Presentation/Shared/Buttons/DWButton.h new file mode 100644 index 000000000..c340f5ca6 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWButton.h @@ -0,0 +1,31 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + UIButton with Dynamic type support + */ +@interface DWButton : UIButton + +- (void)setInsetsForContentPadding:(UIEdgeInsets)contentPadding imageTitlePadding:(CGFloat)imageTitlePadding; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWButton.m b/DashPay/Presentation/Shared/Buttons/DWButton.m new file mode 100644 index 000000000..d7861bb74 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWButton.m @@ -0,0 +1,62 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWButton + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self dwButton_setup]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self dwButton_setup]; + } + return self; +} + +- (void)dwButton_setup { + self.titleLabel.adjustsFontForContentSizeCategory = YES; + self.titleLabel.adjustsFontSizeToFitWidth = YES; + self.titleLabel.minimumScaleFactor = 0.5; + self.titleLabel.lineBreakMode = NSLineBreakByClipping; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(setNeedsLayout) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; +} + +- (void)setInsetsForContentPadding:(UIEdgeInsets)contentPadding imageTitlePadding:(CGFloat)imageTitlePadding { + self.contentEdgeInsets = UIEdgeInsetsMake(contentPadding.top, + contentPadding.left, + contentPadding.bottom, + contentPadding.right + imageTitlePadding); + self.titleEdgeInsets = UIEdgeInsetsMake(0, imageTitlePadding, 0, -imageTitlePadding); +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWColoredButton.h b/DashPay/Presentation/Shared/Buttons/DWColoredButton.h new file mode 100644 index 000000000..50eebfea3 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWColoredButton.h @@ -0,0 +1,32 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPressableButton.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, DWColoredButtonStyle) { + DWColoredButtonStyle_Black, +}; + +@interface DWColoredButton : DWPressableButton + +@property (nonatomic, assign) DWColoredButtonStyle style; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWColoredButton.m b/DashPay/Presentation/Shared/Buttons/DWColoredButton.m new file mode 100644 index 000000000..9240ea6e9 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWColoredButton.m @@ -0,0 +1,50 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWColoredButton.h" + +#import "DWUIKit.h" + +@implementation DWColoredButton + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.layer.cornerRadius = 10; + self.layer.masksToBounds = YES; + + self.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + } + return self; +} + +- (void)setStyle:(DWColoredButtonStyle)style { + _style = style; + + switch (style) { + case DWColoredButtonStyle_Black: { + [self setBackgroundColor:[UIColor dw_buttonBlackColor]]; + [self setTitleColor:[UIColor dw_buttonBlackTitleColor] forState:UIControlStateNormal]; + + break; + } + default: + break; + } +} + +@end diff --git a/DashPay/Presentation/Shared/Buttons/DWPressableButton.h b/DashPay/Presentation/Shared/Buttons/DWPressableButton.h new file mode 100644 index 000000000..6cadb9d1a --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWPressableButton.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWButton.h" +#import "UIView+DWAnimations.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPressableButton : DWButton + +@property (nonatomic, assign) DWPressedAnimationStrength pressedStrength; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/Buttons/DWPressableButton.m b/DashPay/Presentation/Shared/Buttons/DWPressableButton.m new file mode 100644 index 000000000..ca34c2e15 --- /dev/null +++ b/DashPay/Presentation/Shared/Buttons/DWPressableButton.m @@ -0,0 +1,55 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPressableButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWPressableButton + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self dwPressableButton_setup]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self dwPressableButton_setup]; + } + return self; +} + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + + [self dw_pressedAnimation:self.pressedStrength pressed:highlighted]; +} + +#pragma mark - Private + +- (void)dwPressableButton_setup { + self.adjustsImageWhenHighlighted = NO; + self.pressedStrength = DWPressedAnimationStrength_Medium; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.h b/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.h new file mode 100644 index 000000000..c3cf86be4 --- /dev/null +++ b/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.h @@ -0,0 +1,30 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DPAlertChildContentsView : UIView + +@property (nullable, nonatomic, strong) UIImage *icon; +@property (nullable, nonatomic, strong) NSString *title; +@property (nullable, nonatomic, strong) NSString *desc; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.m b/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.m new file mode 100644 index 000000000..8887a3ac0 --- /dev/null +++ b/DashPay/Presentation/Shared/DPAlert/DPAlertChildContentsView.m @@ -0,0 +1,113 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DPAlertChildContentsView.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DPAlertChildContentsView () + +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *descriptionLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DPAlertChildContentsView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIImageView *iconImageView = [[UIImageView alloc] init]; + iconImageView.translatesAutoresizingMaskIntoConstraints = NO; + iconImageView.contentMode = UIViewContentModeCenter; + [self addSubview:iconImageView]; + _iconImageView = iconImageView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.numberOfLines = 0; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + titleLabel.adjustsFontForContentSizeCategory = YES; + [self addSubview:titleLabel]; + _titleLabel = titleLabel; + + UILabel *descLabel = [[UILabel alloc] init]; + descLabel.translatesAutoresizingMaskIntoConstraints = NO; + descLabel.textAlignment = NSTextAlignmentCenter; + descLabel.numberOfLines = 0; + descLabel.textColor = [UIColor dw_secondaryTextColor]; + descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + descLabel.adjustsFontForContentSizeCategory = YES; + [self addSubview:descLabel]; + _descriptionLabel = descLabel; + + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [descLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + + [NSLayoutConstraint activateConstraints:@[ + [iconImageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [iconImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:iconImageView.bottomAnchor + constant:16.0], + [titleLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + + [descLabel.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:16.0], + [descLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:descLabel.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:descLabel.bottomAnchor], + ]]; + } + return self; +} + +- (UIImage *)icon { + return self.iconImageView.image; +} + +- (void)setIcon:(UIImage *)icon { + self.iconImageView.image = icon; +} + +- (NSString *)title { + return self.titleLabel.text; +} + +- (void)setTitle:(NSString *)title { + self.titleLabel.text = title; +} + +- (NSString *)desc { + return self.descriptionLabel.text; +} + +- (void)setDesc:(NSString *)desc { + self.descriptionLabel.text = desc; +} + +@end diff --git a/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.h b/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.h new file mode 100644 index 000000000..20e08b816 --- /dev/null +++ b/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.h @@ -0,0 +1,35 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DPAlertViewController : UIViewController + +- (instancetype)initWithIcon:(UIImage *)icon + title:(NSString *)title + description:(NSString *)description; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.m b/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.m new file mode 100644 index 000000000..9f6bd3647 --- /dev/null +++ b/DashPay/Presentation/Shared/DPAlert/DPAlertViewController.m @@ -0,0 +1,101 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DPAlertViewController.h" + +#import "DPAlertChildContentsView.h" +#import "dashwallet-Swift.h" +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" + +@interface DPAlertViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@property (nullable, nonatomic, strong) UIImage *icon; +@property (nullable, nonatomic, strong) NSString *title_; +@property (nullable, nonatomic, strong) NSString *desc; + +@end + +@implementation DPAlertViewController + +- (instancetype)initWithIcon:(UIImage *)icon + title:(NSString *)title + description:(NSString *)description { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _icon = icon; + _title_ = title; + _desc = description; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + [self.view addSubview:contentView]; + + DPAlertChildContentsView *childView = [[DPAlertChildContentsView alloc] initWithFrame:CGRectZero]; + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.icon = self.icon; + childView.title = self.title_; + childView.desc = self.desc; + [contentView addSubview:childView]; + + DWActionButton *okButton = [[DWActionButton alloc] init]; + okButton.translatesAutoresizingMaskIntoConstraints = NO; + [okButton setTitle:NSLocalizedString(@"OK", nil) forState:UIControlStateNormal]; + [okButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [contentView addSubview:okButton]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + [contentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + + [childView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:32.0], + [childView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:16.0], + [contentView.trailingAnchor constraintEqualToAnchor:childView.trailingAnchor + constant:16.0], + + [okButton.topAnchor constraintEqualToAnchor:childView.bottomAnchor + constant:32.0], + [okButton.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:okButton.bottomAnchor + constant:20.0], + [okButton.heightAnchor constraintGreaterThanOrEqualToConstant:40.0], + [okButton.widthAnchor constraintEqualToAnchor:childView.widthAnchor + multiplier:0.285], + ]]; +} + +- (void)closeButtonAction:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/DashPay/Presentation/Shared/DWDPAvatarView.h b/DashPay/Presentation/Shared/DWDPAvatarView.h new file mode 100644 index 000000000..515e8eccb --- /dev/null +++ b/DashPay/Presentation/Shared/DWDPAvatarView.h @@ -0,0 +1,42 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const DPCropParameterName; + +@class DSBlockchainIdentity; + +typedef NS_ENUM(NSUInteger, DWDPAvatarBackgroundMode) { + DWDPAvatarBackgroundMode_DashBlue, + DWDPAvatarBackgroundMode_Random, +}; + +@interface DWDPAvatarView : UIView + +@property (nonatomic, assign) DWDPAvatarBackgroundMode backgroundMode; +@property (nullable, nonatomic, copy) DSBlockchainIdentity *blockchainIdentity; +@property (nonatomic, assign, getter=isSmall) BOOL small; + +- (void)setAsDashPlaceholder; +- (void)configureWithUsername:(NSString *)username; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/DWDPAvatarView.m b/DashPay/Presentation/Shared/DWDPAvatarView.m new file mode 100644 index 000000000..fac3338f6 --- /dev/null +++ b/DashPay/Presentation/Shared/DWDPAvatarView.m @@ -0,0 +1,184 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPAvatarView.h" + +#import "DWEnvironment.h" +#import "DWUIKit.h" +#import "UIColor+DWDashPay.h" + +#import "UIImageView+DWDPAvatar.h" +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +NSString *const DPCropParameterName = @"dashpay-profile-pic-zoom"; + +@interface DWDPAvatarView () + +@property (readonly, nonatomic, strong) UIImageView *imageView; +@property (readonly, nonatomic, strong) UILabel *letterLabel; +@property (nonatomic, assign) CGSize imageSize; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPAvatarView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self setup]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if (self) { + [self setup]; + } + return self; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + self.layer.cornerRadius = CGRectGetWidth(self.bounds) / 2.0; + + self.imageView.frame = self.bounds; + self.letterLabel.frame = self.bounds; +} + +- (void)setBackgroundMode:(DWDPAvatarBackgroundMode)backgroundMode { + _backgroundMode = backgroundMode; + + [self updateBackgroundColor]; +} + +- (void)setBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + _blockchainIdentity = blockchainIdentity; + + [self.imageView sd_cancelCurrentImageLoad]; + + NSString *username = blockchainIdentity.currentDashpayUsername; + NSString *avatarUrlString = [blockchainIdentity.avatarPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + + [self setUsername:username]; + + __block typeof(self) weakSelf = self; + + [self.imageView dw_setAvatarWithURLString:avatarUrlString + completion:^(UIImage *_Nullable image) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image) { + strongSelf.imageView.hidden = NO; + strongSelf.letterLabel.hidden = YES; + strongSelf.imageView.image = image; + } + else { + [strongSelf setUsername:username]; + } + }]; + +} + +- (void)configureWithUsername:(NSString *)username { + [self setUsername:username]; +} + +- (void)setUsername:(NSString *)username { + self.letterLabel.hidden = NO; + self.imageView.hidden = YES; + + if (username.length >= 1) { + NSString *firstLetter = [username substringToIndex:1]; + self.letterLabel.text = [firstLetter uppercaseString]; + + [self updateBackgroundColor]; + } + else { + self.letterLabel.text = nil; + self.layer.backgroundColor = [UIColor dw_dashBlueColor].CGColor; + } +} + +- (void)setAsDashPlaceholder { + self.letterLabel.hidden = YES; + self.imageView.hidden = NO; + + self.layer.backgroundColor = [UIColor dw_dashBlueColor].CGColor; + + self.imageView.tintColor = [UIColor whiteColor]; + self.imageView.contentMode = UIViewContentModeCenter; + self.imageView.image = [UIImage imageNamed:@"icon_dash_small"]; +} + +- (void)setSmall:(BOOL)small { + _small = small; + + if (small) { + self.letterLabel.font = [UIFont dw_regularFontOfSize:20]; + } + else { + self.letterLabel.font = [UIFont dw_regularFontOfSize:30]; + } +} + +#pragma mark - Private + +- (void)setup { + self.layer.backgroundColor = [UIColor dw_dashBlueColor].CGColor; + self.layer.masksToBounds = YES; + + UIImageView *imageView = [[UIImageView alloc] init]; + [self addSubview:imageView]; + _imageView = imageView; + + UILabel *letterLabel = [[UILabel alloc] init]; + letterLabel.font = [UIFont dw_regularFontOfSize:30]; + letterLabel.textAlignment = NSTextAlignmentCenter; + letterLabel.textColor = [UIColor dw_lightTitleColor]; + [self addSubview:letterLabel]; + _letterLabel = letterLabel; + + _imageSize = CGSizeMake(256, 256); +} + +- (void)updateBackgroundColor { + UIColor *color = nil; + switch (self.backgroundMode) { + case DWDPAvatarBackgroundMode_DashBlue: + color = [UIColor dw_dashBlueColor]; + break; + + case DWDPAvatarBackgroundMode_Random: { + color = [UIColor dw_colorWithUsername:self.letterLabel.text]; + break; + } + } + NSParameterAssert(color); + self.layer.backgroundColor = color.CGColor; +} + +@end diff --git a/DashPay/Presentation/Shared/DWScrollingViewController.h b/DashPay/Presentation/Shared/DWScrollingViewController.h new file mode 100644 index 000000000..2208e0e0b --- /dev/null +++ b/DashPay/Presentation/Shared/DWScrollingViewController.h @@ -0,0 +1,36 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWScrollingViewController : UIViewController + +@property (readonly, nonatomic, strong) UIScrollView *scrollView; +@property (readonly, nonatomic, strong) UIView *contentView; + +/// Enabled by default +@property (nonatomic, assign) BOOL keyboardNotificationsEnabled; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil + bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)initWithCoder:(nullable NSCoder *)coder NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/DWScrollingViewController.m b/DashPay/Presentation/Shared/DWScrollingViewController.m new file mode 100644 index 000000000..0edb3aca9 --- /dev/null +++ b/DashPay/Presentation/Shared/DWScrollingViewController.m @@ -0,0 +1,120 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWScrollingViewController.h" + +#import + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWScrollingViewController () + +@property (null_resettable, nonatomic, strong) UIScrollView *scrollView; +@property (null_resettable, nonatomic, strong) UIView *contentView; +@property (null_resettable, nonatomic, strong) NSLayoutConstraint *bottomConstraint; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWScrollingViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + self.keyboardNotificationsEnabled = YES; + } + return self; +} + +- (UIScrollView *)scrollView { + if (_scrollView == nil) { + _scrollView = [[UIScrollView alloc] init]; + _scrollView.translatesAutoresizingMaskIntoConstraints = NO; + _scrollView.alwaysBounceVertical = YES; + _scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; + _scrollView.preservesSuperviewLayoutMargins = YES; + } + return _scrollView; +} + +- (UIView *)contentView { + if (_contentView == nil) { + _contentView = [[UIView alloc] init]; + _contentView.translatesAutoresizingMaskIntoConstraints = NO; + _contentView.preservesSuperviewLayoutMargins = YES; + } + return _contentView; +} + +- (NSLayoutConstraint *)bottomConstraint { + if (_bottomConstraint == nil) { + _bottomConstraint = [self.view.bottomAnchor constraintEqualToAnchor:self.scrollView.bottomAnchor]; + } + return _bottomConstraint; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.view addSubview:self.scrollView]; + [self.scrollView addSubview:self.contentView]; + + [NSLayoutConstraint activateConstraints:@[ + [self.scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor], + [self.scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:self.scrollView.trailingAnchor], + self.bottomConstraint, + + [self.contentView.topAnchor constraintEqualToAnchor:self.scrollView.topAnchor], + [self.contentView.leadingAnchor constraintEqualToAnchor:self.scrollView.leadingAnchor], + [self.scrollView.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor], + [self.scrollView.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor], + [self.contentView.widthAnchor constraintEqualToAnchor:self.scrollView.widthAnchor], + ]]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + if (self.keyboardNotificationsEnabled) { + [self ka_startObservingKeyboardNotifications]; + } +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + if (self.keyboardNotificationsEnabled) { + [self ka_stopObservingKeyboardNotifications]; + } +} + +- (UIViewController *)childViewControllerForStatusBarStyle { + return self.childViewControllers.firstObject; +} + +- (void)ka_keyboardShowOrHideAnimationWithHeight:(CGFloat)height + animationDuration:(NSTimeInterval)animationDuration + animationCurve:(UIViewAnimationCurve)animationCurve { + self.bottomConstraint.constant = height; + [self.view layoutIfNeeded]; +} + +@end diff --git a/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.h b/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.h new file mode 100644 index 000000000..9b92b9d5b --- /dev/null +++ b/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIImageView (DWDPAvatar) + +- (void)dw_setAvatarWithURLString:(NSString *)urlString completion:(void (^)(UIImage *_Nullable image))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.m b/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.m new file mode 100644 index 000000000..943f88165 --- /dev/null +++ b/DashPay/Presentation/Shared/UIImageView+DWDPAvatar.m @@ -0,0 +1,136 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "UIImageView+DWDPAvatar.h" + +#import "DWDPAvatarView.h" +#import +#import + +@implementation UIImageView (DWDPAvatar) + +- (void)dw_setAvatarWithURLString:(NSString *)urlString completion:(void (^)(UIImage *_Nullable image))completion { + if (urlString.length == 0) { + if (completion) { + completion(nil); + } + return; + } + + + NSURL *url = [NSURL URLWithString:urlString]; + NSURL *originalURL = [url copy]; + if (url == nil) { + if (completion) { + completion(nil); + } + return; + } + + // has crop params + CGRect cropRectOfInterest = CGRectNull; + if (urlString.length > 0 && [urlString rangeOfString:DPCropParameterName].location != NSNotFound) { + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + NSMutableArray *queryItems = [components.queryItems mutableCopy]; + NSURLQueryItem *cropItem = nil; + for (NSURLQueryItem *item in components.queryItems) { + if ([item.name isEqualToString:DPCropParameterName]) { + cropItem = item; + break; + } + } + + if (cropItem != nil) { + [queryItems removeObject:cropItem]; + + NSArray *params = [cropItem.value componentsSeparatedByString:@","]; + if (params.count != 4) { + params = [cropItem.value componentsSeparatedByString:@"%2C"]; + } + + if (params.count == 4) { + CGFloat x = [params[0] doubleValue]; + CGFloat y = [params[1] doubleValue]; + CGFloat w = [params[2] doubleValue] - x; + CGFloat h = [params[3] doubleValue] - y; + cropRectOfInterest = CGRectMake(x, y, w, h); + } + + components.queryItems = queryItems.count > 0 ? queryItems : nil; + url = components.URL; + } + } + + __weak typeof(self) weakSelf = self; + [self sd_setImageWithURL:url + completed:^(UIImage *_Nullable image, NSError *_Nullable error, SDImageCacheType cacheType, NSURL *_Nullable imageURL) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image == nil || CGRectIsNull(cropRectOfInterest)) { + if (completion) { + completion(image); + } + + return; + } + + dispatch_async([strongSelf.class processingQueue], ^{ + NSString *croppedKey = originalURL.absoluteString; + + UIImage *croppedImage = [SDImageCache.sharedImageCache imageFromCacheForKey:croppedKey]; + if (croppedImage != nil) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (completion) { + completion(croppedImage); + } + }); + + return; + } + + CGSize imageSize = image.size; + CGRect cropRect = CGRectMake(cropRectOfInterest.origin.x * imageSize.width, + cropRectOfInterest.origin.y * imageSize.height, + cropRectOfInterest.size.width * imageSize.width, + cropRectOfInterest.size.height * imageSize.height); + croppedImage = [image croppedImageWithFrame:cropRect angle:0 circularClip:NO]; + if (croppedImage) { + [SDImageCache.sharedImageCache storeImage:croppedImage forKey:croppedKey completion:nil]; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (completion) { + completion(croppedImage); + } + }); + }); + }]; +} + ++ (dispatch_queue_t)processingQueue { + static dispatch_queue_t _sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = dispatch_queue_create("dw.dp.avatar-processing-queue", DISPATCH_QUEUE_SERIAL); + }); + return _sharedInstance; +} + +@end diff --git a/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.h b/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.h new file mode 100644 index 000000000..d1d56f54e --- /dev/null +++ b/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.h @@ -0,0 +1,46 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSTransaction; +@protocol DWTransactionListDataProviderProtocol; +@class DWTxDetailPopupViewController; +@protocol DWDPBasicUserItem; + +@protocol DWTxDetailPopupViewControllerDelegate + +- (void)txDetailPopupViewController:(DWTxDetailPopupViewController *)controller openUserItem:(id)userItem; + +@end + +@interface DWTxDetailPopupViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +- (instancetype)initWithTransaction:(DSTransaction *)transaction + dataProvider:(id)dataProvider; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil + bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.m b/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.m new file mode 100644 index 000000000..c02e78c5b --- /dev/null +++ b/DashPay/Presentation/Tx Details/DWTxDetailPopupViewController.m @@ -0,0 +1,119 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWTxDetailPopupViewController.h" + +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const CORNER_RADIUS = 8.0; + +static CGFloat VerticalPadding(void) { + if (IS_IPAD) { + return 32.0; + } + else if (IS_IPHONE_6 || IS_IPHONE_5_OR_LESS) { + return 16.0; + } + else { + return 24.0; + } +} + +@interface DWTxDetailPopupViewController () + +@property (readonly, nonatomic, strong) DSTransaction *transaction; +@property (readonly, nonatomic, strong) id dataProvider; + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +@implementation DWTxDetailPopupViewController + +- (instancetype)initWithTransaction:(DSTransaction *)transaction + dataProvider:(id)dataProvider { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _transaction = transaction; + _dataProvider = dataProvider; + + _modalTransition = [[DWModalPopupTransition alloc] init]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupView]; +} + +#pragma mark - DWTxDetailViewControllerDelegate + +- (void)txDetailViewController:(DWTxDetailViewController *)controller closeButtonAction:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)txDetailViewController:(DWTxDetailViewController *)controller openUserItem:(id)userItem { + [self.delegate txDetailPopupViewController:self openUserItem:userItem]; +} + +#pragma mark - Private + +- (void)setupView { + self.view.backgroundColor = [UIColor dw_backgroundColor]; + self.view.clipsToBounds = YES; + self.view.layer.cornerRadius = CORNER_RADIUS; + + DWTxDetailViewController *controller = + [[DWTxDetailViewController alloc] initWithModel:[[DWTxDetailModel alloc] initWithTransaction: _transaction]]; + + //controller.delegate = self; + + [self addChildViewController:controller]; + + UIView *childView = controller.view; + UIView *contentView = self.view; + + childView.translatesAutoresizingMaskIntoConstraints = NO; + childView.preservesSuperviewLayoutMargins = YES; + [contentView addSubview:childView]; + + const CGFloat padding = VerticalPadding(); + [NSLayoutConstraint activateConstraints:@[ + [childView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [childView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [childView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [childView.topAnchor constraintGreaterThanOrEqualToAnchor:contentView.topAnchor + constant:padding], + [childView.bottomAnchor constraintGreaterThanOrEqualToAnchor:contentView.bottomAnchor + constant:-padding], + ]]; + + [controller didMoveToParentViewController:self]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashPay/dashpay-info.plist b/DashPay/dashpay-info.plist new file mode 100644 index 000000000..5470fd83d --- /dev/null +++ b/DashPay/dashpay-info.plist @@ -0,0 +1,237 @@ + + + + + BGTaskSchedulerPermittedIdentifiers + + org.dashcore.dashsync.backgroundblocksync + + CALL_BACK_URL_SCHEME + $(CALL_BACK_URL_SCHEME) + CFBundleDevelopmentRegion + en + CFBundleDisplayName + Dash + CFBundleDocumentTypes + + + CFBundleTypeIconFiles + + CFBundleTypeName + Dash Payment Request + LSHandlerRank + Default + LSItemContentTypes + + dash.paymentrequest + + + + CFBundleTypeIconFiles + + CFBundleTypeName + Dash Payment + LSHandlerRank + Default + LSItemContentTypes + + dash.payment + + + + CFBundleTypeIconFiles + + CFBundleTypeName + Dash Payment ACK + LSHandlerRank + Default + LSItemContentTypes + + dash.paymentack + + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Viewer + CFBundleURLName + com.anypay + CFBundleURLSchemes + + pay + + + + CFBundleTypeRole + Editor + CFBundleURLName + dash + CFBundleURLSchemes + + dash + + + + CFBundleTypeRole + Editor + CFBundleURLName + org.dashfoundation.dash + CFBundleURLSchemes + + dashwallet + + + + CFBundleTypeRole + Editor + CFBundleURLName + dashid + CFBundleURLSchemes + + dashid + + + + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + CLIENT_ID + $(CLIENT_ID) + CLIENT_SECRET + $(CLIENT_SECRET) + FirebaseDeepLinkPasteboardRetrievalEnabled + + FirebaseDynamicLinksCustomDomains + + https://invitations.dashpay.io/link + + ITSAppUsesNonExemptEncryption + + LSApplicationQueriesSchemes + + dashcontrol + dashdirect + + LSRequiresIPhoneOS + + LSSupportsOpeningDocumentsInPlace + + NFCReaderUsageDescription + Used to interact with NFC payment stations. + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + Used to scan barcodes + NSFaceIDUsageDescription + Used to authorize payments + NSLocationAlwaysAndWhenInUseUsageDescription + We will use your location to determine where you are. Your location will never be recorded or shared with anyone. + NSLocationWhenInUseUsageDescription + We will use your location to determine where you are. Your location will never be recorded or shared with anyone. + NSPhotoLibraryAddUsageDescription + Used to save media data + NSPhotoLibraryUsageDescription + Used to save media data + REDIRECT_URI + $(REDIRECT_URI) + UIBackgroundModes + + fetch + remote-notification + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleLightContent + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UTImportedTypeDeclarations + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Dash Payment Request + UTTypeIdentifier + dash.paymentrequest + UTTypeTagSpecification + + public.mime-type + application/dash-paymentrequest + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Dash Payment + UTTypeIdentifier + dash.payment + UTTypeTagSpecification + + public.mime-type + application/dash-payment + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Dash Payment ACK + UTTypeIdentifier + dash.paymentack + UTTypeTagSpecification + + public.mime-type + application/dash-paymentack + + + + com.apple.developer.nfc.readersession.iso7816.select-identifiers + + A0000002471001 + 00000000000000 + + + diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index 6979d2ba7..85619076b 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -c553d04f5806c6c2cc600e03910378a87fcd9320 +71d2f9578544a48331ffa09edc748b3ed8766b97 \ No newline at end of file diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index ae11791bc..7fcea48cb 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 53; objects = { /* Begin PBXBuildFile section */ @@ -34,13 +34,11 @@ 110C679A29227948006B580C /* UINavigationController+CrowdNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110C679929227948006B580C /* UINavigationController+CrowdNode.swift */; }; 110D1781298BA9AF005BEB30 /* WKWebView+CrowdNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D1780298BA9AF005BEB30 /* WKWebView+CrowdNode.swift */; }; 110D1784298E68A8005BEB30 /* OnlineAccountInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D1783298E68A8005BEB30 /* OnlineAccountInfoController.swift */; }; - 111B8C00299BD973004A4129 /* WithdrawalConfirmationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111B8BFF299BD973004A4129 /* WithdrawalConfirmationController.swift */; }; 111C3C4C296C51B500788E18 /* WithdrawalLimitsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4B296C51B500788E18 /* WithdrawalLimitsController.swift */; }; 111C3C4E296C52F800788E18 /* WithdrawalLimit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4D296C52F800788E18 /* WithdrawalLimit.swift */; }; 111C3C50296D5A4700788E18 /* TxWithinTimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4F296D5A4700788E18 /* TxWithinTimePeriod.swift */; }; 111C3C52296D620D00788E18 /* CrowdNode+UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C51296D620D00788E18 /* CrowdNode+UserDefaults.swift */; }; 111C3C54296D6A2D00788E18 /* CrowdNodeWithdrawalReceivedTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C53296D6A2D00788E18 /* CrowdNodeWithdrawalReceivedTx.swift */; }; - 1121A8B728E5DB6E00464C31 /* CrowdNode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1121A8B628E5DB6E00464C31 /* CrowdNode.storyboard */; }; 1141E4C2291BB12200ACDA9E /* CrowdNodeTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141E4C1291BB12200ACDA9E /* CrowdNodeTransferViewController.swift */; }; 1141E4C5291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141E4C4291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift */; }; 114573A42949B221009DCF27 /* VerifiedSuccessfullyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114573A32949B221009DCF27 /* VerifiedSuccessfullyViewController.swift */; }; @@ -115,8 +113,6 @@ 2A10EB412358D2A900C38B61 /* ResetWalletInfo.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10EB402358D2A900C38B61 /* ResetWalletInfo.storyboard */; }; 2A10EB442358D2CA00C38B61 /* DWResetWalletInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A10EB432358D2CA00C38B61 /* DWResetWalletInfoViewController.m */; }; 2A11F59F2194BD6200E7B563 /* DWDataMigrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11F59E2194BD6200E7B563 /* DWDataMigrationManager.m */; }; - 2A1AE78E23F4668B00179A6E /* DWUsernameHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1AE78D23F4668B00179A6E /* DWUsernameHeaderView.m */; }; - 2A1AE79223F468CD00179A6E /* DWPlanetarySystemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1AE79123F468CD00179A6E /* DWPlanetarySystemView.m */; }; 2A1AF6DE23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DC23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib */; }; 2A1AF6DF23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DD23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib */; }; 2A1B7D972322D0BC00BA8C6A /* DWTitleDetailCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7D962322D0BC00BA8C6A /* DWTitleDetailCellModel.m */; }; @@ -132,13 +128,10 @@ 2A2120EC22145CAE009906DC /* DWAmountInputValidatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EB22145CAE009906DC /* DWAmountInputValidatorTests.m */; }; 2A2CD6EE22F48159008C7BC9 /* UIDevice+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD6ED22F48159008C7BC9 /* UIDevice+DashWallet.m */; }; 2A2CD71322F97B65008C7BC9 /* CALayer+DWShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD71222F97B65008C7BC9 /* CALayer+DWShadow.m */; }; - 2A2CD71622F98FEA008C7BC9 /* DWShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD71522F98FEA008C7BC9 /* DWShadowView.m */; }; 2A2CD71822F99CAE008C7BC9 /* ShortcutsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A2CD71722F99CAE008C7BC9 /* ShortcutsView.xib */; }; 2A2CD72222F9B571008C7BC9 /* DWIntrinsicCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD72122F9B571008C7BC9 /* DWIntrinsicCollectionView.m */; }; 2A36A88B2350A05B0014DC60 /* DWBackupSeedPhraseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A36A88A2350A05B0014DC60 /* DWBackupSeedPhraseViewController.m */; }; 2A392568234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A392567234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.m */; }; - 2A3CCEF9242BB1B900300AF8 /* DWRegistrationCompletedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3CCEF8242BB1B900300AF8 /* DWRegistrationCompletedViewController.m */; }; - 2A3CCEFC242BB1DD00300AF8 /* DWDPAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3CCEFB242BB1DD00300AF8 /* DWDPAvatarView.m */; }; 2A3DC86E239717C2004B3DBA /* DWRecoverWalletCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3DC86D239717C2004B3DBA /* DWRecoverWalletCommand.m */; }; 2A3DC87123972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3DC87023972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m */; }; 2A4430E722CBB6EC009BAF7F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4430E622CBB6EC009BAF7F /* AppDelegate.m */; }; @@ -172,28 +165,18 @@ 2A4E533822F023AB00E5168A /* DWHomeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E533722F023AB00E5168A /* DWHomeModel.m */; }; 2A4E534122F025FE00E5168A /* TxListEmptyTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E533F22F025FE00E5168A /* TxListEmptyTableViewCell.xib */; }; 2A4E534422F02BC300E5168A /* UIView+DWReuseHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E534322F02BC300E5168A /* UIView+DWReuseHelper.m */; }; - 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E534A22F03A9E00E5168A /* DWFilterHeaderView.m */; }; 2A4E534D22F03AAC00E5168A /* DWFilterHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E534C22F03AAC00E5168A /* DWFilterHeaderView.xib */; }; 2A4E535522F1D0D900E5168A /* TxListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E535322F1D0D900E5168A /* TxListTableViewCell.xib */; }; 2A4E535C22F335C200E5168A /* DWTransactionListDataProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E535B22F335C200E5168A /* DWTransactionListDataProvider.m */; }; 2A5279BC23D994BC00F856D3 /* CoreNFC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5279BB23D994BC00F856D3 /* CoreNFC.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 2A56EEFB2417E30F002C32F3 /* DWConfirmUsernameContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A56EEFA2417E30F002C32F3 /* DWConfirmUsernameContentView.m */; }; - 2A56EF002419310C002C32F3 /* DWDashPayConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A56EEFF2419310C002C32F3 /* DWDashPayConstants.m */; }; - 2A56EF0624193AEB002C32F3 /* DWDashPayModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A56EF0524193AEB002C32F3 /* DWDashPayModel.m */; }; 2A58815921A5906C00FD4D2C /* DWBaseLegacyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A58815821A5906C00FD4D2C /* DWBaseLegacyViewController.m */; }; - 2A5BD5922451D68300688A8D /* DWMinLengthUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5BD5912451D68300688A8D /* DWMinLengthUsernameValidationRule.m */; }; - 2A5BD5952451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5BD5942451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.m */; }; - 2A5BD5982451DD0700688A8D /* DWMaxLengthUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5BD5972451DD0700688A8D /* DWMaxLengthUsernameValidationRule.m */; }; - 2A5BD59E2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5BD59D2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m */; }; 2A5E4548243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5E4546243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m */; }; 2A5E4549243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5E4547243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib */; }; - 2A60C9452444BF3A00AF72CF /* DWConfirmUsernameContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A60C9442444BF3900AF72CF /* DWConfirmUsernameContentView.xib */; }; 2A63003F2327B4BB00827825 /* DWPaymentOutput+DWView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A63003E2327B4BB00827825 /* DWPaymentOutput+DWView.m */; }; 2A6300422328CCE900827825 /* LockScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A6300412328CCE900827825 /* LockScreen.storyboard */; }; 2A6300452328D07500827825 /* DWLockPinInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6300442328D07500827825 /* DWLockPinInputView.m */; }; 2A6300492328EA8900827825 /* DWLockActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6300482328EA8900827825 /* DWLockActionButton.m */; }; 2A63004E2328F37C00827825 /* DWLockScreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A63004D2328F37C00827825 /* DWLockScreenViewController.m */; }; - 2A6688FD24BCB739008E10F0 /* DWDPTxItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6688FC24BCB739008E10F0 /* DWDPTxItemView.m */; }; 2A741DC223639A9700840ADF /* TodayExtension.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A741DC123639A9700840ADF /* TodayExtension.storyboard */; }; 2A741DC323639C7E00840ADF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 757E09971ADB8EEB006FD352 /* Localizable.strings */; }; 2A741DC62363A06000840ADF /* DWURLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A741DC52363A06000840ADF /* DWURLParser.m */; }; @@ -223,49 +206,16 @@ 2A7A7C16234B763600451078 /* DWLocalCurrencyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C15234B763600451078 /* DWLocalCurrencyViewController.m */; }; 2A7A7C1D234B771400451078 /* DWLocalCurrencyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C1C234B771400451078 /* DWLocalCurrencyModel.m */; }; 2A7A7C20234B79B700451078 /* DWLocalCurrencyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C1F234B79B700451078 /* DWLocalCurrencyTableViewCell.m */; }; - 2A7AF3152480DA51001D74F9 /* DWIncomingFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3142480DA51001D74F9 /* DWIncomingFetchedDataSource.m */; }; - 2A7AF3182480E35A001D74F9 /* DWContactsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3172480E35A001D74F9 /* DWContactsFetchedDataSource.m */; }; - 2A7AF31C2480E6AD001D74F9 /* DWNotificationsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF31B2480E6AD001D74F9 /* DWNotificationsModel.m */; }; - 2A7AF32824814A17001D74F9 /* DWNotificationsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF32724814A17001D74F9 /* DWNotificationsData.m */; }; - 2A7AF3402481A1B2001D74F9 /* DWDPGenericItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF33F2481A1B2001D74F9 /* DWDPGenericItemView.m */; }; - 2A7AF34424822AE0001D74F9 /* DWDPGenericContactRequestItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF34324822AE0001D74F9 /* DWDPGenericContactRequestItemView.m */; }; - 2A7AF34924823167001D74F9 /* DWDPGenericImageItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF34824823167001D74F9 /* DWDPGenericImageItemView.m */; }; - 2A7AF34C24823315001D74F9 /* DWDPGenericStatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF34B24823315001D74F9 /* DWDPGenericStatusItemView.m */; }; - 2A7AF3502482374D001D74F9 /* DWDPBasicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF34F2482374D001D74F9 /* DWDPBasicCell.m */; }; - 2A7AF35324823EC8001D74F9 /* DWDPIncomingRequestCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF35224823EC8001D74F9 /* DWDPIncomingRequestCell.m */; }; - 2A7AF35624824F97001D74F9 /* DWDPImageStatusCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF35524824F97001D74F9 /* DWDPImageStatusCell.m */; }; - 2A7AF35924824FEB001D74F9 /* DWDPTextStatusCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF35824824FEB001D74F9 /* DWDPTextStatusCell.m */; }; - 2A7AF36324825A0C001D74F9 /* DWDPUserObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF36224825A0C001D74F9 /* DWDPUserObject.m */; }; - 2A7AF3662482666C001D74F9 /* DWDPIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3652482666C001D74F9 /* DWDPIncomingRequestObject.m */; }; - 2A7AF36924826681001D74F9 /* DWDPRespondedIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF36824826681001D74F9 /* DWDPRespondedIncomingRequestObject.m */; }; - 2A7AF36C248266FB001D74F9 /* DWDPEstablishedContactObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF36B248266FB001D74F9 /* DWDPEstablishedContactObject.m */; }; - 2A7AF36F24826737001D74F9 /* DWDPContactObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF36E24826737001D74F9 /* DWDPContactObject.m */; }; - 2A7AF37224826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF37124826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.m */; }; - 2A7AF3752482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3742482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m */; }; - 2A7AF378248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF377248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m */; }; - 2A7AF37B2482756D001D74F9 /* DWDPPendingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF37A2482756D001D74F9 /* DWDPPendingRequestObject.m */; }; - 2A7AF380248280CE001D74F9 /* DWDPSearchItemsFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF37F248280CE001D74F9 /* DWDPSearchItemsFactory.m */; }; - 2A7AF3832482954C001D74F9 /* DWDPContactsItemsFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3822482954C001D74F9 /* DWDPContactsItemsFactory.m */; }; - 2A7AF38924829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF38824829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.m */; }; - 2A7AF38F2482BDF1001D74F9 /* UIFont+DWDPItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF38E2482BDF1001D74F9 /* UIFont+DWDPItem.m */; }; - 2A7AF3992482E32E001D74F9 /* DWDashPayContactsActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF3982482E32E001D74F9 /* DWDashPayContactsActions.m */; }; - 2A7AF39E2482FE46001D74F9 /* DWDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AF39D2482FE46001D74F9 /* DWDateFormatter.m */; }; 2A7F3B1B238C646600DEA3EF /* DWAdvancedSecurityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7F3B1A238C646600DEA3EF /* DWAdvancedSecurityViewController.m */; }; 2A7F3B1F238C651200DEA3EF /* DWSecurityStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7F3B1E238C651200DEA3EF /* DWSecurityStatusView.m */; }; 2A7F3B21238C653000DEA3EF /* DWSecurityStatusView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A7F3B20238C653000DEA3EF /* DWSecurityStatusView.xib */; }; - 2A80F39524D86201003E3B1E /* DWModalUserProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A80F39424D86201003E3B1E /* DWModalUserProfileViewController.m */; }; - 2A80F3D924DC55CD003E3B1E /* DWUserProfileSendRequestCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A80F3D824DC55CC003E3B1E /* DWUserProfileSendRequestCell.m */; }; 2A811559269CE09300215F81 /* uphold-logout.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2A811558269CE09300215F81 /* uphold-logout.jpg */; }; - 2A827B7224B5CA1800A42042 /* DWListCollectionLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A827B7124B5CA1800A42042 /* DWListCollectionLayout.m */; }; 2A858A0F237EE89C0097A7B5 /* DSWatchTransactionDataObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A06237EE89B0097A7B5 /* DSWatchTransactionDataObject.m */; }; 2A858A10237EE89C0097A7B5 /* BRAppleWatchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A08237EE89B0097A7B5 /* BRAppleWatchData.m */; }; 2A858A11237EE89C0097A7B5 /* DWPhoneWCSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0C237EE89B0097A7B5 /* DWPhoneWCSessionManager.m */; }; 2A858A12237EE89C0097A7B5 /* BRAppleWatchTransactionData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0E237EE89B0097A7B5 /* BRAppleWatchTransactionData.m */; }; 2A858A13237EE8A80097A7B5 /* BRAppleWatchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A08237EE89B0097A7B5 /* BRAppleWatchData.m */; }; 2A858A14237EE8A80097A7B5 /* BRAppleWatchTransactionData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0E237EE89B0097A7B5 /* BRAppleWatchTransactionData.m */; }; - 2A885FC82449B66500B9F679 /* DWSearchStateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A885FC62449B66500B9F679 /* DWSearchStateViewController.m */; }; - 2A885FCC2449F08700B9F679 /* DWUserSearchResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A885FCB2449F08700B9F679 /* DWUserSearchResultViewController.m */; }; - 2A885FD02449F37A00B9F679 /* DWUserSearchModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A885FCF2449F37A00B9F679 /* DWUserSearchModel.m */; }; 2A885FD6244DFEF100B9F679 /* UIView+DWFindConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A885FD5244DFEF100B9F679 /* UIView+DWFindConstraints.m */; }; 2A8B9E2922FB1C5D00FF8653 /* DWSharedUIConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E2822FB1C5D00FF8653 /* DWSharedUIConstants.m */; }; 2A8B9E3D22FD71E100FF8653 /* Payments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A8B9E3C22FD71E100FF8653 /* Payments.storyboard */; }; @@ -303,15 +253,8 @@ 2A913EB623A7E145006A2A59 /* DWTransactionStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EB523A7E145006A2A59 /* DWTransactionStub.m */; }; 2A9172C425233DC50024B4C5 /* DWPhraseRepairViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9172C325233DC50024B4C5 /* DWPhraseRepairViewController.m */; }; 2A9172D325233F4F0024B4C5 /* DWPhraseRepairChildViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9172D225233F4F0024B4C5 /* DWPhraseRepairChildViewController.m */; }; - 2A919F9C24A4DCAD0018C9A3 /* DWDPSmallContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A919F9B24A4DCAD0018C9A3 /* DWDPSmallContactView.m */; }; - 2A919F9F24A65CE00018C9A3 /* DWDPAmountContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A919F9E24A65CE00018C9A3 /* DWDPAmountContactView.m */; }; - 2A951CE423D1B92C00602824 /* DWBaseContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */; }; 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */; }; 2A9CEBB922E1FA1000A50237 /* DWHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBB822E1FA1000A50237 /* DWHomeViewController.m */; }; - 2A9D72AC249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9D72AB249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.m */; }; - 2A9E7DC723F6928C00CDA1EE /* DWTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9E7DC623F6928C00CDA1EE /* DWTextField.m */; }; - 2A9E7DCA23F6BD5200CDA1EE /* DWUsernameValidationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9E7DC923F6BD5200CDA1EE /* DWUsernameValidationView.m */; }; - 2A9E7DCE23F6C01A00CDA1EE /* DWUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9E7DCD23F6C01A00CDA1EE /* DWUsernameValidationRule.m */; }; 2A9FFDF42230FF1A00956D5F /* UIView+DWAnimations.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDEF2230FF1A00956D5F /* UIView+DWAnimations.m */; }; 2A9FFDF52230FF1A00956D5F /* SFSafariViewController+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDF22230FF1A00956D5F /* SFSafariViewController+DashWallet.m */; }; 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDFD2230FF2B00956D5F /* DWUpholdTransactionObject.m */; }; @@ -338,7 +281,6 @@ 2AA08534237D6CF500797F95 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AA08533237D6CF500797F95 /* CloudKit.framework */; }; 2AA87CFA26E5681100F0CEA6 /* DWCurrencyObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AA87CF926E5681100F0CEA6 /* DWCurrencyObject.m */; }; 2AB231D42196E27300A6E7E6 /* StartStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AB231D32196E27300A6E7E6 /* StartStoryboard.storyboard */; }; - 2AB2373824488DB80081B62C /* DWUserSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB2373724488DB80081B62C /* DWUserSearchViewController.m */; }; 2AB3415E23A8133A004E37A7 /* DWPayModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3415D23A8133A004E37A7 /* DWPayModelStub.m */; }; 2AB3416223A81E8B004E37A7 /* DWReceiveModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416123A81E8B004E37A7 /* DWReceiveModelStub.m */; }; 2AB3416523A8213C004E37A7 /* DWBaseReceiveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416423A8213C004E37A7 /* DWBaseReceiveModel.m */; }; @@ -348,20 +290,14 @@ 2AB3417723A92978004E37A7 /* DWDemoAdvancedSecurityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417623A92978004E37A7 /* DWDemoAdvancedSecurityViewController.m */; }; 2AB3417A23A929B6004E37A7 /* DWAdvancedSecurityModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417923A929B6004E37A7 /* DWAdvancedSecurityModelStub.m */; }; 2AB3417F23A92A2A004E37A7 /* DWBaseAdvancedSecurityModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417E23A92A2A004E37A7 /* DWBaseAdvancedSecurityModel.m */; }; - 2AB7303E24D0BC0400DCB420 /* UIColor+DWDashPay.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB7303D24D0BC0400DCB420 /* UIColor+DWDashPay.m */; }; 2AB7C907234DB82700A56795 /* About.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AB7C906234DB82700A56795 /* About.storyboard */; }; 2AB7F7E72384676200C173AD /* DWWatchDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB7F7E62384676200C173AD /* DWWatchDataManager.swift */; }; 2AB7F7E923846F6000C173AD /* DWMainInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB7F7E823846F6000C173AD /* DWMainInterfaceController.swift */; }; 2AB7F7EB2384752C00C173AD /* DWTxInfoDisplayableInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB7F7EA2384752C00C173AD /* DWTxInfoDisplayableInterfaceController.swift */; }; 2ABCA9182357A61B00092C09 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ABCA9172357A61B00092C09 /* Foundation.framework */; }; - 2AC52AD6241BB5FC00D9A829 /* DWDashPaySetupFlowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC52AD5241BB5FC00D9A829 /* DWDashPaySetupFlowController.m */; }; 2AC92C841FEB0A6D008CAEE0 /* DWQRScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C831FEB0A6D008CAEE0 /* DWQRScanViewController.m */; }; 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C861FEB0AE8008CAEE0 /* DWQRScanView.m */; }; 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C891FEB0B8B008CAEE0 /* DWQRScanModel.m */; }; - 2ACCA3A824BE0C7D00DB32DE /* DWDPTxListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCA3A724BE0C7D00DB32DE /* DWDPTxListCell.m */; }; - 2ACCA3AD24BE117300DB32DE /* DWProfileTxsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCA3AC24BE117300DB32DE /* DWProfileTxsFetchedDataSource.m */; }; - 2ACCA3B224BE3CDC00DB32DE /* DWUserProfileDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCA3B124BE3CDC00DB32DE /* DWUserProfileDataSourceObject.m */; }; - 2ACCA3B524BF280A00DB32DE /* DWDPTxObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCA3B424BF280A00DB32DE /* DWDPTxObject.m */; }; 2ACCD84D23180E7E00A96B62 /* DWPaymentOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD84C23180E7E00A96B62 /* DWPaymentOutput.m */; }; 2ACCD8592319399100A96B62 /* DWRequestAmountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8582319399100A96B62 /* DWRequestAmountViewController.m */; }; 2ACCD85D231939FE00A96B62 /* DWRequestAmountContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD85C231939FE00A96B62 /* DWRequestAmountContentView.m */; }; @@ -391,37 +327,14 @@ 2AD1CEA822E0C8C900C99324 /* DWPreviewSeedPhraseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CEA722E0C8C800C99324 /* DWPreviewSeedPhraseModel.m */; }; 2AD1CEAB22E18F1800C99324 /* DWGlobalOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CEAA22E18F1800C99324 /* DWGlobalOptions.m */; }; 2AD46232232A286000C71557 /* DWLockScreenModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD46231232A286000C71557 /* DWLockScreenModel.m */; }; - 2AD6E54D2487CE0100B52F14 /* DWContactsDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E54C2487CE0100B52F14 /* DWContactsDataSourceObject.m */; }; - 2AD6E5532487D50200B52F14 /* DWContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E5522487D50200B52F14 /* DWContactsModel.m */; }; - 2AD6E5572487D8C000B52F14 /* DWContactsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E5562487D8C000B52F14 /* DWContactsContentViewController.m */; }; - 2AD6E55A2487D9AF00B52F14 /* DWContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E5592487D9AF00B52F14 /* DWContactsViewController.m */; }; - 2AD6E5602487E13F00B52F14 /* DWRequestsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E55F2487E13F00B52F14 /* DWRequestsContentViewController.m */; }; - 2AD6E5632487E16400B52F14 /* DWRequestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E5622487E16400B52F14 /* DWRequestsViewController.m */; }; - 2AD6E56A2487E1DB00B52F14 /* DWRequestsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD6E5692487E1DB00B52F14 /* DWRequestsModel.m */; }; 2AD85A9F245881740045B480 /* DWQRScanStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD85A9E245881740045B480 /* DWQRScanStatusView.m */; }; - 2ADB396924223D9B00A6F898 /* DWDashPayAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADB396824223D9B00A6F898 /* DWDashPayAnimationView.m */; }; 2ADB396C242615C200A6F898 /* CALayer+MBAnimationPersistence.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADB396B242615C200A6F898 /* CALayer+MBAnimationPersistence.m */; }; 2ADC722923B5547000D9DD37 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 2ADC722723B5547000D9DD37 /* Localizable.stringsdict */; }; 2ADC9D1C24603C4F001D7C0D /* UISearchBar+DWAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D1B24603C4F001D7C0D /* UISearchBar+DWAdditions.m */; }; - 2ADC9D712462D4AD001D7C0D /* DWUserProfileHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D6E2462D4AD001D7C0D /* DWUserProfileHeaderView.m */; }; - 2ADC9D722462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D6F2462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.m */; }; - 2ADC9D732462D4AD001D7C0D /* DWUserProfileNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D702462D4AD001D7C0D /* DWUserProfileNavigationTitleView.m */; }; - 2ADC9D7624640A2B001D7C0D /* DWUserProfileModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D7524640A2B001D7C0D /* DWUserProfileModel.m */; }; - 2ADC9D7C24644E46001D7C0D /* DWUserProfileContactActionsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D7B24644E46001D7C0D /* DWUserProfileContactActionsCell.m */; }; 2ADF83FA23632D1C008459A7 /* BRBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 759816E619357D6F005060EA /* BRBubbleView.m */; }; 2ADF83FF23633116008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; 2ADF840023633121008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; - 2AE2F0F9245C16C8001DD722 /* DWUserProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2F0F8245C16C8001DD722 /* DWUserProfileViewController.m */; }; 2AE4736B241BC5E300804DD4 /* UIViewController+DWDisplayError.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE4736A241BC5E300804DD4 /* UIViewController+DWDisplayError.m */; }; - 2AE8B64123CDB98A0016F221 /* DWCreateUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE8B64023CDB98A0016F221 /* DWCreateUsernameViewController.m */; }; - 2AE8B64423CDC0F50016F221 /* DWInputUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE8B64323CDC0F50016F221 /* DWInputUsernameViewController.m */; }; - 2AE8B66423CF09000016F221 /* DWConfirmUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE8B66323CF09000016F221 /* DWConfirmUsernameViewController.m */; }; - 2AE8B66B23CF0F390016F221 /* DWUsernamePendingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE8B66A23CF0F390016F221 /* DWUsernamePendingViewController.m */; }; - 2AE9549D23D0C4F4003612B3 /* DWBaseContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE9549C23D0C4F4003612B3 /* DWBaseContactsViewController.m */; }; - 2AEC5CB52493D87D00F4A689 /* DWNotificationsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEC5CB42493D87D00F4A689 /* DWNotificationsProvider.m */; }; - 2AEC5CBB2494045C00F4A689 /* DWNotificationsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEC5CBA2494045C00F4A689 /* DWNotificationsFetchedDataSource.m */; }; - 2AEC5CBE24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEC5CBD24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.m */; }; - 2AEC5CC2249755BB00F4A689 /* DWDashPayContactsUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEC5CC1249755BB00F4A689 /* DWDashPayContactsUpdater.m */; }; 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */; }; 2AFCB9C423BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFCB9C323BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.m */; }; 2AFF01DB243F4559003718DC /* DWDPRegistrationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF01DA243F4559003718DC /* DWDPRegistrationStatus.m */; }; @@ -625,19 +538,81 @@ 47F4B6CD29485A8B00AED4C9 /* ConfirmOrderCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4B6CC29485A8B00AED4C9 /* ConfirmOrderCells.swift */; }; 47FA3AFF29350929008D58DC /* SyncingActivityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA3AFE29350929008D58DC /* SyncingActivityMonitor.swift */; }; 47FA3B0229364991008D58DC /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA3B0129364991008D58DC /* HTTPClient.swift */; }; + 7502A4872AE401EF00ACDDD3 /* UsernameVotingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7502A4862AE401EF00ACDDD3 /* UsernameVotingViewController.swift */; }; + 7513DA882AB175E0005D55F6 /* TopperViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527720E2AA9F58E0066557E /* TopperViewModel.swift */; }; + 7513DA892AB17606005D55F6 /* Topper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E2F3C92AA4D1B900C3B458 /* Topper.swift */; }; + 7513DA8A2AB17666005D55F6 /* SupportedTopperAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527720C2AA9B2630066557E /* SupportedTopperAssets.swift */; }; 7513DA8C2AB9643F005D55F6 /* BaseIntegrationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7513DA8B2AB9643F005D55F6 /* BaseIntegrationModel.swift */; }; + 7514E4E82AF233CF00A0466F /* VotingFiltersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7514E4E72AF233CF00A0466F /* VotingFiltersViewController.swift */; }; + 7514E4EA2AF2351F00A0466F /* VotingFiltersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7514E4E92AF2351F00A0466F /* VotingFiltersModel.swift */; }; + 7514E4EC2AF27E5900A0466F /* VotingHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7514E4EB2AF27E5900A0466F /* VotingHeaderView.swift */; }; + 751A57302B132FED00EF4925 /* RequestDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751A572F2B132FED00EF4925 /* RequestDetailsViewController.swift */; }; + 751B61C12ADFF98800D1C2EF /* BaseIntegrationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7513DA8B2AB9643F005D55F6 /* BaseIntegrationModel.swift */; }; + 751B61C22ADFF99D00D1C2EF /* CoinbaseDepositResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CED09F2ACFED200095F10C /* CoinbaseDepositResponse.swift */; }; + 751B61C32ADFF9AE00D1C2EF /* UpholdPortalModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FAABB62AB799AE00878224 /* UpholdPortalModel.swift */; }; + 751B61C42ADFF9D000D1C2EF /* CoinbaseDepositRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CED09D2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift */; }; + 751B61C52ADFFD0700D1C2EF /* IntegrationViewController+Uphold.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */; }; + 751B61C62ADFFD0A00D1C2EF /* IntegrationViewController+Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAE2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift */; }; + 751B61C82AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751B61C72AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift */; }; + 751B61C92AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751B61C72AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift */; }; 7527720D2AA9B2630066557E /* SupportedTopperAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527720C2AA9B2630066557E /* SupportedTopperAssets.swift */; }; 7527720F2AA9F58E0066557E /* TopperViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527720E2AA9F58E0066557E /* TopperViewModel.swift */; }; 752772122AAA1CE30066557E /* Coinbase-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 752772112AAA1CE30066557E /* Coinbase-Info.plist */; }; + 752C3ED22B1AF19C00F46CD3 /* BuySellPortal.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C9FAABB42AB793CE00878224 /* BuySellPortal.storyboard */; }; + 75303FE52AE7B70500870D8B /* CrowdNode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75303FE42AE7B70500870D8B /* CrowdNode.storyboard */; }; + 75303FE62AE7B70500870D8B /* CrowdNode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75303FE42AE7B70500870D8B /* CrowdNode.storyboard */; }; + 753FDBEA2AEA422F0005EEC3 /* VotingPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753FDBE92AEA422F0005EEC3 /* VotingPrefs.swift */; }; + 753FDBEC2AECF4CC0005EEC3 /* VotingHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 753FDBEB2AECF4CC0005EEC3 /* VotingHeaderView.xib */; }; + 753FDBEE2AECF52B0005EEC3 /* UsernameVoting.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 753FDBED2AECF52B0005EEC3 /* UsernameVoting.storyboard */; }; 754119E01CDA93FF0042DC51 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAE12BE61B2DEE7F00895CC5 /* NotificationCenter.framework */; }; + 754495DD2AE91B6300492817 /* GroupedRequestCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754495DC2AE91B6300492817 /* GroupedRequestCell.swift */; }; + 754495DF2AE91D3500492817 /* UsernameRequestCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754495DE2AE91D3500492817 /* UsernameRequestCell.swift */; }; + 755A22BD2B1385FD001F170D /* IconAttributedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755A22BC2B1385FD001F170D /* IconAttributedText.swift */; }; + 755B4B222B0C903500B844F0 /* DWDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */; }; + 755B4B232B0C903500B844F0 /* DWDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */; }; + 755E6DFE2A99E7A000A42870 /* DWInvitationSetupState.m in Sources */ = {isa = PBXBuildFile; fileRef = 755E6DFC2A99E7A000A42870 /* DWInvitationSetupState.m */; }; + 7565D5952B08B35F0092C9BA /* RequestUsernameViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7565D5942B08B35F0092C9BA /* RequestUsernameViewModel.swift */; }; + 757118DC2B0F189D000AE391 /* VerifyIdenityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757118DB2B0F189D000AE391 /* VerifyIdenityViewController.swift */; }; + 7573C2DF2B00C05900F4C347 /* CastVoteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2DE2B00C05900F4C347 /* CastVoteViewController.swift */; }; + 7573C2E12B01103900F4C347 /* VotingFilterItemSelectableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E02B01103900F4C347 /* VotingFilterItemSelectableCell.swift */; }; + 7573C2E32B01105F00F4C347 /* MasternodeIPCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E22B01105F00F4C347 /* MasternodeIPCell.swift */; }; + 7573C2E52B01120B00F4C347 /* MasternodeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E42B01120B00F4C347 /* MasternodeKey.swift */; }; + 757514E02B15D8DE0026AD8E /* VotingConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514DF2B15D8DE0026AD8E /* VotingConstants.swift */; }; + 757514E22B15DB510026AD8E /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514E12B15DB510026AD8E /* ShadowView.swift */; }; + 757514E32B15DF7C0026AD8E /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514E12B15DB510026AD8E /* ShadowView.swift */; }; + 757514E52B1735370026AD8E /* DPWelcomeMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514E42B1735370026AD8E /* DPWelcomeMenuView.swift */; }; 757E09991ADB8EEB006FD352 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 757E09971ADB8EEB006FD352 /* Localizable.strings */; }; + 75889B762AD296E700C17F5D /* CoinJoinInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75889B752AD296E700C17F5D /* CoinJoinInfoViewController.swift */; }; + 75889B792AD2A04900C17F5D /* CoinJoinInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75889B752AD296E700C17F5D /* CoinJoinInfoViewController.swift */; }; + 75889B7F2AD2D7F800C17F5D /* CoinJoin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75889B812AD2D7F800C17F5D /* CoinJoin.storyboard */; }; + 75889B892AD2DF0200C17F5D /* CoinJoin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75889B812AD2D7F800C17F5D /* CoinJoin.storyboard */; }; + 75A664D82B09F1EA007EFD16 /* VotingInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A664D72B09F1EA007EFD16 /* VotingInfoViewController.swift */; }; + 75A8C1652AE5726B0042256E /* UsernameRequestsDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1632AE5725C0042256E /* UsernameRequestsDAO.swift */; }; + 75A8C1672AE5734A0042256E /* UsernameRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1662AE5734A0042256E /* UsernameRequest.swift */; }; + 75A8C1692AE6A1AC0042256E /* VotingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1682AE6A1AC0042256E /* VotingViewModel.swift */; }; + 75AE5A7F2A87C363006CD4BA /* DWConfirmUsernameContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C943B5712A40ED4200AF23C5 /* DWConfirmUsernameContentView.xib */; }; + 75B2F45D2B0B1EC1004C071A /* RequestUsernameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B2F45C2B0B1EC1004C071A /* RequestUsernameViewController.swift */; }; + 75C1F0452AE26AC0006929CA /* CoinJoinViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F0442AE26AC0006929CA /* CoinJoinViewModel.swift */; }; + 75C1F0462AE26AC0006929CA /* CoinJoinViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F0442AE26AC0006929CA /* CoinJoinViewModel.swift */; }; + 75C1F09E2AFF675400FE675E /* EnterVotingKeyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F09D2AFF675400FE675E /* EnterVotingKeyViewController.swift */; }; + 75C83B522B11B62400C33660 /* ConfirmRequestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C83B512B11B62400C33660 /* ConfirmRequestViewController.swift */; }; + 75CED09E2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CED09D2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift */; }; + 75CED0A02ACFED200095F10C /* CoinbaseDepositResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CED09F2ACFED200095F10C /* CoinbaseDepositResponse.swift */; }; 75D5F3CE191EC270004AB296 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 75D5F3CD191EC270004AB296 /* main.m */; }; + 75D6561C2B07935000D1A902 /* WelcomeToDashpayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D6561B2B07935000D1A902 /* WelcomeToDashpayViewController.swift */; }; + 75D6561D2B07936100D1A902 /* UsernameRequests.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */; }; + 75D66D332B05E7AE00A8DDA6 /* QuickVoteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D66D322B05E7AE00A8DDA6 /* QuickVoteViewController.swift */; }; 75E2F3C82AA4CF1900C3B458 /* Topper-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 75E2F3C72AA4CF1900C3B458 /* Topper-Info.plist */; }; 75E2F3CA2AA4D1B900C3B458 /* Topper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E2F3C92AA4D1B900C3B458 /* Topper.swift */; }; 75E83CF61B5F997A0038FB70 /* coinflip.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 75E83CF51B5F997A0038FB70 /* coinflip.aiff */; }; + 75EAFBB12B04C057005ABC6A /* CustomHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EAFBB02B04C057005ABC6A /* CustomHUDView.swift */; }; + 75EAFBB22B04C057005ABC6A /* CustomHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EAFBB02B04C057005ABC6A /* CustomHUDView.swift */; }; 75F51AAD2ABD8C800057B499 /* IntegrationViewController+Uphold.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */; }; 75F51AAF2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAE2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift */; }; + 75F990822AFD1065006759AB /* UsernameRequestDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F990812AFD1065006759AB /* UsernameRequestDetailsViewController.swift */; }; 7EE06A55AFE483FA7824B06E /* libPods-DashWalletTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BEAE29AA65F429DD9EF1A1A7 /* libPods-DashWalletTests.a */; }; + A90D08EA4AA9019A2D806A9C /* libPods-dashwallet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 17427514C25A58AB4AEDF999 /* libPods-dashwallet.a */; }; + AEC28D84403A194A6C7D8C5A /* libPods-dashpay.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE89DF632BC53160BB8FBED1 /* libPods-dashpay.a */; }; BA4A72671BE11AFA00E39C01 /* BRAWWeakTimerTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4A72661BE11AFA00E39C01 /* BRAWWeakTimerTarget.swift */; }; BA54D3CE1B2EA74000C9CB28 /* TodayExtensionAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BA54D3CD1B2EA74000C9CB28 /* TodayExtensionAssets.xcassets */; }; BA6645961BD924EB007A6BB1 /* BRAWTransactionRowControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA6645951BD924EB007A6BB1 /* BRAWTransactionRowControl.swift */; }; @@ -653,17 +628,8 @@ BAA6E3F11BD5CA5900773205 /* BRAWReceiveMoneyInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAA6E3F01BD5CA5900773205 /* BRAWReceiveMoneyInterfaceController.swift */; }; BAE12BF21B2DEE7F00895CC5 /* TodayExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = BAE12BE51B2DEE7F00895CC5 /* TodayExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BAE12C061B2DEEF700895CC5 /* DWTodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BAE12C051B2DEEF700895CC5 /* DWTodayViewController.m */; }; - C3CA202C247E4AF300158074 /* DWNotificationsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CA202B247E4AF300158074 /* DWNotificationsViewController.m */; }; - C3CA2030247E54C400158074 /* DWNoNotificationsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C3CA202F247E54C400158074 /* DWNoNotificationsCell.m */; }; C3DAD268246AA6F10001624F /* DWScreenshotWarningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD267246AA6F10001624F /* DWScreenshotWarningViewController.m */; }; - C3DAD26F246D46BF0001624F /* DWFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD26E246D46BF0001624F /* DWFetchedResultsDataSource.m */; }; - C3DAD2C024747F580001624F /* DWSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2BF24747F580001624F /* DWSearchViewController.m */; }; - C3DAD2C3247512BA0001624F /* DWBaseContactsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2C2247512BA0001624F /* DWBaseContactsContentViewController.m */; }; - C3DAD2C8247538AA0001624F /* DWTitleActionHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2C5247538A90001624F /* DWTitleActionHeaderView.m */; }; - C3DAD2C9247538AA0001624F /* DWTitleActionHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C3DAD2C7247538AA0001624F /* DWTitleActionHeaderView.xib */; }; - C3DAD2CC24757A210001624F /* DWContactsSearchDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2CB24757A210001624F /* DWContactsSearchDataSourceObject.m */; }; C3DAD2CF247585C10001624F /* NSPredicate+DWFullTextSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2CE247585C10001624F /* NSPredicate+DWFullTextSearch.m */; }; - C3DAD2D52476886D0001624F /* DWContactsSearchInfoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2D42476886D0001624F /* DWContactsSearchInfoHeaderView.m */; }; C909614D29EFF7D600002D82 /* WalletKeysOverviewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909614C29EFF7D600002D82 /* WalletKeysOverviewModel.swift */; }; C909615129F158D700002D82 /* DerivationPathKeysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615029F158D700002D82 /* DerivationPathKeysViewController.swift */; }; C909615329F28E3700002D82 /* DerivationPathKeysModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615229F28E3700002D82 /* DerivationPathKeysModel.swift */; }; @@ -674,6 +640,199 @@ C917024129D462C6008C034D /* PayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C917024029D462C6008C034D /* PayViewController.swift */; }; C91E919729FBACE6003E7883 /* ExtendedPublicKeysModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91E919629FBACE6003E7883 /* ExtendedPublicKeysModel.swift */; }; C91E91AE29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91E91AD29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift */; }; + C93078482A6AD4F500906E4B /* ConfirmPaymentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF222A5C7D93002FAB75 /* ConfirmPaymentViewController.swift */; }; + C93078492A6AD4FC00906E4B /* UpholdConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF2E2A5D5F6B002FAB75 /* UpholdConfirmViewController.swift */; }; + C930784A2A6AD52400906E4B /* UpholdConfirmTransferModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF302A5D601C002FAB75 /* UpholdConfirmTransferModel.swift */; }; + C930784B2A6AD56B00906E4B /* SheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF2C2A5CEA1F002FAB75 /* SheetViewController.swift */; }; + C930784C2A6AD59700906E4B /* TitleValueCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF252A5CACE6002FAB75 /* TitleValueCell.swift */; }; + C930784D2A6AD59A00906E4B /* TitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF272A5CAD4D002FAB75 /* TitleCell.swift */; }; + C930784E2A6AD59E00906E4B /* ConfirmPaymentModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF2A2A5CC97F002FAB75 /* ConfirmPaymentModel.swift */; }; + C943B3172A408CED00AF23C5 /* DWErrorUpdatingUserProfileView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2BC2A408CEC00AF23C5 /* DWErrorUpdatingUserProfileView.m */; }; + C943B3182A408CED00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2C22A408CEC00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.m */; }; + C943B3192A408CED00AF23C5 /* DWDPUpdateProfileModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2C32A408CEC00AF23C5 /* DWDPUpdateProfileModel.m */; }; + C943B31A2A408CED00AF23C5 /* DWCurrentUserProfileView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2C52A408CEC00AF23C5 /* DWCurrentUserProfileView.m */; }; + C943B31B2A408CED00AF23C5 /* DWUpdatingUserProfileView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2C62A408CEC00AF23C5 /* DWUpdatingUserProfileView.m */; }; + C943B31D2A408CED00AF23C5 /* DWUserProfileContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2C82A408CEC00AF23C5 /* DWUserProfileContainerView.m */; }; + C943B31E2A408CED00AF23C5 /* DWUserProfileModalQRContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2CD2A408CEC00AF23C5 /* DWUserProfileModalQRContentView.m */; }; + C943B31F2A408CED00AF23C5 /* DWUserProfileModalQRViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2CE2A408CEC00AF23C5 /* DWUserProfileModalQRViewController.m */; }; + C943B3202A408CED00AF23C5 /* DWImgurInfoChildView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2D42A408CEC00AF23C5 /* DWImgurInfoChildView.m */; }; + C943B3212A408CED00AF23C5 /* DWImgurItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2D62A408CEC00AF23C5 /* DWImgurItemView.m */; }; + C943B3222A408CED00AF23C5 /* DWImgurInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2D72A408CEC00AF23C5 /* DWImgurInfoViewController.m */; }; + C943B3232A408CED00AF23C5 /* DWFaceDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2DC2A408CEC00AF23C5 /* DWFaceDetector.m */; }; + C943B3242A408CED00AF23C5 /* DWRootEditProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2DD2A408CEC00AF23C5 /* DWRootEditProfileViewController.m */; }; + C943B3252A408CED00AF23C5 /* DWEditProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2DE2A408CEC00AF23C5 /* DWEditProfileViewController.m */; }; + C943B3262A408CED00AF23C5 /* DWCropAvatarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2DF2A408CEC00AF23C5 /* DWCropAvatarViewController.m */; }; + C943B3272A408CED00AF23C5 /* DWAvatarEditSelectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2E12A408CEC00AF23C5 /* DWAvatarEditSelectorViewController.m */; }; + C943B3282A408CED00AF23C5 /* DWAvatarEditSelectorContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2E42A408CEC00AF23C5 /* DWAvatarEditSelectorContentView.m */; }; + C943B3292A408CED00AF23C5 /* DWExternalSourceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2E92A408CEC00AF23C5 /* DWExternalSourceViewController.m */; }; + C943B32A2A408CED00AF23C5 /* DWAvatarExternalSourceView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2EC2A408CEC00AF23C5 /* DWAvatarExternalSourceView.m */; }; + C943B32B2A408CED00AF23C5 /* DWAvatarExternalLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2EE2A408CEC00AF23C5 /* DWAvatarExternalLoadingView.m */; }; + C943B32C2A408CED00AF23C5 /* DWAvatarExternalSourceConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2EF2A408CEC00AF23C5 /* DWAvatarExternalSourceConfig.m */; }; + C943B32D2A408CED00AF23C5 /* DWAvatarPublicURLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2F22A408CEC00AF23C5 /* DWAvatarPublicURLViewController.m */; }; + C943B32E2A408CED00AF23C5 /* DWAvatarGravatarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2F32A408CEC00AF23C5 /* DWAvatarGravatarViewController.m */; }; + C943B32F2A408CED00AF23C5 /* DWSaveAlertViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2F72A408CEC00AF23C5 /* DWSaveAlertViewController.m */; }; + C943B3302A408CED00AF23C5 /* DWSaveAlertChildView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2F82A408CEC00AF23C5 /* DWSaveAlertChildView.m */; }; + C943B3312A408CED00AF23C5 /* DWProfileAboutCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2FC2A408CEC00AF23C5 /* DWProfileAboutCellModel.m */; }; + C943B3322A408CED00AF23C5 /* DWProfileDisplayNameCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B2FD2A408CEC00AF23C5 /* DWProfileDisplayNameCellModel.m */; }; + C943B3332A408CED00AF23C5 /* DWTextFieldFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3002A408CEC00AF23C5 /* DWTextFieldFormCellModel.m */; }; + C943B3342A408CED00AF23C5 /* DWTextViewFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3022A408CEC00AF23C5 /* DWTextViewFormCellModel.m */; }; + C943B3352A408CED00AF23C5 /* DWEditProfileTextViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3072A408CEC00AF23C5 /* DWEditProfileTextViewCell.m */; }; + C943B3362A408CED00AF23C5 /* DWEditProfileBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B30B2A408CEC00AF23C5 /* DWEditProfileBaseCell.m */; }; + C943B3372A408CED00AF23C5 /* DWEditProfileTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B30C2A408CEC00AF23C5 /* DWEditProfileTextFieldCell.m */; }; + C943B3382A408CED00AF23C5 /* DWEditProfileAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B30D2A408CEC00AF23C5 /* DWEditProfileAvatarView.m */; }; + C943B3392A408CED00AF23C5 /* DWUploadAvatarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B30F2A408CEC00AF23C5 /* DWUploadAvatarViewController.m */; }; + C943B33A2A408CED00AF23C5 /* DWUploadAvatarModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3102A408CEC00AF23C5 /* DWUploadAvatarModel.m */; }; + C943B33B2A408CED00AF23C5 /* DWUploadAvatarChildView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3152A408CEC00AF23C5 /* DWUploadAvatarChildView.m */; }; + C943B33C2A408CED00AF23C5 /* DWHourGlassAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3162A408CEC00AF23C5 /* DWHourGlassAnimationView.m */; }; + C943B3402A408E5500AF23C5 /* DWMainMenuViewController+DashPay.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B33F2A408E5500AF23C5 /* DWMainMenuViewController+DashPay.m */; }; + C943B3432A409F9E00AF23C5 /* UIImageView+DWDPAvatar.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3422A409F9E00AF23C5 /* UIImageView+DWDPAvatar.m */; }; + C943B3462A409FFA00AF23C5 /* DWDPAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3442A409FFA00AF23C5 /* DWDPAvatarView.m */; }; + C943B34D2A40A4C500AF23C5 /* DWInfoPopupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B34A2A40A4C500AF23C5 /* DWInfoPopupViewController.m */; }; + C943B34E2A40A4C500AF23C5 /* DWInfoPopupContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B34B2A40A4C500AF23C5 /* DWInfoPopupContentView.m */; }; + C943B4AB2A40A54600AF23C5 /* DWContactsPlaceholderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3522A40A54500AF23C5 /* DWContactsPlaceholderViewController.m */; }; + C943B4AC2A40A54600AF23C5 /* DWContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3542A40A54500AF23C5 /* DWContactsViewController.m */; }; + C943B4AD2A40A54600AF23C5 /* DWBaseContactsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3552A40A54500AF23C5 /* DWBaseContactsContentViewController.m */; }; + C943B4AE2A40A54600AF23C5 /* DWNoContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3572A40A54500AF23C5 /* DWNoContactsViewController.m */; }; + C943B4AF2A40A54600AF23C5 /* DWInvitationSuggestionView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3582A40A54500AF23C5 /* DWInvitationSuggestionView.m */; }; + C943B4B02A40A54600AF23C5 /* DWContactsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B35B2A40A54500AF23C5 /* DWContactsContentViewController.m */; }; + C943B4B12A40A54600AF23C5 /* DWBaseContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B35C2A40A54500AF23C5 /* DWBaseContactsViewController.m */; }; + C943B4B22A40A54600AF23C5 /* DWContactsDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B35F2A40A54500AF23C5 /* DWContactsDataSourceObject.m */; }; + C943B4B32A40A54600AF23C5 /* DWContactsSearchDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3602A40A54500AF23C5 /* DWContactsSearchDataSourceObject.m */; }; + C943B4B42A40A54600AF23C5 /* DWIncomingFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3682A40A54500AF23C5 /* DWIncomingFetchedDataSource.m */; }; + C943B4B52A40A54600AF23C5 /* DWContactsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3692A40A54600AF23C5 /* DWContactsFetchedDataSource.m */; }; + C943B4B62A40A54600AF23C5 /* DWFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B36A2A40A54600AF23C5 /* DWFetchedResultsDataSource.m */; }; + C943B4B72A40A54600AF23C5 /* DWBaseContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B36F2A40A54600AF23C5 /* DWBaseContactsModel.m */; }; + C943B4B82A40A54600AF23C5 /* DWContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3702A40A54600AF23C5 /* DWContactsModel.m */; }; + C943B4B92A40A54600AF23C5 /* DWRequestsContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3722A40A54600AF23C5 /* DWRequestsContentViewController.m */; }; + C943B4BA2A40A54600AF23C5 /* DWRequestsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3742A40A54600AF23C5 /* DWRequestsModel.m */; }; + C943B4BB2A40A54600AF23C5 /* DWRequestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3782A40A54600AF23C5 /* DWRequestsViewController.m */; }; + C943B4BC2A40A54600AF23C5 /* DWRootContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3792A40A54600AF23C5 /* DWRootContactsViewController.m */; }; + C943B4BD2A40A54600AF23C5 /* DWGlobalMatchHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3802A40A54600AF23C5 /* DWGlobalMatchHeaderView.m */; }; + C943B4BE2A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3812A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m */; }; + C943B4BF2A40A54600AF23C5 /* DWContactsSearchPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3822A40A54600AF23C5 /* DWContactsSearchPlaceholderView.m */; }; + C943B4C02A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3852A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m */; }; + C943B4C12A40A54600AF23C5 /* DWTitleActionHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C943B3872A40A54600AF23C5 /* DWTitleActionHeaderView.xib */; }; + C943B4C22A40A54600AF23C5 /* BaseCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3892A40A54600AF23C5 /* BaseCollectionReusableView.m */; }; + C943B4C32A40A54600AF23C5 /* DWTitleActionHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B38A2A40A54600AF23C5 /* DWTitleActionHeaderView.m */; }; + C943B4C42A40A54600AF23C5 /* DWSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B38F2A40A54600AF23C5 /* DWSearchViewController.m */; }; + C943B4C52A40A54600AF23C5 /* DWUserSearchModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3942A40A54600AF23C5 /* DWUserSearchModel.m */; }; + C943B4C62A40A54600AF23C5 /* DWUserSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3962A40A54600AF23C5 /* DWUserSearchViewController.m */; }; + C943B4C72A40A54600AF23C5 /* DWUserSearchResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B39A2A40A54600AF23C5 /* DWUserSearchResultViewController.m */; }; + C943B4C82A40A54600AF23C5 /* DWSearchStateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B39B2A40A54600AF23C5 /* DWSearchStateViewController.m */; }; + C943B4DB2A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3CA2A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.m */; }; + C943B4DC2A40A54600AF23C5 /* DWInvitationFlowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3CB2A40A54600AF23C5 /* DWInvitationFlowViewController.m */; }; + C943B4DD2A40A54600AF23C5 /* DWDPWelcomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3CC2A40A54600AF23C5 /* DWDPWelcomeViewController.m */; }; + C943B4DE2A40A54600AF23C5 /* DWDPWelcomePageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3CD2A40A54600AF23C5 /* DWDPWelcomePageViewController.m */; }; + C943B4DF2A40A54600AF23C5 /* DWGetStartedContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3CF2A40A54600AF23C5 /* DWGetStartedContentViewController.m */; }; + C943B4E02A40A54600AF23C5 /* DWGetStartedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3D12A40A54600AF23C5 /* DWGetStartedViewController.m */; }; + C943B4E12A40A54600AF23C5 /* DWGetStartedItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3D62A40A54600AF23C5 /* DWGetStartedItemView.m */; }; + C943B4E22A40A54600AF23C5 /* DWPassthroughView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3DD2A40A54600AF23C5 /* DWPassthroughView.m */; }; + C943B4E32A40A54600AF23C5 /* DWPassthroughStackView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3DE2A40A54600AF23C5 /* DWPassthroughStackView.m */; }; + C943B4E72A40A54600AF23C5 /* DWUserProfileDataSourceObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3EE2A40A54600AF23C5 /* DWUserProfileDataSourceObject.m */; }; + C943B4E82A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3EF2A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.m */; }; + C943B4E92A40A54600AF23C5 /* DWUserProfileModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3F32A40A54600AF23C5 /* DWUserProfileModel.m */; }; + C943B4EA2A40A54600AF23C5 /* DWUserProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3F42A40A54600AF23C5 /* DWUserProfileViewController.m */; }; + C943B4EB2A40A54600AF23C5 /* DWModalUserProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3F52A40A54600AF23C5 /* DWModalUserProfileViewController.m */; }; + C943B4EC2A40A54600AF23C5 /* DWUserProfileSendRequestCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3F82A40A54600AF23C5 /* DWUserProfileSendRequestCell.m */; }; + C943B4ED2A40A54600AF23C5 /* DWPendingContactInfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3FA2A40A54600AF23C5 /* DWPendingContactInfoView.m */; }; + C943B4EE2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3FD2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m */; }; + C943B4EF2A40A54600AF23C5 /* DWUserProfileHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B3FE2A40A54600AF23C5 /* DWUserProfileHeaderView.m */; }; + C943B4F02A40A54600AF23C5 /* DWUserProfileNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4012A40A54600AF23C5 /* DWUserProfileNavigationTitleView.m */; }; + C943B4F12A40A54600AF23C5 /* DWUserProfileContactActionsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4022A40A54600AF23C5 /* DWUserProfileContactActionsCell.m */; }; + C943B4F22A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4052A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m */; }; + C943B4F32A40A54600AF23C5 /* DWDPEstablishedContactObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4072A40A54600AF23C5 /* DWDPEstablishedContactObject.m */; }; + C943B4F42A40A54600AF23C5 /* DWDPUserObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4092A40A54600AF23C5 /* DWDPUserObject.m */; }; + C943B4F52A40A54600AF23C5 /* DWDPIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B40C2A40A54600AF23C5 /* DWDPIncomingRequestObject.m */; }; + C943B4F62A40A54600AF23C5 /* DWDPContactObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B40D2A40A54600AF23C5 /* DWDPContactObject.m */; }; + C943B4F72A40A54600AF23C5 /* DWDPTxObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4102A40A54600AF23C5 /* DWDPTxObject.m */; }; + C943B4F82A40A54600AF23C5 /* DWDPPendingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4122A40A54600AF23C5 /* DWDPPendingRequestObject.m */; }; + C943B4F92A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4152A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.m */; }; + C943B4FA2A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4162A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m */; }; + C943B4FB2A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4172A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.m */; }; + C943B4FC2A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B41B2A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.m */; }; + C943B4FD2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B41D2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.m */; }; + C943B4FE2A40A54600AF23C5 /* DWDPTextStatusCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B41F2A40A54600AF23C5 /* DWDPTextStatusCell.m */; }; + C943B4FF2A40A54600AF23C5 /* DWDPGenericContactRequestItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4222A40A54600AF23C5 /* DWDPGenericContactRequestItemView.m */; }; + C943B5002A40A54600AF23C5 /* DWDPTxItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4232A40A54600AF23C5 /* DWDPTxItemView.m */; }; + C943B5012A40A54600AF23C5 /* DWDPGenericItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4252A40A54600AF23C5 /* DWDPGenericItemView.m */; }; + C943B5022A40A54600AF23C5 /* DWDPGenericStatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4272A40A54600AF23C5 /* DWDPGenericStatusItemView.m */; }; + C943B5032A40A54600AF23C5 /* DWDPGenericImageItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4282A40A54600AF23C5 /* DWDPGenericImageItemView.m */; }; + C943B5042A40A54600AF23C5 /* DWDPImageStatusCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B42D2A40A54600AF23C5 /* DWDPImageStatusCell.m */; }; + C943B5052A40A54600AF23C5 /* DWDPIncomingRequestCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B42E2A40A54600AF23C5 /* DWDPIncomingRequestCell.m */; }; + C943B5062A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4302A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m */; }; + C943B5072A40A54600AF23C5 /* DWDPBasicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4312A40A54600AF23C5 /* DWDPBasicCell.m */; }; + C943B5082A40A54600AF23C5 /* DWDPTxListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4332A40A54600AF23C5 /* DWDPTxListCell.m */; }; + C943B5092A40A54600AF23C5 /* UIFont+DWDPItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4352A40A54600AF23C5 /* UIFont+DWDPItem.m */; }; + C943B50A2A40A54600AF23C5 /* DWDPContactsItemsFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4482A40A54600AF23C5 /* DWDPContactsItemsFactory.m */; }; + C943B50B2A40A54600AF23C5 /* DWDPSearchItemsFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4492A40A54600AF23C5 /* DWDPSearchItemsFactory.m */; }; + C943B50C2A40A54600AF23C5 /* DPAlertViewController+DWInvite.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B44F2A40A54600AF23C5 /* DPAlertViewController+DWInvite.m */; }; + C943B50D2A40A54600AF23C5 /* DWConfirmInvitationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4522A40A54600AF23C5 /* DWConfirmInvitationViewController.m */; }; + C943B50E2A40A54600AF23C5 /* DWConfirmInvitationContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4532A40A54600AF23C5 /* DWConfirmInvitationContentView.m */; }; + C943B50F2A40A54600AF23C5 /* DWConfirmInvitationContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C943B4562A40A54600AF23C5 /* DWConfirmInvitationContentView.xib */; }; + C943B5102A40A54600AF23C5 /* DWSendInviteFirstStepViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4572A40A54600AF23C5 /* DWSendInviteFirstStepViewController.m */; }; + C943B5112A40A54600AF23C5 /* DWInvitationHistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4592A40A54600AF23C5 /* DWInvitationHistoryViewController.m */; }; + C943B5122A40A54600AF23C5 /* DWInvitationHistoryModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B45C2A40A54600AF23C5 /* DWInvitationHistoryModel.m */; }; + C943B5132A40A54600AF23C5 /* DWHistoryFilterContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4602A40A54600AF23C5 /* DWHistoryFilterContentView.m */; }; + C943B5142A40A54600AF23C5 /* DWHistoryFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4612A40A54600AF23C5 /* DWHistoryFilterViewController.m */; }; + C943B5152A40A54600AF23C5 /* DWInvitationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4662A40A54600AF23C5 /* DWInvitationTableViewCell.m */; }; + C943B5162A40A54600AF23C5 /* DWCreateInvitationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4672A40A54600AF23C5 /* DWCreateInvitationButton.m */; }; + C943B5172A40A54600AF23C5 /* DWHistoryHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4692A40A54600AF23C5 /* DWHistoryHeaderView.m */; }; + C943B5182A40A54600AF23C5 /* DWInvitationPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B46E2A40A54600AF23C5 /* DWInvitationPreviewViewController.m */; }; + C943B5192A40A54600AF23C5 /* DWSendInviteFlowController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B46F2A40A54600AF23C5 /* DWSendInviteFlowController.m */; }; + C943B51A2A40A54600AF23C5 /* DWInvitationLinkBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4712A40A54600AF23C5 /* DWInvitationLinkBuilder.m */; }; + C943B51B2A40A54600AF23C5 /* BaseInvitationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C943B4722A40A54600AF23C5 /* BaseInvitationViewController.swift */; }; + C943B51C2A40A54600AF23C5 /* SuccessInvitationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C943B4732A40A54600AF23C5 /* SuccessInvitationViewController.swift */; }; + C943B51D2A40A54600AF23C5 /* InvitationBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C943B4762A40A54600AF23C5 /* InvitationBottomView.swift */; }; + C943B51E2A40A54600AF23C5 /* InvitationTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C943B4772A40A54600AF23C5 /* InvitationTopView.swift */; }; + C943B51F2A40A54600AF23C5 /* DWSuccessInvitationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4782A40A54600AF23C5 /* DWSuccessInvitationView.m */; }; + C943B5202A40A54600AF23C5 /* DWInvitationActionsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B47A2A40A54600AF23C5 /* DWInvitationActionsView.m */; }; + C943B5212A40A54600AF23C5 /* SuccessInvitationTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C943B47C2A40A54600AF23C5 /* SuccessInvitationTopView.swift */; }; + C943B5222A40A54600AF23C5 /* DWInvitationMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B47D2A40A54600AF23C5 /* DWInvitationMessageView.m */; }; + C943B5232A40A54600AF23C5 /* DWNetworkUnavailableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4802A40A54600AF23C5 /* DWNetworkUnavailableView.m */; }; + C943B5242A40A54600AF23C5 /* UIColor+DWDashPay.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4812A40A54600AF23C5 /* UIColor+DWDashPay.m */; }; + C943B5252A40A54600AF23C5 /* DWDPSmallContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4872A40A54600AF23C5 /* DWDPSmallContactView.m */; }; + C943B5262A40A54600AF23C5 /* DWDashPayAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4882A40A54600AF23C5 /* DWDashPayAnimationView.m */; }; + C943B5292A40A54600AF23C5 /* DWDashPayConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B48D2A40A54600AF23C5 /* DWDashPayConstants.m */; }; + C943B52A2A40A54600AF23C5 /* UIImageView+DWDPAvatar.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B48F2A40A54600AF23C5 /* UIImageView+DWDPAvatar.m */; }; + C943B52B2A40A54600AF23C5 /* DWDashPayContactsActions.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4912A40A54600AF23C5 /* DWDashPayContactsActions.m */; }; + C943B52C2A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4932A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.m */; }; + C943B52D2A40A54600AF23C5 /* DWDashPayContactsUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4962A40A54600AF23C5 /* DWDashPayContactsUpdater.m */; }; + C943B52E2A40A54600AF23C5 /* DWNotificationsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4982A40A54600AF23C5 /* DWNotificationsProvider.m */; }; + C943B52F2A40A54600AF23C5 /* DWNotificationsData.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4992A40A54600AF23C5 /* DWNotificationsData.m */; }; + C943B5302A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B49C2A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m */; }; + C943B5312A40A54600AF23C5 /* DWNoNotificationsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4A12A40A54600AF23C5 /* DWNoNotificationsCell.m */; }; + C943B5322A40A54600AF23C5 /* DWNotificationsInvitationCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4A22A40A54600AF23C5 /* DWNotificationsInvitationCell.m */; }; + C943B5332A40A54600AF23C5 /* DWNotificationsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4A72A40A54600AF23C5 /* DWNotificationsModel.m */; }; + C943B5342A40A54600AF23C5 /* DWListCollectionLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4A92A40A54600AF23C5 /* DWListCollectionLayout.m */; }; + C943B5352A40A54600AF23C5 /* DWNotificationsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B4AA2A40A54600AF23C5 /* DWNotificationsViewController.m */; }; + C943B5382A40A65B00AF23C5 /* DWScrollingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5362A40A65B00AF23C5 /* DWScrollingViewController.m */; }; + C943B53E2A40A6BE00AF23C5 /* DPAlertViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B53B2A40A6BE00AF23C5 /* DPAlertViewController.m */; }; + C943B53F2A40A6BE00AF23C5 /* DPAlertChildContentsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B53C2A40A6BE00AF23C5 /* DPAlertChildContentsView.m */; }; + C943B5432A40AFD100AF23C5 /* DWTxDetailPopupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5422A40AFD100AF23C5 /* DWTxDetailPopupViewController.m */; }; + C943B54A2A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5462A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.m */; }; + C943B54B2A40B52F00AF23C5 /* UIView+DWAutolayout.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5482A40B52F00AF23C5 /* UIView+DWAutolayout.m */; }; + C943B54E2A40B6B500AF23C5 /* DWColoredButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B54C2A40B6B500AF23C5 /* DWColoredButton.m */; }; + C943B5542A40C23500AF23C5 /* DWFilterHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C943B5522A40C23500AF23C5 /* DWFilterHeaderView.xib */; }; + C943B5582A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5572A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m */; }; + C943B55B2A40DD4000AF23C5 /* NSArray+DWFlatten.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B55A2A40DD4000AF23C5 /* NSArray+DWFlatten.m */; }; + C943B55E2A40E6F200AF23C5 /* DWFilterHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B55C2A40E6F200AF23C5 /* DWFilterHeaderView.m */; }; + C943B5892A40ED5A00AF23C5 /* DWDashPaySetupFlowController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5612A40ED4000AF23C5 /* DWDashPaySetupFlowController.m */; }; + C943B58A2A40ED5F00AF23C5 /* DWUsernamePendingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5632A40ED4000AF23C5 /* DWUsernamePendingViewController.m */; }; + C943B58B2A40ED6F00AF23C5 /* DWInputUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B56F2A40ED4200AF23C5 /* DWInputUsernameViewController.m */; }; + C943B58C2A40ED6F00AF23C5 /* DWUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5882A40ED4500AF23C5 /* DWUsernameValidationRule.m */; }; + C943B58D2A40ED6F00AF23C5 /* DWCreateUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B56E2A40ED4200AF23C5 /* DWCreateUsernameViewController.m */; }; + C943B58E2A40ED6F00AF23C5 /* DWAllowedCharactersUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5852A40ED4500AF23C5 /* DWAllowedCharactersUsernameValidationRule.m */; }; + C943B58F2A40ED6F00AF23C5 /* DWCheckExistenceUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5862A40ED4500AF23C5 /* DWCheckExistenceUsernameValidationRule.m */; }; + C943B5902A40ED6F00AF23C5 /* DWFirstUsernameSymbolValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B57E2A40ED4400AF23C5 /* DWFirstUsernameSymbolValidationRule.m */; }; + C943B5912A40ED7B00AF23C5 /* DWUsernameValidationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B57A2A40ED4300AF23C5 /* DWUsernameValidationView.m */; }; + C943B5922A40ED7B00AF23C5 /* DWTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5772A40ED4300AF23C5 /* DWTextField.m */; }; + C943B5932A40ED7B00AF23C5 /* DWUsernameHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5792A40ED4300AF23C5 /* DWUsernameHeaderView.m */; }; + C943B5942A40ED7B00AF23C5 /* DWPlanetarySystemView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B57C2A40ED4400AF23C5 /* DWPlanetarySystemView.m */; }; + C943B5952A40EDAB00AF23C5 /* DWLengthUsernameValidationRule.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5832A40ED4500AF23C5 /* DWLengthUsernameValidationRule.m */; }; + C943B5962A40EDC400AF23C5 /* DWRegistrationCompletedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5692A40ED4100AF23C5 /* DWRegistrationCompletedViewController.m */; }; + C943B5972A40EDDA00AF23C5 /* DWConfirmUsernameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5672A40ED4100AF23C5 /* DWConfirmUsernameViewController.m */; }; + C943B5982A40EDEF00AF23C5 /* DWConfirmUsernameContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B5722A40ED4200AF23C5 /* DWConfirmUsernameContentView.m */; }; + C943B59C2A40EE5300AF23C5 /* DWNetworkErrorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C943B59A2A40EE4800AF23C5 /* DWNetworkErrorViewController.m */; }; C94946E12A25F037008A678D /* DemoMainTabbarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94946E02A25F037008A678D /* DemoMainTabbarViewController.swift */; }; C94D98212A4CC78F00F3BEE1 /* DashInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98202A4CC78F00F3BEE1 /* DashInputField.swift */; }; C94D98232A4CC85400F3BEE1 /* UIView+Dash.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98222A4CC85400F3BEE1 /* UIView+Dash.swift */; }; @@ -686,6 +845,19 @@ C94F5E8C29D3FEC10034FD57 /* ShortcutsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8B29D3FEC10034FD57 /* ShortcutsModel.swift */; }; C94F5E8E29D404850034FD57 /* ShortcutCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8D29D404850034FD57 /* ShortcutCell.swift */; }; C94F5E9029D4060A0034FD57 /* ShortcutsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8F29D4060A0034FD57 /* ShortcutsView.swift */; }; + C956AF0C2A5B591A002FAB75 /* DashInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98202A4CC78F00F3BEE1 /* DashInputField.swift */; }; + C956AF0D2A5B592E002FAB75 /* TappableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9829CDD2A562822007132E4 /* TappableLabel.swift */; }; + C956AF0E2A5B592E002FAB75 /* UIControl+Dash.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98242A4CC8FD00F3BEE1 /* UIControl+Dash.swift */; }; + C956AF0F2A5B592E002FAB75 /* TappableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9829CE12A562CEE007132E4 /* TappableTextView.swift */; }; + C956AF102A5B592E002FAB75 /* UIView+Dash.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98222A4CC85400F3BEE1 /* UIView+Dash.swift */; }; + C956AF112A5B592E002FAB75 /* UIButton+Dash.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D982D2A544E8E00F3BEE1 /* UIButton+Dash.swift */; }; + C956AF122A5B5949002FAB75 /* PasteboardContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C133592A561FFA00B66651 /* PasteboardContentView.swift */; }; + C956AF132A5B5949002FAB75 /* EnterAddressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98292A53038400F3BEE1 /* EnterAddressModel.swift */; }; + C956AF142A5B5949002FAB75 /* EnterAddressViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94D98272A53035D00F3BEE1 /* EnterAddressViewController.swift */; }; + C956AF182A5C3306002FAB75 /* DWPressableButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C956AF162A5C3302002FAB75 /* DWPressableButton.m */; }; + C956AF1B2A5C337F002FAB75 /* DWBorderedActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C956AF1A2A5C337F002FAB75 /* DWBorderedActionButton.m */; }; + C956AF1E2A5C3397002FAB75 /* DWBaseActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C956AF1C2A5C3396002FAB75 /* DWBaseActionButton.m */; }; + C956AF212A5C33E5002FAB75 /* DWButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C956AF202A5C33E5002FAB75 /* DWButton.m */; }; C956AF232A5C7D93002FAB75 /* ConfirmPaymentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF222A5C7D93002FAB75 /* ConfirmPaymentViewController.swift */; }; C956AF262A5CACE6002FAB75 /* TitleValueCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF252A5CACE6002FAB75 /* TitleValueCell.swift */; }; C956AF282A5CAD4D002FAB75 /* TitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C956AF272A5CAD4D002FAB75 /* TitleCell.swift */; }; @@ -697,6 +869,598 @@ C9829CE22A562CEE007132E4 /* TappableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9829CE12A562CEE007132E4 /* TappableTextView.swift */; }; C9903A5429E6A5F600535A4E /* KeysOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9903A5329E6A5F600535A4E /* KeysOverviewViewController.swift */; }; C9C1335A2A561FFA00B66651 /* PasteboardContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C133592A561FFA00B66651 /* PasteboardContentView.swift */; }; + C9D2C6942A320AA000D15901 /* DWReceiveModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416123A81E8B004E37A7 /* DWReceiveModelStub.m */; }; + C9D2C6952A320AA000D15901 /* DWBaseAdvancedSecurityModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417E23A92A2A004E37A7 /* DWBaseAdvancedSecurityModel.m */; }; + C9D2C6962A320AA000D15901 /* DWBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE6D22DA357D00C99324 /* DWBaseViewController.m */; }; + C9D2C6972A320AA000D15901 /* DWBiometricAuthViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44314622CF82D9009BAF7F /* DWBiometricAuthViewController.m */; }; + C9D2C6982A320AA000D15901 /* CrowdNodeWebService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11517C86294B0FED004FC7BF /* CrowdNodeWebService.swift */; }; + C9D2C6992A320AA000D15901 /* DWStartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB231D12196E25D00A6E7E6 /* DWStartViewController.m */; }; + C9D2C69A2A320AA000D15901 /* CrowdNodeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11517C822949E6A3004FC7BF /* CrowdNodeAPI.swift */; }; + C9D2C69B2A320AA000D15901 /* DWStartModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB231D62196E5CF00A6E7E6 /* DWStartModel.m */; }; + C9D2C69C2A320AA000D15901 /* DWAdvancedSecurityModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417923A929B6004E37A7 /* DWAdvancedSecurityModelStub.m */; }; + C9D2C69D2A320AA000D15901 /* Foundation+Bitcoin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C32028818D5400B4BD48 /* Foundation+Bitcoin.swift */; }; + C9D2C69E2A320AA000D15901 /* AtmDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BBC28C1305E00490F5E /* AtmDetailsView.swift */; }; + C9D2C69F2A320AA000D15901 /* DWPlaceholderFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE3A2230FF4600956D5F /* DWPlaceholderFormTableViewCell.m */; }; + C9D2C6A02A320AA000D15901 /* DWTitleDetailCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69F12316B93F001B8C90 /* DWTitleDetailCellView.m */; }; + C9D2C6A12A320AA000D15901 /* AmountInputControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B728FE907300028A8D /* AmountInputControl.swift */; }; + C9D2C6A22A320AA000D15901 /* DWSegmentSliderFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1F640B238D5BBB00A9B505 /* DWSegmentSliderFormTableViewCell.m */; }; + C9D2C6A32A320AA000D15901 /* ApiCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B8449328F27C460082770C /* ApiCode.swift */; }; + C9D2C6A42A320AA000D15901 /* CoinbaseEntryPointModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B91290701470003E8AB /* CoinbaseEntryPointModel.swift */; }; + C9D2C6A52A320AA000D15901 /* SyncingAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451EA2A0BF10B00825057 /* SyncingAlertViewController.swift */; }; + C9D2C6A72A320AA000D15901 /* CrowdNodeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B8449528F5B9F80082770C /* CrowdNodeResponse.swift */; }; + C9D2C6A82A320AA000D15901 /* FileManager+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BB128BFF61A00490F5E /* FileManager+DashWallet.swift */; }; + C9D2C6A92A320AA000D15901 /* PointOfUseItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BCB28C1305E00490F5E /* PointOfUseItemCell.swift */; }; + C9D2C6AA2A320AA000D15901 /* DSTransaction+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47083B3129892D770010AF71 /* DSTransaction+DashWallet.swift */; }; + C9D2C6AC2A320AA000D15901 /* PayableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42F9E29DA82E5001BC549 /* PayableViewController.swift */; }; + C9D2C6AD2A320AA000D15901 /* HairlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1428C6378E00490F5E /* HairlineView.swift */; }; + C9D2C6AE2A320AA000D15901 /* DWInitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E9423A3F75F006A2A59 /* DWInitialViewController.m */; }; + C9D2C6AF2A320AA000D15901 /* PortalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751136B28D9A3DB00223B77 /* PortalViewController.swift */; }; + C9D2C6B02A320AA000D15901 /* DWSettingsMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BD52348CB6600451078 /* DWSettingsMenuViewController.m */; }; + C9D2C6B12A320AA000D15901 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1D28C7491C00490F5E /* AboutViewController.swift */; }; + C9D2C6B22A320AA000D15901 /* UISpringTimingParameters+DWInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69D92314727F001B8C90 /* UISpringTimingParameters+DWInit.m */; }; + C9D2C6B42A320AA000D15901 /* DWToolsMenuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BDC2348DC0A00451078 /* DWToolsMenuModel.m */; }; + C9D2C6B62A320AA000D15901 /* NumberKeyboardButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661AC28F972BD00028A8D /* NumberKeyboardButton.swift */; }; + C9D2C6B72A320AA000D15901 /* IsDefaultEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AE3DD72997C599000856EE /* IsDefaultEmail.swift */; }; + C9D2C6B82A320AA000D15901 /* DWHomeViewController+DWSecureWalletDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7DC223266C8400BA8C6A /* DWHomeViewController+DWSecureWalletDelegateImpl.m */; }; + C9D2C6BA2A320AA000D15901 /* DWUpholdAccountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFF292233E60F00956D5F /* DWUpholdAccountObject.m */; }; + C9D2C6BB2A320AA000D15901 /* DWFormTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE2E2230FF4600956D5F /* DWFormTableViewController.m */; }; + C9D2C6BC2A320AA000D15901 /* WalletKeysOverviewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909614C29EFF7D600002D82 /* WalletKeysOverviewModel.swift */; }; + C9D2C6BD2A320AA000D15901 /* UIAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751137428DAF28800223B77 /* UIAssembly.swift */; }; + C9D2C6BE2A320AA000D15901 /* DWLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BAC28BFAE6700490F5E /* DWLocationManager.swift */; }; + C9D2C6BF2A320AA000D15901 /* FetchingNextPageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BCE28C1305E00490F5E /* FetchingNextPageCell.swift */; }; + C9D2C6C02A320AA000D15901 /* Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47081196298CF20B003FCA3D /* Transaction.swift */; }; + C9D2C6C12A320AA000D15901 /* AllMerchantLocationsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BB728C1305E00490F5E /* AllMerchantLocationsViewController.swift */; }; + C9D2C6C22A320AA000D15901 /* DWPaymentOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD84C23180E7E00A96B62 /* DWPaymentOutput.m */; }; + C9D2C6C32A320AA000D15901 /* DWPayModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3415D23A8133A004E37A7 /* DWPayModelStub.m */; }; + C9D2C6C42A320AA000D15901 /* DWRecoverContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFF0230531DA00C475EB /* DWRecoverContentView.m */; }; + C9D2C6C52A320AA000D15901 /* DWSeedPhraseViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE8F22DD070000C99324 /* DWSeedPhraseViewLayout.m */; }; + C9D2C6C62A320AA000D15901 /* Coinbase+Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477F500F2950A55A003C7508 /* Coinbase+Error.swift */; }; + C9D2C6C72A320AA000D15901 /* DWPaymentOutput+DWView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A63003E2327B4BB00827825 /* DWPaymentOutput+DWView.m */; }; + C9D2C6C82A320AA000D15901 /* UIView+DWRecursiveSubview.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACD53ED234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m */; }; + C9D2C6C92A320AA000D15901 /* AddressStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11860922297598B400279FCC /* AddressStatus.swift */; }; + C9D2C6CA2A320AA000D15901 /* ExtendedPublicKeysModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91E919629FBACE6003E7883 /* ExtendedPublicKeysModel.swift */; }; + C9D2C6CB2A320AA000D15901 /* OrderPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAD3297022B300F63AC4 /* OrderPreviewViewController.swift */; }; + C9D2C6CC2A320AA000D15901 /* ActivePaymentMethodView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C982E294305D800FAA0F0 /* ActivePaymentMethodView.swift */; }; + C9D2C6CD2A320AA000D15901 /* BasicInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDEEC62949DC38008AE06D /* BasicInfoController.swift */; }; + C9D2C6CE2A320AA000D15901 /* DWPreviewSeedPhraseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CEA722E0C8C800C99324 /* DWPreviewSeedPhraseModel.m */; }; + C9D2C6CF2A320AA000D15901 /* DWModalPresentationAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69CC23142F90001B8C90 /* DWModalPresentationAnimation.m */; }; + C9D2C6D02A320AA000D15901 /* UINavigationController+CrowdNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110C679929227948006B580C /* UINavigationController+CrowdNode.swift */; }; + C9D2C6D12A320AA000D15901 /* DWReceiveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E792302E67400FF8653 /* DWReceiveModel.m */; }; + C9D2C6D22A320AA000D15901 /* TransactionWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D092905413F00D406C1 /* TransactionWrapper.swift */; }; + C9D2C6D32A320AA000D15901 /* Transactions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479DBDDC2995168C00F30AF1 /* Transactions.swift */; }; + C9D2C6D42A320AA000D15901 /* DWRecoverTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFFA2305464C00C475EB /* DWRecoverTextView.m */; }; + C9D2C6D52A320AA000D15901 /* TxUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C314287EA11900B4BD48 /* TxUserInfo.swift */; }; + C9D2C6D62A320AA000D15901 /* ExtendedPublicKeysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91E91AD29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift */; }; + C9D2C6D82A320AA000D15901 /* AtmListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDD28C1305E00490F5E /* AtmListViewController.swift */; }; + C9D2C6D92A320AA000D15901 /* TxDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5145F2848F75B005A8E3E /* TxDetailViewController.swift */; }; + C9D2C6DA2A320AA000D15901 /* NSAttributedString+Builder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13E9299E5396006903F1 /* NSAttributedString+Builder.swift */; }; + C9D2C6DB2A320AA000D15901 /* DWPreviewSeedPhraseContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE7922DB5F5200C99324 /* DWPreviewSeedPhraseContentView.m */; }; + C9D2C6DC2A320AA000D15901 /* DWPhoneWCSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0C237EE89B0097A7B5 /* DWPhoneWCSessionManager.m */; }; + C9D2C6DD2A320AA000D15901 /* NumberKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661AA28F9707A00028A8D /* NumberKeyboard.swift */; }; + C9D2C6DE2A320AA000D15901 /* DWSeedPhraseTitledView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431E522D73617009BAF7F /* DWSeedPhraseTitledView.m */; }; + C9D2C6E02A320AA000D15901 /* CrowdNodeTopUpTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D0B2907C61400D406C1 /* CrowdNodeTopUpTx.swift */; }; + C9D2C6E12A320AA000D15901 /* BackupInfoItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FB329DD86FB001BC549 /* BackupInfoItemView.swift */; }; + C9D2C6E32A320AA000D15901 /* AccountCreatingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 118A1392291AA21B002641E4 /* AccountCreatingController.swift */; }; + C9D2C6E42A320AA000D15901 /* UIView+DWReuseHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E534322F02BC300E5168A /* UIView+DWReuseHelper.m */; }; + C9D2C6E52A320AA000D15901 /* DWExtendedContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E9B23A53B8E006A2A59 /* DWExtendedContainerViewController.m */; }; + C9D2C6E62A320AA000D15901 /* CrowdNodeEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11517C842949E6F0004FC7BF /* CrowdNodeEndpoint.swift */; }; + C9D2C6E72A320AA000D15901 /* ServiceEntryPointModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F71317428F4365C0072F454 /* ServiceEntryPointModel.swift */; }; + C9D2C6E82A320AA000D15901 /* ExploreDash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8B9428BFACA100490F5E /* ExploreDash.swift */; }; + C9D2C6E92A320AA000D15901 /* DWToolsMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BDF2348DC1900451078 /* DWToolsMenuViewController.m */; }; + C9D2C6EB2A320AA000D15901 /* UpholdAmountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4789D22E2981067600BAFEFA /* UpholdAmountModel.swift */; }; + C9D2C6EC2A320AA000D15901 /* DWModalInteractiveTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69BC23140779001B8C90 /* DWModalInteractiveTransition.m */; }; + C9D2C6F02A320AA000D15901 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; + C9D2C6F12A320AA000D15901 /* CNCreateAccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47083B3529893E700010AF71 /* CNCreateAccountCell.swift */; }; + C9D2C6F22A320AA000D15901 /* DWSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4430ED22CBBAC9009BAF7F /* DWSetupViewController.m */; }; + C9D2C6F32A320AA000D15901 /* ExploreDatabaseConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BA928BFAE5800490F5E /* ExploreDatabaseConnection.swift */; }; + C9D2C6F42A320AA000D15901 /* WithdrawalLimitsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4B296C51B500788E18 /* WithdrawalLimitsController.swift */; }; + C9D2C6F52A320AA000D15901 /* CoinbaseTransactionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA928C896BC000427E7 /* CoinbaseTransactionResponse.swift */; }; + C9D2C6F72A320AA000D15901 /* TxDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C31A288020DE00B4BD48 /* TxDetailModel.swift */; }; + C9D2C6F82A320AA000D15901 /* NewAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD737D28E6BD7400A34022 /* NewAccountViewController.swift */; }; + C9D2C6F92A320AA000D15901 /* PointOfUseListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD728C1305E00490F5E /* PointOfUseListModel.swift */; }; + C9D2C6FA2A320AA000D15901 /* NSPredicate+DWFullTextSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD2CE247585C10001624F /* NSPredicate+DWFullTextSearch.m */; }; + C9D2C6FB2A320AA000D15901 /* TxReclassifyTransactionsWhereToChangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F2C6832860513900C2B774 /* TxReclassifyTransactionsWhereToChangeViewController.swift */; }; + C9D2C6FC2A320AA000D15901 /* DWLocalCurrencyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C15234B763600451078 /* DWLocalCurrencyViewController.m */; }; + C9D2C6FD2A320AA000D15901 /* BadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451FC2A0CC4A300825057 /* BadgeView.swift */; }; + C9D2C6FE2A320AA000D15901 /* HomeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F42A0CAC9400825057 /* HomeHeaderView.swift */; }; + C9D2C6FF2A320AA000D15901 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F82A0CB08900825057 /* ProgressView.swift */; }; + C9D2C7002A320AA000D15901 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; + C9D2C7012A320AA000D15901 /* ExplorePointOfUseListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD228C1305E00490F5E /* ExplorePointOfUseListViewController.swift */; }; + C9D2C7022A320AA000D15901 /* CrowdNodeWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117ECC7D29742A42003D798E /* CrowdNodeWebViewController.swift */; }; + C9D2C7032A320AA000D15901 /* UIViewController+DWDisplayError.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE4736A241BC5E300804DD4 /* UIViewController+DWDisplayError.m */; }; + C9D2C7042A320AA000D15901 /* BRAppleWatchData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A08237EE89B0097A7B5 /* BRAppleWatchData.m */; }; + C9D2C7052A320AA000D15901 /* DWRequestAmountContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD85C231939FE00A96B62 /* DWRequestAmountContentView.m */; }; + C9D2C7062A320AA000D15901 /* DWOnboardingModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416E23A8DCFB004E37A7 /* DWOnboardingModel.m */; }; + C9D2C7072A320AA000D15901 /* AmountInputTypeSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7628FFFFAD0003E8AB /* AmountInputTypeSwitcher.swift */; }; + C9D2C7082A320AA000D15901 /* DWPlaceholderFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE3D2230FF4600956D5F /* DWPlaceholderFormCellModel.m */; }; + C9D2C7092A320AA000D15901 /* DWOverlapControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E4E22FED47E00FF8653 /* DWOverlapControl.m */; }; + C9D2C70A2A320AA000D15901 /* CoinsToAddressTxFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D052905200300D406C1 /* CoinsToAddressTxFilter.swift */; }; + C9D2C70B2A320AA000D15901 /* DWDemoAppRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417223A926C9004E37A7 /* DWDemoAppRootViewController.m */; }; + C9D2C70C2A320AA000D15901 /* DWUpholdLogoutTutorialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE652230FF4600956D5F /* DWUpholdLogoutTutorialViewController.m */; }; + C9D2C70D2A320AA000D15901 /* CBAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF46A429654E190067B6EE /* CBAccount.swift */; }; + C9D2C70E2A320AA000D15901 /* Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AF180429070B720025803E /* Types.swift */; }; + C9D2C70F2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7112A320AA000D15901 /* Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCDA28F3FA9C008CF87D /* Coinbase.swift */; }; + C9D2C7122A320AA000D15901 /* SyncModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F452072A11F28600825057 /* SyncModel.swift */; }; + C9D2C7132A320AA000D15901 /* ReceiveContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FAA29DC1098001BC549 /* ReceiveContentView.swift */; }; + C9D2C7142A320AA000D15901 /* AmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7428FFD1D10003E8AB /* AmountView.swift */; }; + C9D2C7152A320AA000D15901 /* DWBasePayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD85423191C8500A96B62 /* DWBasePayViewController.m */; }; + C9D2C7162A320AA000D15901 /* CrowdNodeTransferModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1193FF3529602835004EA8D7 /* CrowdNodeTransferModel.swift */; }; + C9D2C7172A320AA000D15901 /* DWSetPinViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44312522CCC14F009BAF7F /* DWSetPinViewController.m */; }; + C9D2C7182A320AA000D15901 /* ConfirmOrderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4B6C6294842DF00AED4C9 /* ConfirmOrderController.swift */; }; + C9D2C71B2A320AA000D15901 /* DWResetWalletInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A10EB432358D2CA00C38B61 /* DWResetWalletInfoViewController.m */; }; + C9D2C71C2A320AA000D15901 /* DWLockScreenModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD46231232A286000C71557 /* DWLockScreenModel.m */; }; + C9D2C71D2A320AA000D15901 /* DWVerifySeedPhraseContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE8922DC9C6F00C99324 /* DWVerifySeedPhraseContentView.m */; }; + C9D2C71E2A320AA000D15901 /* Coinbase+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A2E1293DCCEA00938DB7 /* Coinbase+Constants.swift */; }; + C9D2C71F2A320AA000D15901 /* PointOfUseListSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0628C2274200490F5E /* PointOfUseListSearchCell.swift */; }; + C9D2C7202A320AA000D15901 /* ServiceDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCE028F44BA3008CF87D /* ServiceDataProvider.swift */; }; + C9D2C7212A320AA000D15901 /* PaymentButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451E62A0BA16400825057 /* PaymentButton.swift */; }; + C9D2C7222A320AA000D15901 /* DWPreviewSeedPhraseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431DA22D675CD009BAF7F /* DWPreviewSeedPhraseViewController.m */; }; + C9D2C7242A320AA000D15901 /* WKWebView+CrowdNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D1780298BA9AF005BEB30 /* WKWebView+CrowdNode.swift */; }; + C9D2C7252A320AA000D15901 /* SyncingActivityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA3AFE29350929008D58DC /* SyncingActivityMonitor.swift */; }; + C9D2C7262A320AA000D15901 /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FAF29DC27F4001BC549 /* EmptyView.swift */; }; + C9D2C7272A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7282A320AA000D15901 /* DWQRScanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C891FEB0B8B008CAEE0 /* DWQRScanModel.m */; }; + C9D2C7292A320AA000D15901 /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3DC87023972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m */; }; + C9D2C72A2A320AA000D15901 /* SyncView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F62A0CAE1300825057 /* SyncView.swift */; }; + C9D2C72B2A320AA000D15901 /* SuccessfulOperationStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47522F4F2927CB9000EE143E /* SuccessfulOperationStatusViewController.swift */; }; + C9D2C72C2A320AA000D15901 /* CustodialSwapsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E94B99296D7F99000FE68E /* CustodialSwapsModel.swift */; }; + C9D2C72D2A320AA000D15901 /* DWLocalCurrencyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C1F234B79B700451078 /* DWLocalCurrencyTableViewCell.m */; }; + C9D2C72E2A320AA000D15901 /* DWRecoverModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFFD2305763F00C475EB /* DWRecoverModel.m */; }; + C9D2C72F2A320AA000D15901 /* DWCenteredTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431C722D4D92A009BAF7F /* DWCenteredTableView.m */; }; + C9D2C7302A320AA000D15901 /* DWOnboardingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E6E23A26663006A2A59 /* DWOnboardingViewController.m */; }; + C9D2C7322A320AA000D15901 /* CrowdNode+UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C51296D620D00788E18 /* CrowdNode+UserDefaults.swift */; }; + C9D2C7342A320AA000D15901 /* DWPinView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44313822CE2CB9009BAF7F /* DWPinView.m */; }; + C9D2C7362A320AA000D15901 /* DWBaseReceiveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416423A8213C004E37A7 /* DWBaseReceiveModel.m */; }; + C9D2C7372A320AA000D15901 /* DWSegmentSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1F6411238D650200A9B505 /* DWSegmentSlider.m */; }; + C9D2C7382A320AA000D15901 /* CoinbasePlaceBuyOrderRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA528C896BC000427E7 /* CoinbasePlaceBuyOrderRequest.swift */; }; + C9D2C7392A320AA000D15901 /* CoinbaseAmount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFB128C896BC000427E7 /* CoinbaseAmount.swift */; }; + C9D2C73A2A320AA000D15901 /* DWDPRegistrationErrorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF01DD243F74BE003718DC /* DWDPRegistrationErrorTableViewCell.m */; }; + C9D2C73B2A320AA000D15901 /* SendAmountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D7D29102F6E0080C326 /* SendAmountModel.swift */; }; + C9D2C73C2A320AA000D15901 /* DWDecimalInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFF252233E5CF00956D5F /* DWDecimalInputValidator.m */; }; + C9D2C73D2A320AA000D15901 /* PaymentMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF46A729655E8E0067B6EE /* PaymentMethods.swift */; }; + C9D2C73E2A320AA000D15901 /* DWTitleDetailCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7D962322D0BC00BA8C6A /* DWTitleDetailCellModel.m */; }; + C9D2C73F2A320AA000D15901 /* BuyDashModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C98282942DDB800FAA0F0 /* BuyDashModel.swift */; }; + C9D2C7402A320AA000D15901 /* MerchantListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD328C1305E00490F5E /* MerchantListViewController.swift */; }; + C9D2C7412A320AA000D15901 /* DWUpholdCardObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE012230FF2B00956D5F /* DWUpholdCardObject.m */; }; + C9D2C7422A320AA000D15901 /* DWIntrinsicCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD72122F9B571008C7BC9 /* DWIntrinsicCollectionView.m */; }; + C9D2C7432A320AA000D15901 /* DWRootModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E7E23A30609006A2A59 /* DWRootModelStub.m */; }; + C9D2C7452A320AA000D15901 /* UIDevice+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD6ED22F48159008C7BC9 /* UIDevice+DashWallet.m */; }; + C9D2C7462A320AA000D15901 /* CBAccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF46AB2965B65B0067B6EE /* CBAccountManager.swift */; }; + C9D2C7472A320AA000D15901 /* FailedOperationStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47522F512927CBEE00EE143E /* FailedOperationStatusViewController.swift */; }; + C9D2C7482A320AA000D15901 /* UIPanGestureRecognizer+DWProjected.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69C22314126D001B8C90 /* UIPanGestureRecognizer+DWProjected.m */; }; + C9D2C7492A320AA000D15901 /* DWCurrencyObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AA87CF926E5681100F0CEA6 /* DWCurrencyObject.m */; }; + C9D2C74A2A320AA000D15901 /* ShortcutsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8F29D4060A0034FD57 /* ShortcutsView.swift */; }; + C9D2C74B2A320AA000D15901 /* DWFormSectionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE3E2230FF4600956D5F /* DWFormSectionModel.m */; }; + C9D2C74C2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C74D2A320AA000D15901 /* CoinbasePlaceBuyOrderResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA628C896BC000427E7 /* CoinbasePlaceBuyOrderResponse.swift */; }; + C9D2C74E2A320AA000D15901 /* ExploreMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDC28C1305E00490F5E /* ExploreMapView.swift */; }; + C9D2C74F2A320AA000D15901 /* DWSeedPhraseRow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE9322DD078600C99324 /* DWSeedPhraseRow.m */; }; + C9D2C7502A320AA000D15901 /* ServiceOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F71317828F436ED0072F454 /* ServiceOverviewViewController.swift */; }; + C9D2C7512A320AA000D15901 /* AccountListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAC3296EFE9500F63AC4 /* AccountListModel.swift */; }; + C9D2C7532A320AA000D15901 /* DWRecoverWalletCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3DC86D239717C2004B3DBA /* DWRecoverWalletCommand.m */; }; + C9D2C7542A320AA000D15901 /* DWSwitcherFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE322230FF4600956D5F /* DWSwitcherFormTableViewCell.m */; }; + C9D2C7552A320AA000D15901 /* DWPaymentInput.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C699B23104588001B8C90 /* DWPaymentInput.m */; }; + C9D2C7572A320AA000D15901 /* OnlineAccountDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114D16B529812730009A124C /* OnlineAccountDetailsController.swift */; }; + C9D2C7582A320AA000D15901 /* UIApplication+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451E82A0BDAE700825057 /* UIApplication+DashWallet.swift */; }; + C9D2C7592A320AA000D15901 /* OnlineAccountInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D1783298E68A8005BEB30 /* OnlineAccountInfoController.swift */; }; + C9D2C75A2A320AA000D15901 /* PaymentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F372912D9DC00C70123 /* PaymentController.swift */; }; + C9D2C75B2A320AA000D15901 /* CALayer+MBAnimationPersistence.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADB396B242615C200A6F898 /* CALayer+MBAnimationPersistence.m */; }; + C9D2C75C2A320AA000D15901 /* UIView+DWAnimations.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDEF2230FF1A00956D5F /* UIView+DWAnimations.m */; }; + C9D2C75D2A320AA000D15901 /* VerifiedSuccessfullyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114573A32949B221009DCF27 /* VerifiedSuccessfullyViewController.swift */; }; + C9D2C75E2A320AA000D15901 /* KeyboardHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1193FF3829606151004EA8D7 /* KeyboardHeader.swift */; }; + C9D2C75F2A320AA000D15901 /* DWUpholdOTPViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE542230FF4600956D5F /* DWUpholdOTPViewController.m */; }; + C9D2C7602A320AA000D15901 /* DWAppGroupOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E7C23034AC100FF8653 /* DWAppGroupOptions.m */; }; + C9D2C7612A320AA000D15901 /* DWTransactionListDataItemObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EA323A799F3006A2A59 /* DWTransactionListDataItemObject.m */; }; + C9D2C7622A320AA000D15901 /* DWUpholdAPIProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE002230FF2B00956D5F /* DWUpholdAPIProvider.m */; }; + C9D2C7642A320AA000D15901 /* BasePageSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F2C67C28602D4F00C2B774 /* BasePageSheetViewController.swift */; }; + C9D2C7662A320AA000D15901 /* CrowdNodeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D0329051F9900D406C1 /* CrowdNodeRequest.swift */; }; + C9D2C7672A320AA000D15901 /* CoinbaseExchangeRateResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFAF28C896BC000427E7 /* CoinbaseExchangeRateResponse.swift */; }; + C9D2C7692A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C76A2A320AA000D15901 /* CrowdNodePortalItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117728A2297A7D24006F1553 /* CrowdNodePortalItem.swift */; }; + C9D2C76B2A320AA000D15901 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B528FE75A700028A8D /* BaseViewController.swift */; }; + C9D2C76C2A320AA000D15901 /* AccountListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CABF296EFD2900F63AC4 /* AccountListController.swift */; }; + C9D2C76D2A320AA000D15901 /* DWUpholdTransactionObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDFD2230FF2B00956D5F /* DWUpholdTransactionObject.m */; }; + C9D2C76E2A320AA000D15901 /* DWBaseSeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */; }; + C9D2C76F2A320AA000D15901 /* DWProgressAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E4C22FEBF7A00FF8653 /* DWProgressAnimator.mm */; }; + C9D2C7702A320AA000D15901 /* CrowdNodeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BA728EAE7AD0097CFA0 /* CrowdNodeModel.swift */; }; + C9D2C7712A320AA000D15901 /* UIDevice+Compatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4730586D295AB3BD004641DA /* UIDevice+Compatibility.swift */; }; + C9D2C7722A320AA000D15901 /* DWSeedWordView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431E022D7219E009BAF7F /* DWSeedWordView.m */; }; + C9D2C7732A320AA000D15901 /* DWSecurityStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7F3B1E238C651200DEA3EF /* DWSecurityStatusView.m */; }; + C9D2C7752A320AA000D15901 /* DWAnimatedShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8D0231D33EA00A96B62 /* DWAnimatedShapeLayer.m */; }; + C9D2C7782A320AA000D15901 /* DWScreenshotWarningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DAD267246AA6F10001624F /* DWScreenshotWarningViewController.m */; }; + C9D2C7792A320AA000D15901 /* ConvertCryptoOrderPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CACC297021EE00F63AC4 /* ConvertCryptoOrderPreviewController.swift */; }; + C9D2C77A2A320AA000D15901 /* TransactionDataItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4708119E2990F56F003FCA3D /* TransactionDataItem.swift */; }; + C9D2C77B2A320AA000D15901 /* DWSetPinModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44314222CF80D9009BAF7F /* DWSetPinModel.m */; }; + C9D2C77C2A320AA000D15901 /* DWVerifySeedPhraseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE8C22DCB3B600C99324 /* DWVerifySeedPhraseModel.m */; }; + C9D2C77D2A320AA000D15901 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA529DC092B001BC549 /* ReceiveViewController.swift */; }; + C9D2C77E2A320AA000D15901 /* ConfirmationTransactionQRController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 118B7A3E29865A3A00FBB6CC /* ConfirmationTransactionQRController.swift */; }; + C9D2C7812A320AA000D15901 /* Numbers+Dash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E4B7B6292F85E800CE0EB6 /* Numbers+Dash.swift */; }; + C9D2C7822A320AA000D15901 /* PaymentMethodsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C983129433C5700FAA0F0 /* PaymentMethodsController.swift */; }; + C9D2C7832A320AA000D15901 /* PointOfUseDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1228C5F0A600490F5E /* PointOfUseDetailsViewController.swift */; }; + C9D2C7842A320AA000D15901 /* PointOfUseLocationServicePopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1B28C6AA2400490F5E /* PointOfUseLocationServicePopup.swift */; }; + C9D2C7852A320AA000D15901 /* BalanceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13E7299E4EE7006903F1 /* BalanceModel.swift */; }; + C9D2C7862A320AA000D15901 /* TxReclassifyTransactionsInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F2C6812860319400C2B774 /* TxReclassifyTransactionsInfoViewController.swift */; }; + C9D2C7872A320AA000D15901 /* DWTransactionListDataProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E535B22F335C200E5168A /* DWTransactionListDataProvider.m */; }; + C9D2C7882A320AA000D15901 /* DWModalPopupTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7DA72323AF4300BA8C6A /* DWModalPopupTransition.m */; }; + C9D2C7892A320AA000D15901 /* DWAdvancedSecurityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7F3B1A238C646600DEA3EF /* DWAdvancedSecurityViewController.m */; }; + C9D2C78B2A320AA000D15901 /* OrderPreviewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAD2297022B300F63AC4 /* OrderPreviewModel.swift */; }; + C9D2C78D2A320AA000D15901 /* UIView+DWFindConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A885FD5244DFEF100B9F679 /* UIView+DWFindConstraints.m */; }; + C9D2C78E2A320AA000D15901 /* DWModalPopupPresentationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7DA42323AC1F00BA8C6A /* DWModalPopupPresentationController.m */; }; + C9D2C78F2A320AA000D15901 /* CrowdNodeBalance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11517C89294B11DD004FC7BF /* CrowdNodeBalance.swift */; }; + C9D2C7902A320AA000D15901 /* String+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471DD1B9290A962B00E030C8 /* String+DashWallet.swift */; }; + C9D2C7932A320AA000D15901 /* DWBaseModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69D623143B2F001B8C90 /* DWBaseModalViewController.m */; }; + C9D2C7942A320AA000D15901 /* DWSecurityMenuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BCF2348A34800451078 /* DWSecurityMenuModel.m */; }; + C9D2C7952A320AA000D15901 /* KeysOverviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615829F29C9200002D82 /* KeysOverviewCell.swift */; }; + C9D2C7962A320AA000D15901 /* UIViewController+DWShareReceiveInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD86D2319609400A96B62 /* UIViewController+DWShareReceiveInfo.m */; }; + C9D2C7972A320AA000D15901 /* OnlineAccountConfirmationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114D16B729828BCC009A124C /* OnlineAccountConfirmationController.swift */; }; + C9D2C7982A320AA000D15901 /* BaseResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B8B29068F110003E8AB /* BaseResponse.swift */; }; + C9D2C7992A320AA000D15901 /* DWDemoAdvancedSecurityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3417623A92978004E37A7 /* DWDemoAdvancedSecurityViewController.m */; }; + C9D2C79A2A320AA000D15901 /* TxListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474C7219298A803200475CA6 /* TxListTableViewCell.swift */; }; + C9D2C79C2A320AA000D15901 /* TxWithinTimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4F296D5A4700788E18 /* TxWithinTimePeriod.swift */; }; + C9D2C79D2A320AA000D15901 /* CoinbaseSwapeTradeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDF9F28C896BC000427E7 /* CoinbaseSwapeTradeRequest.swift */; }; + C9D2C79E2A320AA000D15901 /* UIFont+DWFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44311622CBF0B2009BAF7F /* UIFont+DWFont.m */; }; + C9D2C79F2A320AA000D15901 /* CustodialSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E94B96296D7D5B000FE68E /* CustodialSwapsViewController.swift */; }; + C9D2C7A02A320AA000D15901 /* NSAttributedString+DWHighlightText.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A392567234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.m */; }; + C9D2C7A12A320AA000D15901 /* CoinbaseInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751136E28D9B50E00223B77 /* CoinbaseInfoViewController.swift */; }; + C9D2C7A22A320AA000D15901 /* DWSelectorFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE2A2230FF4600956D5F /* DWSelectorFormCellModel.m */; }; + C9D2C7A32A320AA000D15901 /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; + C9D2C7A52A320AA000D15901 /* DWModalPresentationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69C523142AA4001B8C90 /* DWModalPresentationController.m */; }; + C9D2C7A62A320AA000D15901 /* PointOfUseInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1028C5430300490F5E /* PointOfUseInfoViewController.swift */; }; + C9D2C7A72A320AA000D15901 /* ActionButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B328FDCF7800028A8D /* ActionButtonViewController.swift */; }; + C9D2C7A82A320AA000D15901 /* PortalServiceItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCE428F4668B008CF87D /* PortalServiceItemCell.swift */; }; + C9D2C7AA2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7AB2A320AA000D15901 /* DWBaseFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BC82347E0D700451078 /* DWBaseFormTableViewCell.m */; }; + C9D2C7AC2A320AA000D15901 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAC6296FAEBB00F63AC4 /* AccountCell.swift */; }; + C9D2C7AD2A320AA000D15901 /* DWTransactionListDataProviderStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EA723A79AD2006A2A59 /* DWTransactionListDataProviderStub.m */; }; + C9D2C7B02A320AA000D15901 /* DWExploreHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */; }; + C9D2C7B12A320AA000D15901 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA028C896BC000427E7 /* CoinbaseBaseIDForCurrencyResponse.swift */; }; + C9D2C7B22A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7B32A320AA000D15901 /* SpecifyAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AC8412297822E000BD1B49 /* SpecifyAmountViewController.swift */; }; + C9D2C7B42A320AA000D15901 /* DWUpholdTransactionObject+DWView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFCB9C323BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.m */; }; + C9D2C7B52A320AA000D15901 /* DWBackupSeedPhraseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A36A88A2350A05B0014DC60 /* DWBackupSeedPhraseViewController.m */; }; + C9D2C7B62A320AA000D15901 /* CrowdNodeDepositTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114CFECF296469D9005F421B /* CrowdNodeDepositTx.swift */; }; + C9D2C7B92A320AA000D15901 /* DWIntrinsicTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFF072233E56E00956D5F /* DWIntrinsicTableView.m */; }; + C9D2C7BA2A320AA000D15901 /* DWURLActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E6523A11DFE006A2A59 /* DWURLActions.m */; }; + C9D2C7BB2A320AA000D15901 /* KeysOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9903A5329E6A5F600535A4E /* KeysOverviewViewController.swift */; }; + C9D2C7BC2A320AA000D15901 /* AccountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF469E296540E40067B6EE /* AccountRepository.swift */; }; + C9D2C7BD2A320AA000D15901 /* DWSharedUIConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E2822FB1C5D00FF8653 /* DWSharedUIConstants.m */; }; + C9D2C7BE2A320AA000D15901 /* BRAppleWatchTransactionData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0E237EE89B0097A7B5 /* BRAppleWatchTransactionData.m */; }; + C9D2C7BF2A320AA000D15901 /* TerritoriesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F3D29192F8D00C70123 /* TerritoriesListViewController.swift */; }; + C9D2C7C02A320AA000D15901 /* HomeHeaderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F4520A2A1209D100825057 /* HomeHeaderModel.swift */; }; + C9D2C7C12A320AA000D15901 /* TerritoryListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6DF2919578C003FEDF2 /* TerritoryListModel.swift */; }; + C9D2C7C22A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7C32A320AA000D15901 /* DWDPRegistrationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF01DA243F4559003718DC /* DWDPRegistrationStatus.m */; }; + C9D2C7C42A320AA000D15901 /* CurrencyExchanger_Objc.m in Sources */ = {isa = PBXBuildFile; fileRef = 472D13EC299E6579006903F1 /* CurrencyExchanger_Objc.m */; }; + C9D2C7C52A320AA000D15901 /* GiftCardInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0D28C540C100490F5E /* GiftCardInfoViewController.swift */; }; + C9D2C7C62A320AA000D15901 /* Tools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471DD1B7290A92CD00E030C8 /* Tools.swift */; }; + C9D2C7C72A320AA000D15901 /* PortalModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478A2C7028DC554200AD1420 /* PortalModel.swift */; }; + C9D2C7C92A320AA000D15901 /* BuyDashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C98252942DC2700FAA0F0 /* BuyDashViewController.swift */; }; + C9D2C7CA2A320AA000D15901 /* DWModalDismissalAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69CF23143435001B8C90 /* DWModalDismissalAnimation.m */; }; + C9D2C7CB2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C7CD2A320AA000D15901 /* UIViewController+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDEECD294A3CF2008AE06D /* UIViewController+DashWallet.swift */; }; + C9D2C7CE2A320AA000D15901 /* CrowdNodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470617D5299A671900DCC667 /* CrowdNodeCell.swift */; }; + C9D2C7CF2A320AA000D15901 /* MerchantListLocationOffCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD128C1305E00490F5E /* MerchantListLocationOffCell.swift */; }; + C9D2C7D02A320AA000D15901 /* DWExploreTestnetContentsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */; }; + C9D2C7D12A320AA000D15901 /* DWMainMenuContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BB5234792A600451078 /* DWMainMenuContentView.m */; }; + C9D2C7D32A320AA000D15901 /* CrowdNodeAPIConfirmationTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1186092429759C4B00279FCC /* CrowdNodeAPIConfirmationTx.swift */; }; + C9D2C7D42A320AA000D15901 /* UIViewController+DWEmbedding.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E8F23A31713006A2A59 /* UIViewController+DWEmbedding.m */; }; + C9D2C7D62A320AA000D15901 /* CALayer+DWShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD71222F97B65008C7BC9 /* CALayer+DWShadow.m */; }; + C9D2C7D72A320AA000D15901 /* MerchantDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BA328BFADD800490F5E /* MerchantDAO.swift */; }; + C9D2C7D82A320AA000D15901 /* ExploreDatabaseSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BA828BFAE5800490F5E /* ExploreDatabaseSyncManager.swift */; }; + C9D2C7D92A320AA000D15901 /* DWOnboardingCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB3416823A8C479004E37A7 /* DWOnboardingCollectionViewCell.m */; }; + C9D2C7DA2A320AA000D15901 /* CrowdNodeErrorResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D0F290949B900D406C1 /* CrowdNodeErrorResponse.swift */; }; + C9D2C7DB2A320AA000D15901 /* DWHomeViewController+DWShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74F0002305C40F00C475EB /* DWHomeViewController+DWShortcuts.m */; }; + C9D2C7DC2A320AA000D15901 /* DWHomeModelStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E8123A30623006A2A59 /* DWHomeModelStub.m */; }; + C9D2C7DD2A320AA000D15901 /* UISearchBar+DWAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ADC9D1B24603C4F001D7C0D /* UISearchBar+DWAdditions.m */; }; + C9D2C7DE2A320AA000D15901 /* UIViewController+DWTxFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74F0032305C59700C475EB /* UIViewController+DWTxFilter.m */; }; + C9D2C7E02A320AA000D15901 /* TransactionFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117ED4A728ED66F9006E3EE4 /* TransactionFilter.swift */; }; + C9D2C7E22A320AA000D15901 /* CrowdNodeWithdrawalReceivedTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C53296D6A2D00788E18 /* CrowdNodeWithdrawalReceivedTx.swift */; }; + C9D2C7E32A320AA000D15901 /* PointOfUseListSegmentedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0228C1F0C600490F5E /* PointOfUseListSegmentedCell.swift */; }; + C9D2C7E42A320AA000D15901 /* DWURLRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E6723A14739006A2A59 /* DWURLRequestHandler.m */; }; + C9D2C7E52A320AA000D15901 /* CoinbaseAPIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFB528C896BC000427E7 /* CoinbaseAPIEndpoint.swift */; }; + C9D2C7E62A320AA000D15901 /* ConfirmOrderCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4B6CC29485A8B00AED4C9 /* ConfirmOrderCells.swift */; }; + C9D2C7E72A320AA000D15901 /* CoinbaseUserAccountData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFAA28C896BC000427E7 /* CoinbaseUserAccountData.swift */; }; + C9D2C7E82A320AA000D15901 /* DWDPRegistrationDoneTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF01E3243F8625003718DC /* DWDPRegistrationDoneTableViewCell.m */; }; + C9D2C7E92A320AA000D15901 /* AtmDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BA428BFADD900490F5E /* AtmDAO.swift */; }; + C9D2C7EA2A320AA000D15901 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 475AE2B82974348F009A1055 /* App.swift */; }; + C9D2C7EB2A320AA000D15901 /* DWPaymentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69A2231048DA001B8C90 /* DWPaymentProcessor.m */; }; + C9D2C7ED2A320AA000D15901 /* SyncingHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F22A0C933700825057 /* SyncingHeaderView.swift */; }; + C9D2C7EE2A320AA000D15901 /* MinimumDepositBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114CFED1296489CD005F421B /* MinimumDepositBanner.swift */; }; + C9D2C7EF2A320AA000D15901 /* BalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B8E2906D7340003E8AB /* BalanceView.swift */; }; + C9D2C7F02A320AA000D15901 /* DWQRScanStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD85A9E245881740045B480 /* DWQRScanStatusView.m */; }; + C9D2C7F12A320AA000D15901 /* DWURLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A741DC52363A06000840ADF /* DWURLParser.m */; }; + C9D2C7F32A320AA000D15901 /* DWPaymentInputBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E6B23029D2B00FF8653 /* DWPaymentInputBuilder.m */; }; + C9D2C7F42A320AA000D15901 /* DWQRScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C831FEB0A6D008CAEE0 /* DWQRScanViewController.m */; }; + C9D2C7F52A320AA000D15901 /* DWSelectorFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE2C2230FF4600956D5F /* DWSelectorFormTableViewCell.m */; }; + C9D2C7F82A320AA000D15901 /* UIViewController+AlertPresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47305871295C971F004641DA /* UIViewController+AlertPresenting.swift */; }; + C9D2C7F92A320AA000D15901 /* DSWatchTransactionDataObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A06237EE89B0097A7B5 /* DSWatchTransactionDataObject.m */; }; + C9D2C7FA2A320AA000D15901 /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FA3B0129364991008D58DC /* HTTPClient.swift */; }; + C9D2C7FB2A320AA000D15901 /* DWPasteboardAddressExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E6E2302A9C200FF8653 /* DWPasteboardAddressExtractor.m */; }; + C9D2C7FC2A320AA000D15901 /* ViewModel+Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477F501429531C07003C7508 /* ViewModel+Coinbase.swift */; }; + C9D2C7FD2A320AA000D15901 /* CNCreateAccountTxDetailsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478A9296299242EC0008C43E /* CNCreateAccountTxDetailsModel.swift */; }; + C9D2C7FE2A320AA000D15901 /* CBUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A2EB293E618600938DB7 /* CBUser.swift */; }; + C9D2C7FF2A320AA000D15901 /* CBSecureTokenService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A2ED293E622700938DB7 /* CBSecureTokenService.swift */; }; + C9D2C8002A320AA000D15901 /* PayTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA029DA95F5001BC549 /* PayTableViewCell.swift */; }; + C9D2C8032A320AA000D15901 /* ServiceOverviewTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F71317628F436920072F454 /* ServiceOverviewTableCell.swift */; }; + C9D2C8052A320AA000D15901 /* IntegrationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B86290670630003E8AB /* IntegrationViewController.swift */; }; + C9D2C8062A320AA000D15901 /* NSString+DWTextSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE7F22DC92BF00C99324 /* NSString+DWTextSize.m */; }; + C9D2C8072A320AA000D15901 /* PointOfUseListFiltersCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0428C1F74A00490F5E /* PointOfUseListFiltersCell.swift */; }; + C9D2C8082A320AA000D15901 /* TransactionListDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47081198298CF57D003FCA3D /* TransactionListDataSource.swift */; }; + C9D2C80A2A320AA000D15901 /* DWMainMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BB12347927700451078 /* DWMainMenuViewController.m */; }; + C9D2C80B2A320AA000D15901 /* PointOfUseListFiltersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7C290133610003E8AB /* PointOfUseListFiltersViewController.swift */; }; + C9D2C80C2A320AA000D15901 /* AllMerchantLocationsDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1928C6A21A00490F5E /* AllMerchantLocationsDataProvider.swift */; }; + C9D2C80D2A320AA000D15901 /* MainTabbarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451E42A0B986E00825057 /* MainTabbarController.swift */; }; + C9D2C80E2A320AA000D15901 /* NumberFormatter+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D77290BFCA60080C326 /* NumberFormatter+DashWallet.swift */; }; + C9D2C8102A320AA000D15901 /* BaseAmountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AF18072907B7880025803E /* BaseAmountModel.swift */; }; + C9D2C8122A320AA000D15901 /* SeedDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C311287E78BD00B4BD48 /* SeedDB.swift */; }; + C9D2C8132A320AA000D15901 /* DWPinField.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8EF231ECDE000A96B62 /* DWPinField.m */; }; + C9D2C8142A320AA000D15901 /* DWCenteredScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CEA122DFC80900C99324 /* DWCenteredScrollView.m */; }; + C9D2C8162A320AA000D15901 /* DWPhraseRepairViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9172C325233DC50024B4C5 /* DWPhraseRepairViewController.m */; }; + C9D2C8172A320AA000D15901 /* DWBiometricAuthModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44314B22CF8801009BAF7F /* DWBiometricAuthModel.m */; }; + C9D2C8182A320AA000D15901 /* DWNumberKeyboardInputViewAudioFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8EB231ECCF000A96B62 /* DWNumberKeyboardInputViewAudioFeedback.m */; }; + C9D2C8192A320AA000D15901 /* CrowdNode+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BAC28EB3A7D0097CFA0 /* CrowdNode+Constants.swift */; }; + C9D2C81A2A320AA000D15901 /* CurrencyExchanger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F006012971B1FE0029EB10 /* CurrencyExchanger.swift */; }; + C9D2C81C2A320AA000D15901 /* DemoMainTabbarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94946E02A25F037008A678D /* DemoMainTabbarViewController.swift */; }; + C9D2C81D2A320AA000D15901 /* MessageStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AE3DD52997AA36000856EE /* MessageStatus.swift */; }; + C9D2C81E2A320AA000D15901 /* DWGlobalOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CEAA22E18F1800C99324 /* DWGlobalOptions.m */; }; + C9D2C81F2A320AA000D15901 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4430E622CBB6EC009BAF7F /* AppDelegate.m */; }; + C9D2C8202A320AA000D15901 /* SendReceivePageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C917023E29D44E0B008C034D /* SendReceivePageController.swift */; }; + C9D2C8212A320AA000D15901 /* DWSettingsMenuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BD82348CB7300451078 /* DWSettingsMenuModel.m */; }; + C9D2C8232A320AA000D15901 /* BaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478A2C6E28DC457000AD1420 /* BaseNavigationController.swift */; }; + C9D2C8242A320AA000D15901 /* UIViewController+Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDEECB294A2BAD008AE06D /* UIViewController+Coinbase.swift */; }; + C9D2C8262A320AA000D15901 /* CSVBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13E0299E1F2F006903F1 /* CSVBuilder.swift */; }; + C9D2C8272A320AA000D15901 /* DWDPRegistrationStatusTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5E4546243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m */; }; + C9D2C8282A320AA000D15901 /* CoinbaseUserAuthInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDF9D28C896BC000427E7 /* CoinbaseUserAuthInformation.swift */; }; + C9D2C8292A320AA000D15901 /* DWTransactionStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EB523A7E145006A2A59 /* DWTransactionStub.m */; }; + C9D2C82A2A320AA000D15901 /* OnlineAccountEmailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 118C05B729928F7800717E65 /* OnlineAccountEmailController.swift */; }; + C9D2C82B2A320AA000D15901 /* DWBaseActionButtonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFE82305264200C475EB /* DWBaseActionButtonViewController.m */; }; + C9D2C82C2A320AA000D15901 /* CoinbasePaymentMethodsResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA228C896BC000427E7 /* CoinbasePaymentMethodsResponse.swift */; }; + C9D2C82D2A320AA000D15901 /* UIView+DWEmbedding.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E8B23A3134E006A2A59 /* UIView+DWEmbedding.m */; }; + C9D2C82E2A320AA000D15901 /* DWLockActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6300482328EA8900827825 /* DWLockActionButton.m */; }; + C9D2C82F2A320AA000D15901 /* PointOfUseDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BA028BFADB600490F5E /* PointOfUseDAO.swift */; }; + C9D2C8302A320AA000D15901 /* ProvideAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4759D51629300212002F20DC /* ProvideAmountViewController.swift */; }; + C9D2C8312A320AA000D15901 /* DWCheckbox.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE7622DB51B500C99324 /* DWCheckbox.m */; }; + C9D2C8322A320AA000D15901 /* DWRequestAmountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8582319399100A96B62 /* DWRequestAmountViewController.m */; }; + C9D2C8332A320AA000D15901 /* DerivationPathKeysModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615229F28E3700002D82 /* DerivationPathKeysModel.swift */; }; + C9D2C8342A320AA000D15901 /* DWSeedUIConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFF42305333000C475EB /* DWSeedUIConstants.m */; }; + C9D2C8352A320AA000D15901 /* DWWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69B22312E8A0001B8C90 /* DWWindow.m */; }; + C9D2C8362A320AA000D15901 /* BalanceNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13E2299E23B7006903F1 /* BalanceNotifier.swift */; }; + C9D2C8372A320AA000D15901 /* DWSeedWordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */; }; + C9D2C8382A320AA000D15901 /* DWRootModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44313F22CF642C009BAF7F /* DWRootModel.m */; }; + C9D2C8392A320AA000D15901 /* BaseAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661AE28FDAA3300028A8D /* BaseAmountViewController.swift */; }; + C9D2C83A2A320AA000D15901 /* SendingToView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C982B2942F03500FAA0F0 /* SendingToView.swift */; }; + C9D2C83B2A320AA000D15901 /* TxUserInfoDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C317287EA23000B4BD48 /* TxUserInfoDAO.swift */; }; + C9D2C83C2A320AA000D15901 /* DWModalContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69E223155A0E001B8C90 /* DWModalContentView.m */; }; + C9D2C83D2A320AA000D15901 /* DWUpholdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDFF2230FF2B00956D5F /* DWUpholdConstants.m */; }; + C9D2C83F2A320AA000D15901 /* CoinbaseSwapeTradeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA128C896BC000427E7 /* CoinbaseSwapeTradeResponse.swift */; }; + C9D2C8402A320AA000D15901 /* DWQRScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C861FEB0AE8008CAEE0 /* DWQRScanView.m */; }; + C9D2C8412A320AA000D15901 /* ServiceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCDE28F43AB4008CF87D /* ServiceItem.swift */; }; + C9D2C8422A320AA000D15901 /* ErrorPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EE171629560DC200BA1986 /* ErrorPresentable.swift */; }; + C9D2C8432A320AA000D15901 /* DWPinInputStepView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACCD8E1231E507900A96B62 /* DWPinInputStepView.m */; }; + C9D2C8452A320AA000D15901 /* DWRecoverViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFEC2305318000C475EB /* DWRecoverViewController.m */; }; + C9D2C8462A320AA000D15901 /* DWDPAmountContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A919F9E24A65CE00018C9A3 /* DWDPAmountContactView.m */; }; + C9D2C8472A320AA000D15901 /* DWBaseTransactionListDataProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EAD23A7AC86006A2A59 /* DWBaseTransactionListDataProvider.m */; }; + C9D2C8482A320AA000D15901 /* CoinbaseTransactionsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA828C896BC000427E7 /* CoinbaseTransactionsRequest.swift */; }; + C9D2C8492A320AA000D15901 /* DWAppRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */; }; + C9D2C84A2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C84B2A320AA000D15901 /* UITableView+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F005FE297164600029EB10 /* UITableView+DashWallet.swift */; }; + C9D2C84C2A320AA000D15901 /* TransferAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B128FDC72700028A8D /* TransferAmountViewController.swift */; }; + C9D2C84D2A320AA000D15901 /* ShortcutCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8D29D404850034FD57 /* ShortcutCell.swift */; }; + C9D2C84F2A320AA000D15901 /* UIColor+DWStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44312022CCA2A0009BAF7F /* UIColor+DWStyle.m */; }; + C9D2C8502A320AA000D15901 /* DWEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEF3AF021823CD800917AB6 /* DWEnvironment.m */; }; + C9D2C8512A320AA000D15901 /* AtmItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BC928C1305E00490F5E /* AtmItemCell.swift */; }; + C9D2C8522A320AA000D15901 /* CoinbaseService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFB628C896BC000427E7 /* CoinbaseService.swift */; }; + C9D2C8532A320AA000D15901 /* DWControllerCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E5522FEDF2900FF8653 /* DWControllerCollectionView.m */; }; + C9D2C8542A320AA000D15901 /* SFSafariViewController+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDF22230FF1A00956D5F /* SFSafariViewController+DashWallet.m */; }; + C9D2C8562A320AA000D15901 /* TransactionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474C7217298A422400475CA6 /* TransactionItemView.swift */; }; + C9D2C8572A320AA000D15901 /* UIView+Reuse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474C7210298A1A9500475CA6 /* UIView+Reuse.swift */; }; + C9D2C8582A320AA000D15901 /* DWUpholdClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE022230FF2B00956D5F /* DWUpholdClient.m */; }; + C9D2C8592A320AA000D15901 /* CrowdNodePortalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1147687D294B789800FB1EEE /* CrowdNodePortalViewController.swift */; }; + C9D2C85A2A320AA000D15901 /* ConfirmOrderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4B6C929484C9800AED4C9 /* ConfirmOrderModel.swift */; }; + C9D2C85B2A320AA000D15901 /* PointOfUseListEmptyResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472CEE002924AA6D00656B48 /* PointOfUseListEmptyResultsView.swift */; }; + C9D2C85C2A320AA000D15901 /* ShortcutsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8B29D3FEC10034FD57 /* ShortcutsModel.swift */; }; + C9D2C85D2A320AA000D15901 /* DWLockPinInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6300442328D07500827825 /* DWLockPinInputView.m */; }; + C9D2C85E2A320AA000D15901 /* UIView+DWHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69AB23125074001B8C90 /* UIView+DWHUD.m */; }; + C9D2C85F2A320AA000D15901 /* DWPayOptionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E6722FFE4CC00FF8653 /* DWPayOptionModel.m */; }; + C9D2C8612A320AA000D15901 /* CoinbaseTokenResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA328C896BC000427E7 /* CoinbaseTokenResponse.swift */; }; + C9D2C8622A320AA000D15901 /* BackupInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FB129DD5141001BC549 /* BackupInfoViewController.swift */; }; + C9D2C8642A320AA000D15901 /* AppliedFiltersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E4291A68B6003FEDF2 /* AppliedFiltersView.swift */; }; + C9D2C8652A320AA000D15901 /* DWCaptureSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BAD234770C900451078 /* DWCaptureSessionManager.m */; }; + C9D2C8662A320AA000D15901 /* DWDataMigrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A11F59E2194BD6200E7B563 /* DWDataMigrationManager.m */; }; + C9D2C86A2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C86B2A320AA000D15901 /* AmountPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13E5299E3C81006903F1 /* AmountPreviewView.swift */; }; + C9D2C86C2A320AA000D15901 /* ModalNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4759D513292FEFFB002F20DC /* ModalNavigationController.swift */; }; + C9D2C86E2A320AA000D15901 /* TransferAmountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F3A2913BC0900C70123 /* TransferAmountModel.swift */; }; + C9D2C86F2A320AA000D15901 /* NavigationBarAppearanceCustomizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4730586F295AD62B004641DA /* NavigationBarAppearanceCustomizable.swift */; }; + C9D2C8702A320AA000D15901 /* AmountObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471DD1B5290A901200E030C8 /* AmountObject.swift */; }; + C9D2C8712A320AA000D15901 /* DerivationPathKeysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615029F158D700002D82 /* DerivationPathKeysViewController.swift */; }; + C9D2C8722A320AA000D15901 /* DSTransaction+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 4709C31D2880247C00B4BD48 /* DSTransaction+DashWallet.m */; }; + C9D2C8732A320AA000D15901 /* DWHomeViewController+DWJailbreakCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74F0062305C60B00C475EB /* DWHomeViewController+DWJailbreakCheck.m */; }; + C9D2C8742A320AA000D15901 /* DWLocalCurrencyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7C1C234B771400451078 /* DWLocalCurrencyModel.m */; }; + C9D2C8752A320AA000D15901 /* DWMainMenuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BC2234797FC00451078 /* DWMainMenuModel.m */; }; + C9D2C8762A320AA000D15901 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; + C9D2C8792A320AA000D15901 /* Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA829DC09CF001BC549 /* Style.swift */; }; + C9D2C87A2A320AA000D15901 /* PayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C917024029D462C6008C034D /* PayViewController.swift */; }; + C9D2C87B2A320AA000D15901 /* DatabaseConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479E7923287C00EC00D0F7D7 /* DatabaseConnection.swift */; }; + C9D2C87C2A320AA000D15901 /* DWSwitcherFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE312230FF4600956D5F /* DWSwitcherFormCellModel.m */; }; + C9D2C87D2A320AA000D15901 /* DWIntrinsicTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFF723053ECE00C475EB /* DWIntrinsicTextView.m */; }; + C9D2C87E2A320AA000D15901 /* DWExploreTestnetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */; }; + C9D2C87F2A320AA000D15901 /* AddressUserInfoDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471A2607289ACDA00056B7B2 /* AddressUserInfoDAO.swift */; }; + C9D2C8812A320AA000D15901 /* DWModalTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69D223143568001B8C90 /* DWModalTransition.m */; }; + C9D2C8832A320AA000D15901 /* MerchantsDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD628C1305E00490F5E /* MerchantsDataProvider.swift */; }; + C9D2C8842A320AA000D15901 /* FullCrowdNodeSignUpTxSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D072905409300D406C1 /* FullCrowdNodeSignUpTxSet.swift */; }; + C9D2C8852A320AA000D15901 /* DWSeedPhraseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431E822D738C0009BAF7F /* DWSeedPhraseModel.m */; }; + C9D2C8862A320AA000D15901 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C983B2945801D00FAA0F0 /* Constants.swift */; }; + C9D2C8872A320AA000D15901 /* DWBaseFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE372230FF4600956D5F /* DWBaseFormCellModel.m */; }; + C9D2C8882A320AA000D15901 /* ExploreMapAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDA28C1305E00490F5E /* ExploreMapAnnotationView.swift */; }; + C9D2C8892A320AA000D15901 /* DWHomeViewController+DWBackupReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1B7DBF232669FF00BA8C6A /* DWHomeViewController+DWBackupReminder.m */; }; + C9D2C88A2A320AA000D15901 /* DWHomeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E533722F023AB00E5168A /* DWHomeModel.m */; }; + C9D2C88C2A320AA000D15901 /* DWHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBB822E1FA1000A50237 /* DWHomeViewController.m */; }; + C9D2C88D2A320AA000D15901 /* IsAddressInUse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1186092029758B2F00279FCC /* IsAddressInUse.swift */; }; + C9D2C88F2A320AA000D15901 /* DWSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E3F22FD75C000FF8653 /* DWSegmentedControl.m */; }; + C9D2C8902A320AA000D15901 /* MerchantItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BCC28C1305E00490F5E /* MerchantItemCell.swift */; }; + C9D2C8912A320AA000D15901 /* PaymentMethodCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C98362943A60000FAA0F0 /* PaymentMethodCell.swift */; }; + C9D2C8932A320AA000D15901 /* CBUserManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EEE23A293F041E00049E0B /* CBUserManager.swift */; }; + C9D2C8942A320AA000D15901 /* DerivationPathKeysHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615A29F6535300002D82 /* DerivationPathKeysHeaderView.swift */; }; + C9D2C8952A320AA000D15901 /* ConvertCryptoOrderPreviewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CACF2970224D00F63AC4 /* ConvertCryptoOrderPreviewModel.swift */; }; + C9D2C8972A320AA000D15901 /* RatesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2E3A82972B15F0032A63B /* RatesProvider.swift */; }; + C9D2C8982A320AA000D15901 /* CBAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2A2E8293E612900938DB7 /* CBAuth.swift */; }; + C9D2C8992A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C89A2A320AA000D15901 /* CoinbaseCreateAddressesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFAE28C896BC000427E7 /* CoinbaseCreateAddressesRequest.swift */; }; + C9D2C89B2A320AA000D15901 /* DWImportWalletInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A10EB342358996700C38B61 /* DWImportWalletInfoViewController.m */; }; + C9D2C89C2A320AA000D15901 /* TxListEmptyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F452022A0CEB5800825057 /* TxListEmptyTableViewCell.swift */; }; + C9D2C89D2A320AA000D15901 /* SyncingAlertContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451ED2A0BF1F500825057 /* SyncingAlertContentView.swift */; }; + C9D2C89E2A320AA000D15901 /* AddressUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471A2604289ACD5C0056B7B2 /* AddressUserInfo.swift */; }; + C9D2C89F2A320AA000D15901 /* MerchantInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0B28C53E4A00490F5E /* MerchantInfoViewController.swift */; }; + C9D2C8A02A320AA000D15901 /* SendCoinsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */; }; + C9D2C8A12A320AA000D15901 /* ShortcutAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8929D3FCCF0034FD57 /* ShortcutAction.swift */; }; + C9D2C8A22A320AA000D15901 /* DWModalChevronView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69DF231556D6001B8C90 /* DWModalChevronView.m */; }; + C9D2C8A32A320AA000D15901 /* DWBaseLegacyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A58815821A5906C00FD4D2C /* DWBaseLegacyViewController.m */; }; + C9D2C8A52A320AA000D15901 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F452002A0CE6C900825057 /* HomeView.swift */; }; + C9D2C8A62A320AA000D15901 /* CoinbaseRatesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2E3AB2972B1A60032A63B /* CoinbaseRatesProvider.swift */; }; + C9D2C8A72A320AA000D15901 /* TaxReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472D13DE299DF5C6006903F1 /* TaxReportGenerator.swift */; }; + C9D2C8A82A320AA000D15901 /* CrowdNodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D112909513F00D406C1 /* CrowdNodeError.swift */; }; + C9D2C8A92A320AA000D15901 /* WithdrawalLimit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111C3C4D296C52F800788E18 /* WithdrawalLimit.swift */; }; + C9D2C8AA2A320AA000D15901 /* DWPayModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E6422FFE43500FF8653 /* DWPayModel.m */; }; + C9D2C8AD2A320AA000D15901 /* PointOfUseDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1728C63F9C00490F5E /* PointOfUseDetailsView.swift */; }; + C9D2C8AE2A320AA000D15901 /* DSChain+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E4F7C6297596D8006BEA68 /* DSChain+DashWallet.m */; }; + C9D2C8AF2A320AA000D15901 /* FromLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1193FF3A2961960B004EA8D7 /* FromLabel.swift */; }; + C9D2C8B02A320AA000D15901 /* DWPhraseRepairChildViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9172D225233F4F0024B4C5 /* DWPhraseRepairChildViewController.m */; }; + C9D2C8B12A320AA000D15901 /* SingleInputAddressSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B8449928F6D5480082770C /* SingleInputAddressSelector.swift */; }; + C9D2C8B22A320AA000D15901 /* CoinbaseAccountAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFAC28C896BC000427E7 /* CoinbaseAccountAddress.swift */; }; + C9D2C8B32A320AA000D15901 /* DWMainMenuTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BBC2347950700451078 /* DWMainMenuTableViewCell.m */; }; + C9D2C8B42A320AA000D15901 /* CrowdNodeTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141E4C1291BB12200ACDA9E /* CrowdNodeTransferViewController.swift */; }; + C9D2C8B62A320AA000D15901 /* CBAuthInterop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478483E729629C0700E05A5A /* CBAuthInterop.swift */; }; + C9D2C8B82A320AA000D15901 /* CoinbaseAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4789D26F29825F5400BAFEFA /* CoinbaseAmountViewController.swift */; }; + C9D2C8BA2A320AA000D15901 /* DWSegmentSliderFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1F640E238D5C0900A9B505 /* DWSegmentSliderFormCellModel.m */; }; + C9D2C8BB2A320AA000D15901 /* DWSeedPhraseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */; }; + C9D2C8BD2A320AA000D15901 /* UIStackView+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D7B29100ABA0080C326 /* UIStackView+DashWallet.swift */; }; + C9D2C8BF2A320AA000D15901 /* ExplorePointOfUse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8B9B28BFAD2800490F5E /* ExplorePointOfUse.swift */; }; + C9D2C8C12A320AA000D15901 /* DWDashPayModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A56EF0524193AEB002C32F3 /* DWDashPayModel.m */; }; + C9D2C8C22A320AA000D15901 /* TransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117ED4A028EC86E0006E3EE4 /* TransactionObserver.swift */; }; + C9D2C8C32A320AA000D15901 /* DWInfoTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4431D322D52F67009BAF7F /* DWInfoTextCell.m */; }; + C9D2C8C42A320AA000D15901 /* ColorizedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EE17182959CDC200BA1986 /* ColorizedText.swift */; }; + C9D2C8C72A320AA000D15901 /* PaymentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA229DBC183001BC549 /* PaymentsViewController.swift */; }; + C9D2C8C92A320AA000D15901 /* ServiceDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCDC28F43A68008CF87D /* ServiceDataSource.swift */; }; + C9D2C8CA2A320AA000D15901 /* ConverterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B792900196F0003E8AB /* ConverterView.swift */; }; + C9D2C8CB2A320AA000D15901 /* DWModalBaseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69C923142E11001B8C90 /* DWModalBaseAnimation.m */; }; + C9D2C8CC2A320AA000D15901 /* SpendableTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FB729DFC506001BC549 /* SpendableTransaction.swift */; }; + C9D2C8CD2A320AA000D15901 /* StakingInfoDialogController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11ED906A29681773003784F9 /* StakingInfoDialogController.swift */; }; + C9D2C8CF2A320AA000D15901 /* TwoFactorAuthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F36937D2919A5DB007F4E91 /* TwoFactorAuthViewController.swift */; }; + C9D2C8D02A320AA000D15901 /* Taxes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471A2609289ACDF70056B7B2 /* Taxes.swift */; }; + C9D2C8D12A320AA000D15901 /* DWSeedWordModel+DWLayoutSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE9622DD0E8E00C99324 /* DWSeedWordModel+DWLayoutSupport.m */; }; + C9D2C8D22A320AA000D15901 /* CoinbaseAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EEE242293F436200049E0B /* CoinbaseAPIClient.swift */; }; + C9D2C8D32A320AA000D15901 /* SendAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D7F291123D30080C326 /* SendAmountViewController.swift */; }; + C9D2C8D42A320AA000D15901 /* DWAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F420E21BEE95D00858B91 /* DWAboutViewController.m */; }; + C9D2C8D52A320AA000D15901 /* AccountService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF46A0296540EF0067B6EE /* AccountService.swift */; }; + C9D2C8D62A320AA000D15901 /* ListHandlerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E6291A90B2003FEDF2 /* ListHandlerView.swift */; }; + C9D2C8D72A320AA000D15901 /* DWSecurityMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BCC2347F01B00451078 /* DWSecurityMenuViewController.m */; }; + C9D2C8D82A320AA000D15901 /* CrowdNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD738028E7356100A34022 /* CrowdNode.swift */; }; + C9D2C8D92A320AA000D15901 /* SQLite+ExloreDash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8B9E28BFAD8200490F5E /* SQLite+ExloreDash.swift */; }; + C9D2C8DC2A320AA000D15901 /* DWAdvancedSecurityModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1F6414238FEEA900A9B505 /* DWAdvancedSecurityModel.m */; }; + C9D2C8DD2A320AA000D15901 /* AtmDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD528C1305E00490F5E /* AtmDataProvider.swift */; }; + C9D2C8DE2A320AA000D15901 /* GettingStartedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110C67942921147F006B580C /* GettingStartedViewController.swift */; }; + C9D2C8DF2A320AA000D15901 /* NetworkUnavailableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477A963D292CD27D0013605B /* NetworkUnavailableView.swift */; }; + C9D2C8E02A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; + C9D2C8E12A320AA000D15901 /* DWLockScreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A63004D2328F37C00827825 /* DWLockScreenViewController.m */; }; + C9D2C8E22A320AA000D15901 /* UpholdTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4789D2302981069700BAFEFA /* UpholdTransferViewController.swift */; }; + C9D2C8E32A320AA000D15901 /* DWVerifySeedPhraseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE8322DC9B5D00C99324 /* DWVerifySeedPhraseViewController.m */; }; + C9D2C8E42A320AA000D15901 /* DerivationPathKeysCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C909615429F297DD00002D82 /* DerivationPathKeysCell.swift */; }; + C9D2C8E52A320AA000D15901 /* Cells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474C721C298B65C100475CA6 /* Cells.swift */; }; + C9D2C8E62A320AA000D15901 /* DWContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E9723A400D3006A2A59 /* DWContainerViewController.m */; }; + C9D2C8E72A320AA000D15901 /* DashTextAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D79290D035B0080C326 /* DashTextAttachment.swift */; }; + C9D2C8E82A320AA000D15901 /* HomeBalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F067F129E4576D0022D958 /* HomeBalanceView.swift */; }; + C9D2C8E92A320AA000D15901 /* PointOfUseListFiltersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B81290271170003E8AB /* PointOfUseListFiltersModel.swift */; }; + C9D2C8EA2A320AA000D15901 /* ConvertCryptoOrderPreviewViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAD82970509600F63AC4 /* ConvertCryptoOrderPreviewViews.swift */; }; + C9D2C8EB2A320AA000D15901 /* DWAboutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F421F21BEFEEA00858B91 /* DWAboutModel.m */; }; + C9D2C8EC2A320AA000D15901 /* CNCreateAccountTxDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47083B3A298948B70010AF71 /* CNCreateAccountTxDetailsViewController.swift */; }; + C9D2C8EE2A320AA000D15901 /* WelcomeToCrowdNodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141E4C4291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift */; }; + C9D2C8EF2A320AA000D15901 /* TerritoriesListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E229196D48003FEDF2 /* TerritoriesListCell.swift */; }; + C9D2C8F02A320AA000D15901 /* DWProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E531C22EA49FE00E5168A /* DWProgressView.m */; }; + C9D2C8F12A320AA000D15901 /* TxDetailCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5146328491C60005A8E3E /* TxDetailCells.swift */; }; + C9D2C8F22A320AA000D15901 /* BaseViewController+NetworkReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477F501629543834003C7508 /* BaseViewController+NetworkReachability.swift */; }; + C9D2C8F32A320AA000D15901 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 75D5F3CD191EC270004AB296 /* main.m */; settings = {COMPILER_FLAGS = "-DASHPAY"; }; }; + C9D2C8F42A320AA000D15901 /* DWQuickReceiveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8C24B323336FEA00000D43 /* DWQuickReceiveViewController.m */; }; + C9D2C8F62A320AA000D15901 /* libDashSync.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FC75A8E28F03E22000E4858 /* libDashSync.a */; }; + C9D2C8F72A320AA000D15901 /* CoreNFC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5279BB23D994BC00F856D3 /* CoreNFC.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + C9D2C8F82A320AA000D15901 /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */; }; + C9D2C8F92A320AA000D15901 /* GameplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AD1CE9822DE63FA00C99324 /* GameplayKit.framework */; }; + C9D2C8FA2A320AA000D15901 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB4FA9C222505DD60060B017 /* AudioToolbox.framework */; }; + C9D2C8FB2A320AA000D15901 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AA08533237D6CF500797F95 /* CloudKit.framework */; }; + C9D2C8FC2A320AA000D15901 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; + C9D2C8FD2A320AA000D15901 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; + C9D2C8FE2A320AA000D15901 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F4301E42B02800C7248E /* ImageIO.framework */; }; + C9D2C8FF2A320AA000D15901 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42E1E42B01E00C7248E /* CoreGraphics.framework */; }; + C9D2C9002A320AA000D15901 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; + C9D2C9012A320AA000D15901 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ABCA9172357A61B00092C09 /* Foundation.framework */; }; + C9D2C9022A320AA000D15901 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42A1E42AF8F00C7248E /* QuartzCore.framework */; }; + C9D2C9032A320AA000D15901 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 225383001C694D7400968BEE /* CoreLocation.framework */; }; + C9D2C9042A320AA000D15901 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 22D3613C1C56F2CD0057CF76 /* libsqlite3.tbd */; }; + C9D2C9052A320AA000D15901 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222E7F571C46E9BE009AB45D /* SystemConfiguration.framework */; }; + C9D2C9062A320AA000D15901 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222E7F551C46E9B8009AB45D /* Security.framework */; }; + C9D2C9072A320AA000D15901 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222040C51C1A1940005CE1C3 /* WebKit.framework */; }; + C9D2C9082A320AA000D15901 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 22B6A4471C0E963900673913 /* libbz2.tbd */; }; + C9D2C90B2A320AA000D15901 /* DWShortcutCollectionViewCell~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DC23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib */; }; + C9D2C90C2A320AA000D15901 /* DWDPRegistrationErrorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AFF01DE243F74BE003718DC /* DWDPRegistrationErrorTableViewCell.xib */; }; + C9D2C90D2A320AA000D15901 /* ExploreDash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47838B7E290160860003E8AB /* ExploreDash.storyboard */; }; + C9D2C90E2A320AA000D15901 /* TxDetailHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C720C298A19D100475CA6 /* TxDetailHeaderCell.xib */; }; + C9D2C90F2A320AA000D15901 /* StartStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AB231D32196E27300A6E7E6 /* StartStoryboard.storyboard */; }; + C9D2C9112A320AA000D15901 /* DWShortcutCollectionViewCell~iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DD23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib */; }; + C9D2C9122A320AA000D15901 /* DWInfoTextCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4431D422D52F67009BAF7F /* DWInfoTextCell.xib */; }; + C9D2C9132A320AA000D15901 /* BiometricAuth.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A44314822CF82EF009BAF7F /* BiometricAuth.storyboard */; }; + C9D2C9142A320AA000D15901 /* TxListEmptyTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E533F22F025FE00E5168A /* TxListEmptyTableViewCell.xib */; }; + C9D2C9152A320AA000D15901 /* Payments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A8B9E3C22FD71E100FF8653 /* Payments.storyboard */; }; + C9D2C9172A320AA000D15901 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 757E09971ADB8EEB006FD352 /* Localizable.strings */; }; + C9D2C9182A320AA000D15901 /* LockScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A6300412328CCE900827825 /* LockScreen.storyboard */; }; + C9D2C91A2A320AA000D15901 /* Migrations.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4709C30E287E787700B4BD48 /* Migrations.bundle */; }; + C9D2C91B2A320AA000D15901 /* TxDetailTaxCategoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C720E298A1A3E00475CA6 /* TxDetailTaxCategoryCell.xib */; }; + C9D2C91C2A320AA000D15901 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 2ADC722723B5547000D9DD37 /* Localizable.stringsdict */; }; + C9D2C91D2A320AA000D15901 /* ShortcutsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A2CD71722F99CAE008C7BC9 /* ShortcutsView.xib */; }; + C9D2C91E2A320AA000D15901 /* HomeBalanceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F067F329E457790022D958 /* HomeBalanceView.xib */; }; + C9D2C91F2A320AA000D15901 /* DWDPRegistrationStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5E4547243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib */; }; + C9D2C9202A320AA000D15901 /* TxDetailInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C7212298A1EFC00475CA6 /* TxDetailInfoCell.xib */; }; + C9D2C9212A320AA000D15901 /* UpholdOTPStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A9FFE552230FF4600956D5F /* UpholdOTPStoryboard.storyboard */; }; + C9D2C9222A320AA000D15901 /* AppAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A4430F122CBD57A009BAF7F /* AppAssets.xcassets */; }; + C9D2C9232A320AA000D15901 /* PayTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A8B9E6022FF712000FF8653 /* PayTableViewCell.xib */; }; + C9D2C9242A320AA000D15901 /* coinflip.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 75E83CF51B5F997A0038FB70 /* coinflip.aiff */; }; + C9D2C9252A320AA000D15901 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; + C9D2C9262A320AA000D15901 /* BackupInfo.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A4431C422D4CAFA009BAF7F /* BackupInfo.storyboard */; }; + C9D2C9272A320AA000D15901 /* SyncView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E531922EA382B00E5168A /* SyncView.xib */; }; + C9D2C9282A320AA000D15901 /* TxListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A4E535322F1D0D900E5168A /* TxListTableViewCell.xib */; }; + C9D2C9292A320AA000D15901 /* BackupInfoItemView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F42FB529DD8702001BC549 /* BackupInfoItemView.xib */; }; + C9D2C92A2A320AA000D15901 /* explore.db in Resources */ = {isa = PBXBuildFile; fileRef = 47AE8BAF28BFF28400490F5E /* explore.db */; }; + C9D2C92B2A320AA000D15901 /* (null) in Resources */ = {isa = PBXBuildFile; }; + C9D2C92C2A320AA000D15901 /* Coinbase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0F3693812919A70B007F4E91 /* Coinbase.storyboard */; }; + C9D2C92E2A320AA000D15901 /* ImportWalletInfo.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10EB3D2358BDA500C38B61 /* ImportWalletInfo.storyboard */; }; + C9D2C92F2A320AA000D15901 /* ReceiveContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F42FAC29DC115A001BC549 /* ReceiveContentView.xib */; }; + C9D2C9302A320AA000D15901 /* VerifySeedPhrase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AD1CE8522DC9B7300C99324 /* VerifySeedPhrase.storyboard */; }; + C9D2C9312A320AA000D15901 /* DWSecurityStatusView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A7F3B20238C653000DEA3EF /* DWSecurityStatusView.xib */; }; + C9D2C9322A320AA000D15901 /* About.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AB7C906234DB82700A56795 /* About.storyboard */; }; + C9D2C9332A320AA000D15901 /* SetPin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A44312922CCC1D4009BAF7F /* SetPin.storyboard */; }; + C9D2C9342A320AA000D15901 /* Onboarding.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A913E7023A2667E006A2A59 /* Onboarding.storyboard */; }; + C9D2C9352A320AA000D15901 /* OperationStatus.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1193FF3D2962F1BE004EA8D7 /* OperationStatus.storyboard */; }; + C9D2C9362A320AA000D15901 /* UpholdLogoutTutorialStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A9FFE662230FF4600956D5F /* UpholdLogoutTutorialStoryboard.storyboard */; }; + C9D2C9392A320AA000D15901 /* DWDPRegistrationDoneTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AFF01E4243F8625003718DC /* DWDPRegistrationDoneTableViewCell.xib */; }; + C9D2C93A2A320AA000D15901 /* ResetWalletInfo.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A10EB402358D2A900C38B61 /* ResetWalletInfo.storyboard */; }; + C9D2C93B2A320AA000D15901 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */; }; + C9D2C93C2A320AA000D15901 /* Pay.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A8B9E5B22FF6FE500FF8653 /* Pay.storyboard */; }; + C9D2C93D2A320AA000D15901 /* QuickReceive.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A8C24B5233370A600000D43 /* QuickReceive.storyboard */; }; + C9D2C93E2A320AA000D15901 /* Tx.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47A514612848FEAD005A8E3E /* Tx.storyboard */; }; + C9D2C93F2A320AA000D15901 /* DashSyncCurrentCommit in Resources */ = {isa = PBXBuildFile; fileRef = 2A8F420821BED16300858B91 /* DashSyncCurrentCommit */; }; + C9D2C9402A320AA000D15901 /* DWMainMenuTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A7A7BBD2347950700451078 /* DWMainMenuTableViewCell.xib */; }; + C9D2C9412A320AA000D15901 /* VerifiedSuccessfully.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AD1CE9E22DFBA6C00C99324 /* VerifiedSuccessfully.storyboard */; }; + C9D2C9422A320AA000D15901 /* Setup.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A4430EA22CBBA82009BAF7F /* Setup.storyboard */; }; + C9D2C9432A320AA000D15901 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C94F5E8729D3E7E30034FD57 /* GoogleService-Info.plist */; }; + C9D2C9442A320AA000D15901 /* uphold-logout.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2A811558269CE09300215F81 /* uphold-logout.jpg */; }; + C9D2C9452A320AA000D15901 /* AmountPreviewView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2ACCD864231959CD00A96B62 /* AmountPreviewView.xib */; }; + C9D2C9462A320AA000D15901 /* TxDetailActionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C7214298A1FCF00475CA6 /* TxDetailActionCell.xib */; }; + C9D2C9472A320AA000D15901 /* CNCreateAccountCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47083B3729893F4B0010AF71 /* CNCreateAccountCell.xib */; }; + C9D2C95E2A386D7E00D15901 /* DWBasePressableControl.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D2C95D2A386D7E00D15901 /* DWBasePressableControl.m */; }; + C9D2C9622A386DA200D15901 /* DWDPWelcomeView.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D2C9602A386DA200D15901 /* DWDPWelcomeView.m */; }; + C9D2C9652A38733B00D15901 /* DPAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9D2C9642A38733B00D15901 /* DPAssets.xcassets */; }; + C9D2C9692A3875BA00D15901 /* DWCurrentUserProfileModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D2C9672A3875BA00D15901 /* DWCurrentUserProfileModel.m */; }; + C9D2C9712A38778E00D15901 /* DWDashPaySetupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D2C9702A38778E00D15901 /* DWDashPaySetupModel.m */; }; C9F067F229E4576D0022D958 /* HomeBalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F067F129E4576D0022D958 /* HomeBalanceView.swift */; }; C9F067F429E543630022D958 /* HomeBalanceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F067F329E457790022D958 /* HomeBalanceView.xib */; }; C9F42F9F29DA82E5001BC549 /* PayableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42F9E29DA82E5001BC549 /* PayableViewController.swift */; }; @@ -720,7 +1484,6 @@ C9F451F52A0CAC9400825057 /* HomeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F42A0CAC9400825057 /* HomeHeaderView.swift */; }; C9F451F72A0CAE1300825057 /* SyncView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F62A0CAE1300825057 /* SyncView.swift */; }; C9F451F92A0CB08900825057 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451F82A0CB08900825057 /* ProgressView.swift */; }; - C9F451FB2A0CC2A800825057 /* DashPayProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451FA2A0CC2A800825057 /* DashPayProfileView.swift */; }; C9F451FD2A0CC4A300825057 /* BadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451FC2A0CC4A300825057 /* BadgeView.swift */; }; C9F452012A0CE6C900825057 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F452002A0CE6C900825057 /* HomeView.swift */; }; C9F452032A0CEB5800825057 /* TxListEmptyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F452022A0CEB5800825057 /* TxListEmptyTableViewCell.swift */; }; @@ -729,7 +1492,7 @@ C9FAABB52AB793CE00878224 /* BuySellPortal.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C9FAABB42AB793CE00878224 /* BuySellPortal.storyboard */; }; C9FAABB72AB799AE00878224 /* UpholdPortalModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FAABB62AB799AE00878224 /* UpholdPortalModel.swift */; }; CC5F88E358330F8EE192D5BE /* libPods-DashWalletScreenshotsUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CDD4C961516ED20BC9F01FA /* libPods-DashWalletScreenshotsUITests.a */; }; - DE3A167A235B79D705C0A962 /* libPods-dashwallet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 982607F21196681DAC51A074 /* libPods-dashwallet.a */; }; + DE3A167A235B79D705C0A962 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; @@ -852,13 +1615,11 @@ 110C679929227948006B580C /* UINavigationController+CrowdNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+CrowdNode.swift"; sourceTree = ""; }; 110D1780298BA9AF005BEB30 /* WKWebView+CrowdNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WKWebView+CrowdNode.swift"; sourceTree = ""; }; 110D1783298E68A8005BEB30 /* OnlineAccountInfoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlineAccountInfoController.swift; sourceTree = ""; }; - 111B8BFF299BD973004A4129 /* WithdrawalConfirmationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawalConfirmationController.swift; sourceTree = ""; }; 111C3C4B296C51B500788E18 /* WithdrawalLimitsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawalLimitsController.swift; sourceTree = ""; }; 111C3C4D296C52F800788E18 /* WithdrawalLimit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawalLimit.swift; sourceTree = ""; }; 111C3C4F296D5A4700788E18 /* TxWithinTimePeriod.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxWithinTimePeriod.swift; sourceTree = ""; }; 111C3C51296D620D00788E18 /* CrowdNode+UserDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CrowdNode+UserDefaults.swift"; sourceTree = ""; }; 111C3C53296D6A2D00788E18 /* CrowdNodeWithdrawalReceivedTx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdNodeWithdrawalReceivedTx.swift; sourceTree = ""; }; - 1121A8B628E5DB6E00464C31 /* CrowdNode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CrowdNode.storyboard; sourceTree = ""; }; 1141E4C1291BB12200ACDA9E /* CrowdNodeTransferViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdNodeTransferViewController.swift; sourceTree = ""; }; 1141E4C4291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeToCrowdNodeViewController.swift; sourceTree = ""; }; 114573A32949B221009DCF27 /* VerifiedSuccessfullyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifiedSuccessfullyViewController.swift; sourceTree = ""; }; @@ -903,6 +1664,8 @@ 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendCoinsService.swift; sourceTree = ""; }; 11E47BAC28EB3A7D0097CFA0 /* CrowdNode+Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CrowdNode+Constants.swift"; sourceTree = ""; }; 11ED906A29681773003784F9 /* StakingInfoDialogController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingInfoDialogController.swift; sourceTree = ""; }; + 17427514C25A58AB4AEDF999 /* libPods-dashwallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dashwallet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1EBB53DD8E53B4B63E5A885E /* Pods-dashpay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashpay.debug.xcconfig"; path = "Pods/Target Support Files/Pods-dashpay/Pods-dashpay.debug.xcconfig"; sourceTree = ""; }; 206554BC730E9F2BB594D044 /* Pods-TodayExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TodayExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TodayExtension/Pods-TodayExtension.debug.xcconfig"; sourceTree = ""; }; 2142023B66B3AB7DC260D9A9 /* Pods-TodayExtension.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TodayExtension.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-TodayExtension/Pods-TodayExtension.testflight.xcconfig"; sourceTree = ""; }; 222040C51C1A1940005CE1C3 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; @@ -959,10 +1722,6 @@ 2A11F59E2194BD6200E7B563 /* DWDataMigrationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDataMigrationManager.m; sourceTree = ""; }; 2A12E61623AB9B8D001CAF58 /* DWDemoDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDemoDelegate.h; sourceTree = ""; }; 2A12E61A23ABC8E1001CAF58 /* DWExtendedContainerViewController+DWProtected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWExtendedContainerViewController+DWProtected.h"; sourceTree = ""; }; - 2A1AE78C23F4668B00179A6E /* DWUsernameHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameHeaderView.h; sourceTree = ""; }; - 2A1AE78D23F4668B00179A6E /* DWUsernameHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameHeaderView.m; sourceTree = ""; }; - 2A1AE79023F468CD00179A6E /* DWPlanetarySystemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPlanetarySystemView.h; sourceTree = ""; }; - 2A1AE79123F468CD00179A6E /* DWPlanetarySystemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPlanetarySystemView.m; sourceTree = ""; }; 2A1AF6DC23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "DWShortcutCollectionViewCell~ipad.xib"; sourceTree = ""; }; 2A1AF6DD23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "DWShortcutCollectionViewCell~iphone.xib"; sourceTree = ""; }; 2A1B7D902322AE2200BA8C6A /* DWTitleDetailItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWTitleDetailItem.h; sourceTree = ""; }; @@ -992,8 +1751,6 @@ 2A2CD6ED22F48159008C7BC9 /* UIDevice+DashWallet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+DashWallet.m"; sourceTree = ""; }; 2A2CD71122F97B65008C7BC9 /* CALayer+DWShadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CALayer+DWShadow.h"; sourceTree = ""; }; 2A2CD71222F97B65008C7BC9 /* CALayer+DWShadow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CALayer+DWShadow.m"; sourceTree = ""; }; - 2A2CD71422F98FEA008C7BC9 /* DWShadowView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWShadowView.h; sourceTree = ""; }; - 2A2CD71522F98FEA008C7BC9 /* DWShadowView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWShadowView.m; sourceTree = ""; }; 2A2CD71722F99CAE008C7BC9 /* ShortcutsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShortcutsView.xib; sourceTree = ""; }; 2A2CD72022F9B571008C7BC9 /* DWIntrinsicCollectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWIntrinsicCollectionView.h; sourceTree = ""; }; 2A2CD72122F9B571008C7BC9 /* DWIntrinsicCollectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWIntrinsicCollectionView.m; sourceTree = ""; }; @@ -1003,10 +1760,6 @@ 2A36A88C2350A18A0014DC60 /* DWPreviewSeedPhraseViewController+DWProtected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWPreviewSeedPhraseViewController+DWProtected.h"; sourceTree = ""; }; 2A392566234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+DWHighlightText.h"; sourceTree = ""; }; 2A392567234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+DWHighlightText.m"; sourceTree = ""; }; - 2A3CCEF7242BB1B900300AF8 /* DWRegistrationCompletedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRegistrationCompletedViewController.h; sourceTree = ""; }; - 2A3CCEF8242BB1B900300AF8 /* DWRegistrationCompletedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRegistrationCompletedViewController.m; sourceTree = ""; }; - 2A3CCEFA242BB1DD00300AF8 /* DWDPAvatarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPAvatarView.h; sourceTree = ""; }; - 2A3CCEFB242BB1DD00300AF8 /* DWDPAvatarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPAvatarView.m; sourceTree = ""; }; 2A3DC86C239717C2004B3DBA /* DWRecoverWalletCommand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRecoverWalletCommand.h; sourceTree = ""; }; 2A3DC86D239717C2004B3DBA /* DWRecoverWalletCommand.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRecoverWalletCommand.m; sourceTree = ""; }; 2A3DC86F23972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWHomeViewController+DWImportPrivateKeyDelegateImpl.h"; sourceTree = ""; }; @@ -1064,37 +1817,21 @@ 2A4E534222F02BC300E5168A /* UIView+DWReuseHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+DWReuseHelper.h"; sourceTree = ""; }; 2A4E534322F02BC300E5168A /* UIView+DWReuseHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWReuseHelper.m"; sourceTree = ""; }; 2A4E534522F02C6000E5168A /* DWUIKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUIKit.h; sourceTree = ""; }; - 2A4E534922F03A9E00E5168A /* DWFilterHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWFilterHeaderView.h; sourceTree = ""; }; - 2A4E534A22F03A9E00E5168A /* DWFilterHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWFilterHeaderView.m; sourceTree = ""; }; 2A4E534C22F03AAC00E5168A /* DWFilterHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWFilterHeaderView.xib; sourceTree = ""; }; 2A4E535322F1D0D900E5168A /* TxListTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TxListTableViewCell.xib; sourceTree = ""; }; 2A4E535A22F335C200E5168A /* DWTransactionListDataProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWTransactionListDataProvider.h; sourceTree = ""; }; 2A4E535B22F335C200E5168A /* DWTransactionListDataProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWTransactionListDataProvider.m; sourceTree = ""; }; 2A4E535D22F33BD200E5168A /* DWTransactionListDataProviderProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWTransactionListDataProviderProtocol.h; sourceTree = ""; }; 2A5279BB23D994BC00F856D3 /* CoreNFC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreNFC.framework; path = System/Library/Frameworks/CoreNFC.framework; sourceTree = SDKROOT; }; - 2A56EEF92417E30F002C32F3 /* DWConfirmUsernameContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWConfirmUsernameContentView.h; sourceTree = ""; }; - 2A56EEFA2417E30F002C32F3 /* DWConfirmUsernameContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWConfirmUsernameContentView.m; sourceTree = ""; }; - 2A56EEFE2419310C002C32F3 /* DWDashPayConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayConstants.h; sourceTree = ""; }; - 2A56EEFF2419310C002C32F3 /* DWDashPayConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPayConstants.m; sourceTree = ""; }; 2A56EF0424193AEB002C32F3 /* DWDashPayModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayModel.h; sourceTree = ""; }; 2A56EF0524193AEB002C32F3 /* DWDashPayModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPayModel.m; sourceTree = ""; }; 2A56EF0724193BA9002C32F3 /* DWDashPayProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayProtocol.h; sourceTree = ""; }; 2A58815721A5906C00FD4D2C /* DWBaseLegacyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseLegacyViewController.h; sourceTree = ""; }; 2A58815821A5906C00FD4D2C /* DWBaseLegacyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseLegacyViewController.m; sourceTree = ""; }; 2A5BB89B2350BA4F00C87CCE /* DWWipeDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWWipeDelegate.h; sourceTree = ""; }; - 2A5BD5902451D68200688A8D /* DWMinLengthUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMinLengthUsernameValidationRule.h; sourceTree = ""; }; - 2A5BD5912451D68300688A8D /* DWMinLengthUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMinLengthUsernameValidationRule.m; sourceTree = ""; }; - 2A5BD5932451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWAllowedCharactersUsernameValidationRule.h; sourceTree = ""; }; - 2A5BD5942451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWAllowedCharactersUsernameValidationRule.m; sourceTree = ""; }; - 2A5BD5962451DD0700688A8D /* DWMaxLengthUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMaxLengthUsernameValidationRule.h; sourceTree = ""; }; - 2A5BD5972451DD0700688A8D /* DWMaxLengthUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMaxLengthUsernameValidationRule.m; sourceTree = ""; }; - 2A5BD5992451F1A100688A8D /* DWUsernameValidationRule+Protected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWUsernameValidationRule+Protected.h"; sourceTree = ""; }; - 2A5BD59C2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCheckExistenceUsernameValidationRule.h; sourceTree = ""; }; - 2A5BD59D2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWCheckExistenceUsernameValidationRule.m; sourceTree = ""; }; 2A5E4545243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPRegistrationStatusTableViewCell.h; sourceTree = ""; }; 2A5E4546243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPRegistrationStatusTableViewCell.m; sourceTree = ""; }; 2A5E4547243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWDPRegistrationStatusTableViewCell.xib; sourceTree = ""; }; - 2A60C9442444BF3900AF72CF /* DWConfirmUsernameContentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWConfirmUsernameContentView.xib; sourceTree = ""; }; 2A63003D2327B4BB00827825 /* DWPaymentOutput+DWView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWPaymentOutput+DWView.h"; sourceTree = ""; }; 2A63003E2327B4BB00827825 /* DWPaymentOutput+DWView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DWPaymentOutput+DWView.m"; sourceTree = ""; }; 2A6300412328CCE900827825 /* LockScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LockScreen.storyboard; sourceTree = ""; }; @@ -1104,9 +1841,6 @@ 2A6300482328EA8900827825 /* DWLockActionButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLockActionButton.m; sourceTree = ""; }; 2A63004C2328F37C00827825 /* DWLockScreenViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLockScreenViewController.h; sourceTree = ""; }; 2A63004D2328F37C00827825 /* DWLockScreenViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLockScreenViewController.m; sourceTree = ""; }; - 2A6688FA24BCB3AC008E10F0 /* DWDPBasicItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPBasicItem.h; sourceTree = ""; }; - 2A6688FB24BCB739008E10F0 /* DWDPTxItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPTxItemView.h; sourceTree = ""; }; - 2A6688FC24BCB739008E10F0 /* DWDPTxItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPTxItemView.m; sourceTree = ""; }; 2A741DC02363993600840ADF /* DWTodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTodayViewController.h; sourceTree = ""; }; 2A741DC123639A9700840ADF /* TodayExtension.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = TodayExtension.storyboard; sourceTree = ""; }; 2A741DC42363A06000840ADF /* DWURLParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWURLParser.h; sourceTree = ""; }; @@ -1164,82 +1898,13 @@ 2A7A7C1C234B771400451078 /* DWLocalCurrencyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalCurrencyModel.m; sourceTree = ""; }; 2A7A7C1E234B79B700451078 /* DWLocalCurrencyTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalCurrencyTableViewCell.h; sourceTree = ""; }; 2A7A7C1F234B79B700451078 /* DWLocalCurrencyTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalCurrencyTableViewCell.m; sourceTree = ""; }; - 2A7AF3132480DA51001D74F9 /* DWIncomingFetchedDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWIncomingFetchedDataSource.h; sourceTree = ""; }; - 2A7AF3142480DA51001D74F9 /* DWIncomingFetchedDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWIncomingFetchedDataSource.m; sourceTree = ""; }; - 2A7AF3162480E35A001D74F9 /* DWContactsFetchedDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsFetchedDataSource.h; sourceTree = ""; }; - 2A7AF3172480E35A001D74F9 /* DWContactsFetchedDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsFetchedDataSource.m; sourceTree = ""; }; - 2A7AF31A2480E6AD001D74F9 /* DWNotificationsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNotificationsModel.h; sourceTree = ""; }; - 2A7AF31B2480E6AD001D74F9 /* DWNotificationsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsModel.m; sourceTree = ""; }; - 2A7AF32624814A17001D74F9 /* DWNotificationsData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNotificationsData.h; sourceTree = ""; }; - 2A7AF32724814A17001D74F9 /* DWNotificationsData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsData.m; sourceTree = ""; }; - 2A7AF33E2481A1B2001D74F9 /* DWDPGenericItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPGenericItemView.h; sourceTree = ""; }; - 2A7AF33F2481A1B2001D74F9 /* DWDPGenericItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericItemView.m; sourceTree = ""; }; - 2A7AF34224822AE0001D74F9 /* DWDPGenericContactRequestItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPGenericContactRequestItemView.h; sourceTree = ""; }; - 2A7AF34324822AE0001D74F9 /* DWDPGenericContactRequestItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericContactRequestItemView.m; sourceTree = ""; }; - 2A7AF34724823167001D74F9 /* DWDPGenericImageItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPGenericImageItemView.h; sourceTree = ""; }; - 2A7AF34824823167001D74F9 /* DWDPGenericImageItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericImageItemView.m; sourceTree = ""; }; - 2A7AF34A24823315001D74F9 /* DWDPGenericStatusItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPGenericStatusItemView.h; sourceTree = ""; }; - 2A7AF34B24823315001D74F9 /* DWDPGenericStatusItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericStatusItemView.m; sourceTree = ""; }; - 2A7AF34E2482374D001D74F9 /* DWDPBasicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPBasicCell.h; sourceTree = ""; }; - 2A7AF34F2482374D001D74F9 /* DWDPBasicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPBasicCell.m; sourceTree = ""; }; - 2A7AF35124823EC8001D74F9 /* DWDPIncomingRequestCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestCell.h; sourceTree = ""; }; - 2A7AF35224823EC8001D74F9 /* DWDPIncomingRequestCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPIncomingRequestCell.m; sourceTree = ""; }; - 2A7AF35424824F97001D74F9 /* DWDPImageStatusCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPImageStatusCell.h; sourceTree = ""; }; - 2A7AF35524824F97001D74F9 /* DWDPImageStatusCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPImageStatusCell.m; sourceTree = ""; }; - 2A7AF35724824FEB001D74F9 /* DWDPTextStatusCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPTextStatusCell.h; sourceTree = ""; }; - 2A7AF35824824FEB001D74F9 /* DWDPTextStatusCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPTextStatusCell.m; sourceTree = ""; }; - 2A7AF35B2482577B001D74F9 /* DWDPBasicUserItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPBasicUserItem.h; sourceTree = ""; }; - 2A7AF35C24825860001D74F9 /* DWDPIncomingRequestItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestItem.h; sourceTree = ""; }; - 2A7AF35D248258C9001D74F9 /* DWDPRespondedRequestItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPRespondedRequestItem.h; sourceTree = ""; }; - 2A7AF35E2482592F001D74F9 /* DWDPPendingRequestItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPPendingRequestItem.h; sourceTree = ""; }; - 2A7AF35F24825991001D74F9 /* DWDPEstablishedContactItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactItem.h; sourceTree = ""; }; - 2A7AF36124825A0C001D74F9 /* DWDPUserObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPUserObject.h; sourceTree = ""; }; - 2A7AF36224825A0C001D74F9 /* DWDPUserObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPUserObject.m; sourceTree = ""; }; - 2A7AF3642482666C001D74F9 /* DWDPIncomingRequestObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestObject.h; sourceTree = ""; }; - 2A7AF3652482666C001D74F9 /* DWDPIncomingRequestObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPIncomingRequestObject.m; sourceTree = ""; }; - 2A7AF36724826681001D74F9 /* DWDPRespondedIncomingRequestObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPRespondedIncomingRequestObject.h; sourceTree = ""; }; - 2A7AF36824826681001D74F9 /* DWDPRespondedIncomingRequestObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPRespondedIncomingRequestObject.m; sourceTree = ""; }; - 2A7AF36A248266FB001D74F9 /* DWDPEstablishedContactObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactObject.h; sourceTree = ""; }; - 2A7AF36B248266FB001D74F9 /* DWDPEstablishedContactObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPEstablishedContactObject.m; sourceTree = ""; }; - 2A7AF36D24826737001D74F9 /* DWDPContactObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPContactObject.h; sourceTree = ""; }; - 2A7AF36E24826737001D74F9 /* DWDPContactObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPContactObject.m; sourceTree = ""; }; - 2A7AF37024826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPAcceptedRequestNotificationObject.h; sourceTree = ""; }; - 2A7AF37124826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPAcceptedRequestNotificationObject.m; sourceTree = ""; }; - 2A7AF3732482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestNotificationObject.h; sourceTree = ""; }; - 2A7AF3742482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPNewIncomingRequestNotificationObject.m; sourceTree = ""; }; - 2A7AF376248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactNotificationObject.h; sourceTree = ""; }; - 2A7AF377248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPEstablishedContactNotificationObject.m; sourceTree = ""; }; - 2A7AF3792482756D001D74F9 /* DWDPPendingRequestObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPPendingRequestObject.h; sourceTree = ""; }; - 2A7AF37A2482756D001D74F9 /* DWDPPendingRequestObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPPendingRequestObject.m; sourceTree = ""; }; - 2A7AF37E248280CE001D74F9 /* DWDPSearchItemsFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPSearchItemsFactory.h; sourceTree = ""; }; - 2A7AF37F248280CE001D74F9 /* DWDPSearchItemsFactory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPSearchItemsFactory.m; sourceTree = ""; }; - 2A7AF3812482954C001D74F9 /* DWDPContactsItemsFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPContactsItemsFactory.h; sourceTree = ""; }; - 2A7AF3822482954C001D74F9 /* DWDPContactsItemsFactory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPContactsItemsFactory.m; sourceTree = ""; }; - 2A7AF38724829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UICollectionView+DWDPItemDequeue.h"; sourceTree = ""; }; - 2A7AF38824829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UICollectionView+DWDPItemDequeue.m"; sourceTree = ""; }; - 2A7AF38A2482A22D001D74F9 /* DWDPBlockchainIdentityBackedItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPBlockchainIdentityBackedItem.h; sourceTree = ""; }; - 2A7AF38D2482BDF1001D74F9 /* UIFont+DWDPItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIFont+DWDPItem.h"; sourceTree = ""; }; - 2A7AF38E2482BDF1001D74F9 /* UIFont+DWDPItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIFont+DWDPItem.m"; sourceTree = ""; }; - 2A7AF3912482D9BE001D74F9 /* DWDPDashpayUserBackedItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPDashpayUserBackedItem.h; sourceTree = ""; }; - 2A7AF3922482DA2B001D74F9 /* DWDPFriendRequestBackedItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPFriendRequestBackedItem.h; sourceTree = ""; }; - 2A7AF3972482E32E001D74F9 /* DWDashPayContactsActions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayContactsActions.h; sourceTree = ""; }; - 2A7AF3982482E32E001D74F9 /* DWDashPayContactsActions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPayContactsActions.m; sourceTree = ""; }; - 2A7AF39C2482FE46001D74F9 /* DWDateFormatter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDateFormatter.h; sourceTree = ""; }; - 2A7AF39D2482FE46001D74F9 /* DWDateFormatter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDateFormatter.m; sourceTree = ""; }; 2A7F3B19238C646600DEA3EF /* DWAdvancedSecurityViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWAdvancedSecurityViewController.h; sourceTree = ""; }; 2A7F3B1A238C646600DEA3EF /* DWAdvancedSecurityViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWAdvancedSecurityViewController.m; sourceTree = ""; }; 2A7F3B1D238C651200DEA3EF /* DWSecurityStatusView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSecurityStatusView.h; sourceTree = ""; }; 2A7F3B1E238C651200DEA3EF /* DWSecurityStatusView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSecurityStatusView.m; sourceTree = ""; }; 2A7F3B20238C653000DEA3EF /* DWSecurityStatusView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWSecurityStatusView.xib; sourceTree = ""; }; 2A7F3B22238C709100DEA3EF /* DWSecurityLevel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSecurityLevel.h; sourceTree = ""; }; - 2A80F39324D86201003E3B1E /* DWModalUserProfileViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWModalUserProfileViewController.h; sourceTree = ""; }; - 2A80F39424D86201003E3B1E /* DWModalUserProfileViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWModalUserProfileViewController.m; sourceTree = ""; }; - 2A80F3D724DC55CC003E3B1E /* DWUserProfileSendRequestCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileSendRequestCell.h; sourceTree = ""; }; - 2A80F3D824DC55CC003E3B1E /* DWUserProfileSendRequestCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileSendRequestCell.m; sourceTree = ""; }; 2A811558269CE09300215F81 /* uphold-logout.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "uphold-logout.jpg"; sourceTree = ""; }; - 2A827B7024B5CA1800A42042 /* DWListCollectionLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWListCollectionLayout.h; sourceTree = ""; }; - 2A827B7124B5CA1800A42042 /* DWListCollectionLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWListCollectionLayout.m; sourceTree = ""; }; - 2A827B7324B729C400A42042 /* DWBaseContactsContentViewController+DWProtected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsContentViewController+DWProtected.h"; sourceTree = ""; }; 2A858A05237EE89B0097A7B5 /* BRAppleWatchTransactionData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRAppleWatchTransactionData.h; sourceTree = ""; }; 2A858A06237EE89B0097A7B5 /* DSWatchTransactionDataObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSWatchTransactionDataObject.m; sourceTree = ""; }; 2A858A07237EE89B0097A7B5 /* DWPhoneWCSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWPhoneWCSessionManager.h; sourceTree = ""; }; @@ -1250,12 +1915,6 @@ 2A858A0C237EE89B0097A7B5 /* DWPhoneWCSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWPhoneWCSessionManager.m; sourceTree = ""; }; 2A858A0D237EE89B0097A7B5 /* DSWatchTransactionDataObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSWatchTransactionDataObject.h; sourceTree = ""; }; 2A858A0E237EE89B0097A7B5 /* BRAppleWatchTransactionData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRAppleWatchTransactionData.m; sourceTree = ""; }; - 2A885FC52449B66500B9F679 /* DWSearchStateViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSearchStateViewController.h; sourceTree = ""; }; - 2A885FC62449B66500B9F679 /* DWSearchStateViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSearchStateViewController.m; sourceTree = ""; }; - 2A885FCA2449F08700B9F679 /* DWUserSearchResultViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserSearchResultViewController.h; sourceTree = ""; }; - 2A885FCB2449F08700B9F679 /* DWUserSearchResultViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchResultViewController.m; sourceTree = ""; }; - 2A885FCE2449F37A00B9F679 /* DWUserSearchModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserSearchModel.h; sourceTree = ""; }; - 2A885FCF2449F37A00B9F679 /* DWUserSearchModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchModel.m; sourceTree = ""; }; 2A885FD4244DFEF100B9F679 /* UIView+DWFindConstraints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+DWFindConstraints.h"; sourceTree = ""; }; 2A885FD5244DFEF100B9F679 /* UIView+DWFindConstraints.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWFindConstraints.m"; sourceTree = ""; }; 2A8B9E2722FB1C5D00FF8653 /* DWSharedUIConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSharedUIConstants.h; sourceTree = ""; }; @@ -1335,26 +1994,13 @@ 2A9172C325233DC50024B4C5 /* DWPhraseRepairViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPhraseRepairViewController.m; sourceTree = ""; }; 2A9172D125233F4F0024B4C5 /* DWPhraseRepairChildViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPhraseRepairChildViewController.h; sourceTree = ""; }; 2A9172D225233F4F0024B4C5 /* DWPhraseRepairChildViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPhraseRepairChildViewController.m; sourceTree = ""; }; - 2A919F9A24A4DCAD0018C9A3 /* DWDPSmallContactView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPSmallContactView.h; sourceTree = ""; }; - 2A919F9B24A4DCAD0018C9A3 /* DWDPSmallContactView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPSmallContactView.m; sourceTree = ""; }; 2A919F9D24A65CE00018C9A3 /* DWDPAmountContactView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPAmountContactView.h; sourceTree = ""; }; 2A919F9E24A65CE00018C9A3 /* DWDPAmountContactView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPAmountContactView.m; sourceTree = ""; }; - 2A951CE223D1B92C00602824 /* DWBaseContactsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsModel.h; sourceTree = ""; }; - 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsModel.m; sourceTree = ""; }; 2A9CEBA422E1D26500A50237 /* DWSecureWalletDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSecureWalletDelegate.h; sourceTree = ""; }; 2A9CEBAB22E1DA4000A50237 /* DWAppRootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWAppRootViewController.h; sourceTree = ""; }; 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWAppRootViewController.m; sourceTree = ""; }; 2A9CEBB722E1FA1000A50237 /* DWHomeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWHomeViewController.h; sourceTree = ""; }; 2A9CEBB822E1FA1000A50237 /* DWHomeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWHomeViewController.m; sourceTree = ""; }; - 2A9D72A9249A0E7800F79CD8 /* DWDPNewIncomingRequestItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestItem.h; sourceTree = ""; }; - 2A9D72AA249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestObject.h; sourceTree = ""; }; - 2A9D72AB249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPNewIncomingRequestObject.m; sourceTree = ""; }; - 2A9E7DC523F6928C00CDA1EE /* DWTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWTextField.h; sourceTree = ""; }; - 2A9E7DC623F6928C00CDA1EE /* DWTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWTextField.m; sourceTree = ""; }; - 2A9E7DC823F6BD5200CDA1EE /* DWUsernameValidationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameValidationView.h; sourceTree = ""; }; - 2A9E7DC923F6BD5200CDA1EE /* DWUsernameValidationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameValidationView.m; sourceTree = ""; }; - 2A9E7DCC23F6C01A00CDA1EE /* DWUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameValidationRule.h; sourceTree = ""; }; - 2A9E7DCD23F6C01A00CDA1EE /* DWUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameValidationRule.m; sourceTree = ""; }; 2A9FFDEE2230FF1A00956D5F /* UIView+DWAnimations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+DWAnimations.h"; sourceTree = ""; }; 2A9FFDEF2230FF1A00956D5F /* UIView+DWAnimations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWAnimations.m"; sourceTree = ""; }; 2A9FFDF02230FF1A00956D5F /* SFSafariViewController+DashWallet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SFSafariViewController+DashWallet.h"; sourceTree = ""; }; @@ -1413,8 +2059,6 @@ 2AB231D32196E27300A6E7E6 /* StartStoryboard.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = StartStoryboard.storyboard; sourceTree = ""; }; 2AB231D52196E5CF00A6E7E6 /* DWStartModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWStartModel.h; sourceTree = ""; }; 2AB231D62196E5CF00A6E7E6 /* DWStartModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWStartModel.m; sourceTree = ""; }; - 2AB2373624488DB80081B62C /* DWUserSearchViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserSearchViewController.h; sourceTree = ""; }; - 2AB2373724488DB80081B62C /* DWUserSearchViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchViewController.m; sourceTree = ""; }; 2AB3415B23A81291004E37A7 /* DWPayModelProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPayModelProtocol.h; sourceTree = ""; }; 2AB3415C23A8133A004E37A7 /* DWPayModelStub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPayModelStub.h; sourceTree = ""; }; 2AB3415D23A8133A004E37A7 /* DWPayModelStub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPayModelStub.m; sourceTree = ""; }; @@ -1437,31 +2081,17 @@ 2AB3417923A929B6004E37A7 /* DWAdvancedSecurityModelStub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWAdvancedSecurityModelStub.m; sourceTree = ""; }; 2AB3417D23A92A2A004E37A7 /* DWBaseAdvancedSecurityModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseAdvancedSecurityModel.h; sourceTree = ""; }; 2AB3417E23A92A2A004E37A7 /* DWBaseAdvancedSecurityModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseAdvancedSecurityModel.m; sourceTree = ""; }; - 2AB7303C24D0BC0400DCB420 /* UIColor+DWDashPay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIColor+DWDashPay.h"; sourceTree = ""; }; - 2AB7303D24D0BC0400DCB420 /* UIColor+DWDashPay.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIColor+DWDashPay.m"; sourceTree = ""; }; 2AB7C906234DB82700A56795 /* About.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = About.storyboard; sourceTree = ""; }; 2AB7F7E62384676200C173AD /* DWWatchDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DWWatchDataManager.swift; sourceTree = ""; }; 2AB7F7E823846F6000C173AD /* DWMainInterfaceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DWMainInterfaceController.swift; sourceTree = ""; }; 2AB7F7EA2384752C00C173AD /* DWTxInfoDisplayableInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DWTxInfoDisplayableInterfaceController.swift; sourceTree = ""; }; 2ABCA9172357A61B00092C09 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 2AC52AD4241BB5FC00D9A829 /* DWDashPaySetupFlowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPaySetupFlowController.h; sourceTree = ""; }; - 2AC52AD5241BB5FC00D9A829 /* DWDashPaySetupFlowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPaySetupFlowController.m; sourceTree = ""; }; 2AC92C821FEB0A6D008CAEE0 /* DWQRScanViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWQRScanViewController.h; sourceTree = ""; }; 2AC92C831FEB0A6D008CAEE0 /* DWQRScanViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanViewController.m; sourceTree = ""; }; 2AC92C851FEB0AE8008CAEE0 /* DWQRScanView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWQRScanView.h; sourceTree = ""; }; 2AC92C861FEB0AE8008CAEE0 /* DWQRScanView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanView.m; sourceTree = ""; }; 2AC92C881FEB0B8B008CAEE0 /* DWQRScanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWQRScanModel.h; sourceTree = ""; }; 2AC92C891FEB0B8B008CAEE0 /* DWQRScanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanModel.m; sourceTree = ""; }; - 2ACCA3A624BE0C7D00DB32DE /* DWDPTxListCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPTxListCell.h; sourceTree = ""; }; - 2ACCA3A724BE0C7D00DB32DE /* DWDPTxListCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPTxListCell.m; sourceTree = ""; }; - 2ACCA3A924BE0D3600DB32DE /* DWDPTxItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPTxItem.h; sourceTree = ""; }; - 2ACCA3AB24BE117300DB32DE /* DWProfileTxsFetchedDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWProfileTxsFetchedDataSource.h; sourceTree = ""; }; - 2ACCA3AC24BE117300DB32DE /* DWProfileTxsFetchedDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWProfileTxsFetchedDataSource.m; sourceTree = ""; }; - 2ACCA3AE24BE3BF900DB32DE /* DWUserProfileDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileDataSource.h; sourceTree = ""; }; - 2ACCA3B024BE3CDC00DB32DE /* DWUserProfileDataSourceObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileDataSourceObject.h; sourceTree = ""; }; - 2ACCA3B124BE3CDC00DB32DE /* DWUserProfileDataSourceObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileDataSourceObject.m; sourceTree = ""; }; - 2ACCA3B324BF280A00DB32DE /* DWDPTxObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPTxObject.h; sourceTree = ""; }; - 2ACCA3B424BF280A00DB32DE /* DWDPTxObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPTxObject.m; sourceTree = ""; }; 2ACCD84B23180E7E00A96B62 /* DWPaymentOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPaymentOutput.h; sourceTree = ""; }; 2ACCD84C23180E7E00A96B62 /* DWPaymentOutput.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPaymentOutput.m; sourceTree = ""; }; 2ACCD84E23181CA800A96B62 /* DWPaymentOutput+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWPaymentOutput+Private.h"; sourceTree = ""; }; @@ -1523,66 +2153,17 @@ 2AD1CEAA22E18F1800C99324 /* DWGlobalOptions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWGlobalOptions.m; sourceTree = ""; }; 2AD46230232A286000C71557 /* DWLockScreenModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLockScreenModel.h; sourceTree = ""; }; 2AD46231232A286000C71557 /* DWLockScreenModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLockScreenModel.m; sourceTree = ""; }; - 2AD6E54B2487CE0100B52F14 /* DWContactsDataSourceObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsDataSourceObject.h; sourceTree = ""; }; - 2AD6E54C2487CE0100B52F14 /* DWContactsDataSourceObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsDataSourceObject.m; sourceTree = ""; }; - 2AD6E54E2487D45F00B52F14 /* DWBaseContactsModel+DWProtected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsModel+DWProtected.h"; sourceTree = ""; }; - 2AD6E5512487D50200B52F14 /* DWContactsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsModel.h; sourceTree = ""; }; - 2AD6E5522487D50200B52F14 /* DWContactsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsModel.m; sourceTree = ""; }; - 2AD6E5552487D8C000B52F14 /* DWContactsContentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsContentViewController.h; sourceTree = ""; }; - 2AD6E5562487D8C000B52F14 /* DWContactsContentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsContentViewController.m; sourceTree = ""; }; - 2AD6E5582487D9AF00B52F14 /* DWContactsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsViewController.h; sourceTree = ""; }; - 2AD6E5592487D9AF00B52F14 /* DWContactsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsViewController.m; sourceTree = ""; }; - 2AD6E55B2487DACC00B52F14 /* DWBaseContactsViewController+DWProtected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsViewController+DWProtected.h"; sourceTree = ""; }; - 2AD6E55E2487E13F00B52F14 /* DWRequestsContentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRequestsContentViewController.h; sourceTree = ""; }; - 2AD6E55F2487E13F00B52F14 /* DWRequestsContentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRequestsContentViewController.m; sourceTree = ""; }; - 2AD6E5612487E16400B52F14 /* DWRequestsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRequestsViewController.h; sourceTree = ""; }; - 2AD6E5622487E16400B52F14 /* DWRequestsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRequestsViewController.m; sourceTree = ""; }; - 2AD6E5682487E1DB00B52F14 /* DWRequestsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRequestsModel.h; sourceTree = ""; }; - 2AD6E5692487E1DB00B52F14 /* DWRequestsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRequestsModel.m; sourceTree = ""; }; 2AD85A9C245874B30045B480 /* DWCaptureSessionFrameDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCaptureSessionFrameDelegate.h; sourceTree = ""; }; 2AD85A9D245881740045B480 /* DWQRScanStatusView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWQRScanStatusView.h; sourceTree = ""; }; 2AD85A9E245881740045B480 /* DWQRScanStatusView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanStatusView.m; sourceTree = ""; }; - 2ADB396724223D9B00A6F898 /* DWDashPayAnimationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayAnimationView.h; sourceTree = ""; }; - 2ADB396824223D9B00A6F898 /* DWDashPayAnimationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPayAnimationView.m; sourceTree = ""; }; 2ADB396A242615C200A6F898 /* CALayer+MBAnimationPersistence.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CALayer+MBAnimationPersistence.h"; sourceTree = ""; }; 2ADB396B242615C200A6F898 /* CALayer+MBAnimationPersistence.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CALayer+MBAnimationPersistence.m"; sourceTree = ""; }; 2ADC722823B5547000D9DD37 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; 2ADC9D1A24603C4F001D7C0D /* UISearchBar+DWAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UISearchBar+DWAdditions.h"; sourceTree = ""; }; 2ADC9D1B24603C4F001D7C0D /* UISearchBar+DWAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UISearchBar+DWAdditions.m"; sourceTree = ""; }; - 2ADC9D6B2462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWStretchyHeaderListCollectionLayout.h; sourceTree = ""; }; - 2ADC9D6C2462D4AD001D7C0D /* DWUserProfileHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileHeaderView.h; sourceTree = ""; }; - 2ADC9D6D2462D4AD001D7C0D /* DWUserProfileNavigationTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileNavigationTitleView.h; sourceTree = ""; }; - 2ADC9D6E2462D4AD001D7C0D /* DWUserProfileHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileHeaderView.m; sourceTree = ""; }; - 2ADC9D6F2462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWStretchyHeaderListCollectionLayout.m; sourceTree = ""; }; - 2ADC9D702462D4AD001D7C0D /* DWUserProfileNavigationTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileNavigationTitleView.m; sourceTree = ""; }; - 2ADC9D7424640A2B001D7C0D /* DWUserProfileModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileModel.h; sourceTree = ""; }; - 2ADC9D7524640A2B001D7C0D /* DWUserProfileModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileModel.m; sourceTree = ""; }; - 2ADC9D7A24644E46001D7C0D /* DWUserProfileContactActionsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileContactActionsCell.h; sourceTree = ""; }; - 2ADC9D7B24644E46001D7C0D /* DWUserProfileContactActionsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileContactActionsCell.m; sourceTree = ""; }; 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SharedAssets.xcassets; sourceTree = ""; }; - 2AE2F0F7245C16C8001DD722 /* DWUserProfileViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUserProfileViewController.h; sourceTree = ""; }; - 2AE2F0F8245C16C8001DD722 /* DWUserProfileViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileViewController.m; sourceTree = ""; }; 2AE47369241BC5E300804DD4 /* UIViewController+DWDisplayError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIViewController+DWDisplayError.h"; sourceTree = ""; }; 2AE4736A241BC5E300804DD4 /* UIViewController+DWDisplayError.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+DWDisplayError.m"; sourceTree = ""; }; - 2AE56473249B675500CC2E80 /* DWDPNotificationItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPNotificationItem.h; sourceTree = ""; }; - 2AE8B63F23CDB98A0016F221 /* DWCreateUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCreateUsernameViewController.h; sourceTree = ""; }; - 2AE8B64023CDB98A0016F221 /* DWCreateUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWCreateUsernameViewController.m; sourceTree = ""; }; - 2AE8B64223CDC0F40016F221 /* DWInputUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWInputUsernameViewController.h; sourceTree = ""; }; - 2AE8B64323CDC0F50016F221 /* DWInputUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWInputUsernameViewController.m; sourceTree = ""; }; - 2AE8B66223CF09000016F221 /* DWConfirmUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWConfirmUsernameViewController.h; sourceTree = ""; }; - 2AE8B66323CF09000016F221 /* DWConfirmUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWConfirmUsernameViewController.m; sourceTree = ""; }; - 2AE8B66923CF0F390016F221 /* DWUsernamePendingViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernamePendingViewController.h; sourceTree = ""; }; - 2AE8B66A23CF0F390016F221 /* DWUsernamePendingViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernamePendingViewController.m; sourceTree = ""; }; - 2AE9549B23D0C4F4003612B3 /* DWBaseContactsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsViewController.h; sourceTree = ""; }; - 2AE9549C23D0C4F4003612B3 /* DWBaseContactsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsViewController.m; sourceTree = ""; }; - 2AEC5CB32493D87D00F4A689 /* DWNotificationsProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNotificationsProvider.h; sourceTree = ""; }; - 2AEC5CB42493D87D00F4A689 /* DWNotificationsProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsProvider.m; sourceTree = ""; }; - 2AEC5CB92494045C00F4A689 /* DWNotificationsFetchedDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNotificationsFetchedDataSource.h; sourceTree = ""; }; - 2AEC5CBA2494045C00F4A689 /* DWNotificationsFetchedDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsFetchedDataSource.m; sourceTree = ""; }; - 2AEC5CBC24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDPOutgoingRequestNotificationObject.h; sourceTree = ""; }; - 2AEC5CBD24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDPOutgoingRequestNotificationObject.m; sourceTree = ""; }; - 2AEC5CC0249755BB00F4A689 /* DWDashPayContactsUpdater.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayContactsUpdater.h; sourceTree = ""; }; - 2AEC5CC1249755BB00F4A689 /* DWDashPayContactsUpdater.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPayContactsUpdater.m; sourceTree = ""; }; 2AF26F39230C0E4C007F9228 /* DWBaseSeedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseSeedViewController.h; sourceTree = ""; }; 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseSeedViewController.m; sourceTree = ""; }; 2AFCB9C223BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWUpholdTransactionObject+DWView.h"; sourceTree = ""; }; @@ -1597,6 +2178,7 @@ 2AFF01E4243F8625003718DC /* DWDPRegistrationDoneTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWDPRegistrationDoneTableViewCell.xib; sourceTree = ""; }; 3410FBA3C9ECBF291385B203 /* Pods-dashwallet no watch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet no watch.release.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet no watch/Pods-dashwallet no watch.release.xcconfig"; sourceTree = ""; }; 362213F26B43E7CB81B2FCE2 /* Pods-dashwallet.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet/Pods-dashwallet.testnet.xcconfig"; sourceTree = ""; }; + 3BF640216ECD5FBFC17B85D3 /* Pods-dashpay.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashpay.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-dashpay/Pods-dashpay.testflight.xcconfig"; sourceTree = ""; }; 470617D5299A671900DCC667 /* CrowdNodeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdNodeCell.swift; sourceTree = ""; }; 47081196298CF20B003FCA3D /* Transaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Transaction.swift; sourceTree = ""; }; 47081198298CF57D003FCA3D /* TransactionListDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TransactionListDataSource.swift; path = DashWallet/Sources/UI/Home/Models/TransactionListDataSource.swift; sourceTree = SOURCE_ROOT; }; @@ -1808,6 +2390,7 @@ 556B5EBEBAEA571D74FF69A3 /* Pods-WatchApp Extension.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp Extension.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp Extension/Pods-WatchApp Extension.testflight.xcconfig"; sourceTree = ""; }; 5FD4C91FB8EAB529E8E41227 /* Pods-dashwallet no watch.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet no watch.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet no watch/Pods-dashwallet no watch.testnet.xcconfig"; sourceTree = ""; }; 6FBBFC90577C940D8C04E0B1 /* Pods-DashWalletScreenshotsUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.debug.xcconfig"; sourceTree = ""; }; + 7502A4862AE401EF00ACDDD3 /* UsernameVotingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameVotingViewController.swift; sourceTree = ""; }; 7509C10E1AF3076100D03FD5 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7509C1121AF3720100D03FD5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 750C6CC01B5C8EB60038AAE9 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; @@ -1817,20 +2400,59 @@ 7511E8E31AE5FFCC0025F1B3 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; lineEnding = 0; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; }; 7511E8EB1AE600220025F1B3 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 7513DA8B2AB9643F005D55F6 /* BaseIntegrationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationModel.swift; sourceTree = ""; }; + 7514E4E72AF233CF00A0466F /* VotingFiltersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingFiltersViewController.swift; sourceTree = ""; }; + 7514E4E92AF2351F00A0466F /* VotingFiltersModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingFiltersModel.swift; sourceTree = ""; }; + 7514E4EB2AF27E5900A0466F /* VotingHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingHeaderView.swift; sourceTree = ""; }; + 751A572F2B132FED00EF4925 /* RequestDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestDetailsViewController.swift; sourceTree = ""; }; + 751B61C72AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinLevelsViewController.swift; sourceTree = ""; }; 7527720C2AA9B2630066557E /* SupportedTopperAssets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportedTopperAssets.swift; sourceTree = ""; }; 7527720E2AA9F58E0066557E /* TopperViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopperViewModel.swift; sourceTree = ""; }; 752772112AAA1CE30066557E /* Coinbase-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Coinbase-Info.plist"; sourceTree = ""; }; + 75303FE42AE7B70500870D8B /* CrowdNode.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = CrowdNode.storyboard; sourceTree = ""; }; + 753FDBE92AEA422F0005EEC3 /* VotingPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingPrefs.swift; sourceTree = ""; }; + 753FDBEB2AECF4CC0005EEC3 /* VotingHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VotingHeaderView.xib; sourceTree = ""; }; + 753FDBED2AECF52B0005EEC3 /* UsernameVoting.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = UsernameVoting.storyboard; sourceTree = ""; }; + 754495DC2AE91B6300492817 /* GroupedRequestCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupedRequestCell.swift; sourceTree = ""; }; + 754495DE2AE91D3500492817 /* UsernameRequestCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequestCell.swift; sourceTree = ""; }; + 755A22BC2B1385FD001F170D /* IconAttributedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconAttributedText.swift; sourceTree = ""; }; + 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DWDateFormatter.swift; sourceTree = ""; }; + 755E6DFC2A99E7A000A42870 /* DWInvitationSetupState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationSetupState.m; sourceTree = ""; }; + 755E6DFD2A99E7A000A42870 /* DWInvitationSetupState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationSetupState.h; sourceTree = ""; }; + 7565D5942B08B35F0092C9BA /* RequestUsernameViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestUsernameViewModel.swift; sourceTree = ""; }; 756A8F131CE566F6007893E2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Interface.strings; sourceTree = ""; }; + 757118DB2B0F189D000AE391 /* VerifyIdenityViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifyIdenityViewController.swift; sourceTree = ""; }; + 7573C2DE2B00C05900F4C347 /* CastVoteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CastVoteViewController.swift; sourceTree = ""; }; + 7573C2E02B01103900F4C347 /* VotingFilterItemSelectableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingFilterItemSelectableCell.swift; sourceTree = ""; }; + 7573C2E22B01105F00F4C347 /* MasternodeIPCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasternodeIPCell.swift; sourceTree = ""; }; + 7573C2E42B01120B00F4C347 /* MasternodeKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasternodeKey.swift; sourceTree = ""; }; + 757514DF2B15D8DE0026AD8E /* VotingConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingConstants.swift; sourceTree = ""; }; + 757514E12B15DB510026AD8E /* ShadowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShadowView.swift; sourceTree = ""; }; + 757514E42B1735370026AD8E /* DPWelcomeMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DPWelcomeMenuView.swift; sourceTree = ""; }; 757E09981ADB8EEB006FD352 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 75889B752AD296E700C17F5D /* CoinJoinInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinInfoViewController.swift; sourceTree = ""; }; + 75889B802AD2D7F800C17F5D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/CoinJoin.storyboard; sourceTree = ""; }; 759816E519357D6F005060EA /* BRBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRBubbleView.h; sourceTree = ""; }; 759816E619357D6F005060EA /* BRBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRBubbleView.m; sourceTree = ""; }; + 75A664D72B09F1EA007EFD16 /* VotingInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingInfoViewController.swift; sourceTree = ""; }; + 75A8C1632AE5725C0042256E /* UsernameRequestsDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequestsDAO.swift; sourceTree = ""; }; + 75A8C1662AE5734A0042256E /* UsernameRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequest.swift; sourceTree = ""; }; + 75A8C1682AE6A1AC0042256E /* VotingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewModel.swift; sourceTree = ""; }; + 75B2F45C2B0B1EC1004C071A /* RequestUsernameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestUsernameViewController.swift; sourceTree = ""; }; + 75C1F0442AE26AC0006929CA /* CoinJoinViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinViewModel.swift; sourceTree = ""; }; + 75C1F09D2AFF675400FE675E /* EnterVotingKeyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterVotingKeyViewController.swift; sourceTree = ""; }; + 75C83B512B11B62400C33660 /* ConfirmRequestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmRequestViewController.swift; sourceTree = ""; }; 75CE194E1B9642EB000778E4 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; 75CE50B51B5216F100DBC18C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = DashWalletTests/Info.plist; sourceTree = SOURCE_ROOT; }; + 75CED09D2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinbaseDepositRequest.swift; sourceTree = ""; }; + 75CED09F2ACFED200095F10C /* CoinbaseDepositResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinbaseDepositResponse.swift; sourceTree = ""; }; 75D5F3BE191EC270004AB296 /* dashwallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dashwallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 75D5F3C9191EC270004AB296 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 75D5F3CD191EC270004AB296 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 75D5F3CF191EC270004AB296 /* DashWallet-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DashWallet-Prefix.pch"; sourceTree = ""; }; 75D5F3E5191EC270004AB296 /* DashWalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DashWalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = UsernameRequests.storyboard; sourceTree = ""; }; + 75D6561B2B07935000D1A902 /* WelcomeToDashpayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeToDashpayViewController.swift; sourceTree = ""; }; + 75D66D322B05E7AE00A8DDA6 /* QuickVoteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickVoteViewController.swift; sourceTree = ""; }; 75DE02411B0EB79A0027FF08 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 75DE02491B0EB7C80027FF08 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; 75DE024D1B0EB7FC0027FF08 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; @@ -1838,15 +2460,16 @@ 75E2F3C72AA4CF1900C3B458 /* Topper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Topper-Info.plist"; sourceTree = ""; }; 75E2F3C92AA4D1B900C3B458 /* Topper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Topper.swift; sourceTree = ""; }; 75E83CF51B5F997A0038FB70 /* coinflip.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; path = coinflip.aiff; sourceTree = ""; }; + 75EAFBB02B04C057005ABC6A /* CustomHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHUDView.swift; sourceTree = ""; }; 75EDC78DE1686E55AE12233C /* Pods-DashWalletScreenshotsUITests.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.testnet.xcconfig"; sourceTree = ""; }; 75F2E0B61BE2D5F000EAE861 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntegrationViewController+Uphold.swift"; sourceTree = ""; }; 75F51AAE2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntegrationViewController+Coinbase.swift"; sourceTree = ""; }; + 75F990812AFD1065006759AB /* UsernameRequestDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequestDetailsViewController.swift; sourceTree = ""; }; 7EEDF75116E60BB9EE9C80FB /* Pods-WatchApp.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp/Pods-WatchApp.testnet.xcconfig"; sourceTree = ""; }; 87872BF3D40B38CD0FC246AB /* Pods-DashWalletTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletTests/Pods-DashWalletTests.debug.xcconfig"; sourceTree = ""; }; 8A9877BEC5093CED81768D3D /* Pods-TodayExtension.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TodayExtension.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-TodayExtension/Pods-TodayExtension.testnet.xcconfig"; sourceTree = ""; }; 934DC791C539EABD2EE14E81 /* Pods-dashwallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet.release.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet/Pods-dashwallet.release.xcconfig"; sourceTree = ""; }; - 982607F21196681DAC51A074 /* libPods-dashwallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dashwallet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A169BE797EC811F83373CCB9 /* Pods_dashwallet_no_watch.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_dashwallet_no_watch.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A9529BDC33490B8F700E733D /* Pods-DashWalletScreenshotsUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.release.xcconfig"; sourceTree = ""; }; AA118F99071BC98E7056E3F4 /* Pods-dashwallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet.debug.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet/Pods-dashwallet.debug.xcconfig"; sourceTree = ""; }; @@ -1878,30 +2501,12 @@ BAE12BEA1B2DEE7F00895CC5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BAE12C051B2DEEF700895CC5 /* DWTodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTodayViewController.m; sourceTree = ""; }; BEAE29AA65F429DD9EF1A1A7 /* libPods-DashWalletTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashWalletTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C3CA202A247E4AF300158074 /* DWNotificationsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNotificationsViewController.h; sourceTree = ""; }; - C3CA202B247E4AF300158074 /* DWNotificationsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsViewController.m; sourceTree = ""; }; - C3CA202E247E54C400158074 /* DWNoNotificationsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNoNotificationsCell.h; sourceTree = ""; }; - C3CA202F247E54C400158074 /* DWNoNotificationsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNoNotificationsCell.m; sourceTree = ""; }; C3DAD266246AA6F10001624F /* DWScreenshotWarningViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWScreenshotWarningViewController.h; sourceTree = ""; }; C3DAD267246AA6F10001624F /* DWScreenshotWarningViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWScreenshotWarningViewController.m; sourceTree = ""; }; - C3DAD26D246D46BF0001624F /* DWFetchedResultsDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWFetchedResultsDataSource.h; sourceTree = ""; }; - C3DAD26E246D46BF0001624F /* DWFetchedResultsDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWFetchedResultsDataSource.m; sourceTree = ""; }; - C3DAD2BB247327D90001624F /* DWContactsDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsDataSource.h; sourceTree = ""; }; - C3DAD2BE24747F580001624F /* DWSearchViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSearchViewController.h; sourceTree = ""; }; - C3DAD2BF24747F580001624F /* DWSearchViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSearchViewController.m; sourceTree = ""; }; - C3DAD2C1247512BA0001624F /* DWBaseContactsContentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsContentViewController.h; sourceTree = ""; }; - C3DAD2C2247512BA0001624F /* DWBaseContactsContentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsContentViewController.m; sourceTree = ""; }; - C3DAD2C4247534820001624F /* DWContactsSortModeProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsSortModeProtocol.h; sourceTree = ""; }; - C3DAD2C5247538A90001624F /* DWTitleActionHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTitleActionHeaderView.m; sourceTree = ""; }; - C3DAD2C6247538A90001624F /* DWTitleActionHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTitleActionHeaderView.h; sourceTree = ""; }; - C3DAD2C7247538AA0001624F /* DWTitleActionHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWTitleActionHeaderView.xib; sourceTree = ""; }; - C3DAD2CA24757A210001624F /* DWContactsSearchDataSourceObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsSearchDataSourceObject.h; sourceTree = ""; }; - C3DAD2CB24757A210001624F /* DWContactsSearchDataSourceObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsSearchDataSourceObject.m; sourceTree = ""; }; C3DAD2CD247585C10001624F /* NSPredicate+DWFullTextSearch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+DWFullTextSearch.h"; sourceTree = ""; }; C3DAD2CE247585C10001624F /* NSPredicate+DWFullTextSearch.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSPredicate+DWFullTextSearch.m"; sourceTree = ""; }; - C3DAD2D32476886D0001624F /* DWContactsSearchInfoHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWContactsSearchInfoHeaderView.h; sourceTree = ""; }; - C3DAD2D42476886D0001624F /* DWContactsSearchInfoHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWContactsSearchInfoHeaderView.m; sourceTree = ""; }; C47D5A9D319D41B450A9B96B /* libPods-WatchApp Extension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WatchApp Extension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + C4C041DE4CD73FF445090FA3 /* Pods-dashpay.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashpay.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-dashpay/Pods-dashpay.testnet.xcconfig"; sourceTree = ""; }; C909614C29EFF7D600002D82 /* WalletKeysOverviewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletKeysOverviewModel.swift; sourceTree = ""; }; C909615029F158D700002D82 /* DerivationPathKeysViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DerivationPathKeysViewController.swift; sourceTree = ""; }; C909615229F28E3700002D82 /* DerivationPathKeysModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DerivationPathKeysModel.swift; sourceTree = ""; }; @@ -1912,6 +2517,396 @@ C917024029D462C6008C034D /* PayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayViewController.swift; sourceTree = ""; }; C91E919629FBACE6003E7883 /* ExtendedPublicKeysModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtendedPublicKeysModel.swift; sourceTree = ""; }; C91E91AD29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtendedPublicKeysViewController.swift; sourceTree = ""; }; + C943B2BA2A408CEC00AF23C5 /* DWUpdatingUserProfileView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdatingUserProfileView.h; sourceTree = ""; }; + C943B2BB2A408CEC00AF23C5 /* DWCurrentUserProfileView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWCurrentUserProfileView.h; sourceTree = ""; }; + C943B2BC2A408CEC00AF23C5 /* DWErrorUpdatingUserProfileView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWErrorUpdatingUserProfileView.m; sourceTree = ""; }; + C943B2BE2A408CEC00AF23C5 /* DWUserProfileContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileContainerView.h; sourceTree = ""; }; + C943B2C02A408CEC00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DSBlockchainIdentity+DWDisplayTitleSubtitle.h"; sourceTree = ""; }; + C943B2C12A408CEC00AF23C5 /* DWDPUpdateProfileModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPUpdateProfileModel.h; sourceTree = ""; }; + C943B2C22A408CEC00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DSBlockchainIdentity+DWDisplayTitleSubtitle.m"; sourceTree = ""; }; + C943B2C32A408CEC00AF23C5 /* DWDPUpdateProfileModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPUpdateProfileModel.m; sourceTree = ""; }; + C943B2C42A408CEC00AF23C5 /* DWErrorUpdatingUserProfileView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWErrorUpdatingUserProfileView.h; sourceTree = ""; }; + C943B2C52A408CEC00AF23C5 /* DWCurrentUserProfileView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWCurrentUserProfileView.m; sourceTree = ""; }; + C943B2C62A408CEC00AF23C5 /* DWUpdatingUserProfileView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdatingUserProfileView.m; sourceTree = ""; }; + C943B2C82A408CEC00AF23C5 /* DWUserProfileContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileContainerView.m; sourceTree = ""; }; + C943B2CA2A408CEC00AF23C5 /* DWUserProfileModalQRContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileModalQRContentView.h; sourceTree = ""; }; + C943B2CB2A408CEC00AF23C5 /* DWDWUserProfileModalQRContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDWUserProfileModalQRContentView.h; sourceTree = ""; }; + C943B2CC2A408CEC00AF23C5 /* DWUserProfileModalQRViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileModalQRViewController.h; sourceTree = ""; }; + C943B2CD2A408CEC00AF23C5 /* DWUserProfileModalQRContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileModalQRContentView.m; sourceTree = ""; }; + C943B2CE2A408CEC00AF23C5 /* DWUserProfileModalQRViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileModalQRViewController.m; sourceTree = ""; }; + C943B2D02A408CEC00AF23C5 /* DWCropAvatarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWCropAvatarViewController.h; sourceTree = ""; }; + C943B2D12A408CEC00AF23C5 /* DWEditProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWEditProfileViewController.h; sourceTree = ""; }; + C943B2D22A408CEC00AF23C5 /* DWRootEditProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRootEditProfileViewController.h; sourceTree = ""; }; + C943B2D42A408CEC00AF23C5 /* DWImgurInfoChildView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWImgurInfoChildView.m; sourceTree = ""; }; + C943B2D52A408CEC00AF23C5 /* DWImgurInfoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWImgurInfoViewController.h; sourceTree = ""; }; + C943B2D62A408CEC00AF23C5 /* DWImgurItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWImgurItemView.m; sourceTree = ""; }; + C943B2D72A408CEC00AF23C5 /* DWImgurInfoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWImgurInfoViewController.m; sourceTree = ""; }; + C943B2D82A408CEC00AF23C5 /* DWImgurInfoChildView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWImgurInfoChildView.h; sourceTree = ""; }; + C943B2D92A408CEC00AF23C5 /* DWImgurItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWImgurItemView.h; sourceTree = ""; }; + C943B2DB2A408CEC00AF23C5 /* DWFaceDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWFaceDetector.h; sourceTree = ""; }; + C943B2DC2A408CEC00AF23C5 /* DWFaceDetector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWFaceDetector.m; sourceTree = ""; }; + C943B2DD2A408CEC00AF23C5 /* DWRootEditProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRootEditProfileViewController.m; sourceTree = ""; }; + C943B2DE2A408CEC00AF23C5 /* DWEditProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWEditProfileViewController.m; sourceTree = ""; }; + C943B2DF2A408CEC00AF23C5 /* DWCropAvatarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWCropAvatarViewController.m; sourceTree = ""; }; + C943B2E12A408CEC00AF23C5 /* DWAvatarEditSelectorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarEditSelectorViewController.m; sourceTree = ""; }; + C943B2E22A408CEC00AF23C5 /* DWAvatarEditSelectorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarEditSelectorViewController.h; sourceTree = ""; }; + C943B2E42A408CEC00AF23C5 /* DWAvatarEditSelectorContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarEditSelectorContentView.m; sourceTree = ""; }; + C943B2E52A408CEC00AF23C5 /* DWAvatarEditSelectorContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarEditSelectorContentView.h; sourceTree = ""; }; + C943B2E82A408CEC00AF23C5 /* DWExternalSourceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWExternalSourceViewController.h; sourceTree = ""; }; + C943B2E92A408CEC00AF23C5 /* DWExternalSourceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWExternalSourceViewController.m; sourceTree = ""; }; + C943B2EB2A408CEC00AF23C5 /* DWAvatarExternalLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarExternalLoadingView.h; sourceTree = ""; }; + C943B2EC2A408CEC00AF23C5 /* DWAvatarExternalSourceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarExternalSourceView.m; sourceTree = ""; }; + C943B2ED2A408CEC00AF23C5 /* DWAvatarExternalSourceConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarExternalSourceConfig.h; sourceTree = ""; }; + C943B2EE2A408CEC00AF23C5 /* DWAvatarExternalLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarExternalLoadingView.m; sourceTree = ""; }; + C943B2EF2A408CEC00AF23C5 /* DWAvatarExternalSourceConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarExternalSourceConfig.m; sourceTree = ""; }; + C943B2F02A408CEC00AF23C5 /* DWAvatarExternalSourceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarExternalSourceView.h; sourceTree = ""; }; + C943B2F12A408CEC00AF23C5 /* DWAvatarGravatarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarGravatarViewController.h; sourceTree = ""; }; + C943B2F22A408CEC00AF23C5 /* DWAvatarPublicURLViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarPublicURLViewController.m; sourceTree = ""; }; + C943B2F32A408CEC00AF23C5 /* DWAvatarGravatarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAvatarGravatarViewController.m; sourceTree = ""; }; + C943B2F42A408CEC00AF23C5 /* DWAvatarPublicURLViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAvatarPublicURLViewController.h; sourceTree = ""; }; + C943B2F62A408CEC00AF23C5 /* DWSaveAlertChildView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSaveAlertChildView.h; sourceTree = ""; }; + C943B2F72A408CEC00AF23C5 /* DWSaveAlertViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSaveAlertViewController.m; sourceTree = ""; }; + C943B2F82A408CEC00AF23C5 /* DWSaveAlertChildView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSaveAlertChildView.m; sourceTree = ""; }; + C943B2F92A408CEC00AF23C5 /* DWSaveAlertViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSaveAlertViewController.h; sourceTree = ""; }; + C943B2FC2A408CEC00AF23C5 /* DWProfileAboutCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProfileAboutCellModel.m; sourceTree = ""; }; + C943B2FD2A408CEC00AF23C5 /* DWProfileDisplayNameCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProfileDisplayNameCellModel.m; sourceTree = ""; }; + C943B2FF2A408CEC00AF23C5 /* DWTextViewFormCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTextViewFormCellModel.h; sourceTree = ""; }; + C943B3002A408CEC00AF23C5 /* DWTextFieldFormCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTextFieldFormCellModel.m; sourceTree = ""; }; + C943B3012A408CEC00AF23C5 /* DWTextFieldFormCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTextFieldFormCellModel.h; sourceTree = ""; }; + C943B3022A408CEC00AF23C5 /* DWTextViewFormCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTextViewFormCellModel.m; sourceTree = ""; }; + C943B3032A408CEC00AF23C5 /* DWTextInputFormTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTextInputFormTableViewCell.h; sourceTree = ""; }; + C943B3042A408CEC00AF23C5 /* DWProfileDisplayNameCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProfileDisplayNameCellModel.h; sourceTree = ""; }; + C943B3052A408CEC00AF23C5 /* DWProfileAboutCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProfileAboutCellModel.h; sourceTree = ""; }; + C943B3062A408CEC00AF23C5 /* DWEditProfileBaseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWEditProfileBaseCell.h; sourceTree = ""; }; + C943B3072A408CEC00AF23C5 /* DWEditProfileTextViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWEditProfileTextViewCell.m; sourceTree = ""; }; + C943B3082A408CEC00AF23C5 /* DWEditProfileAvatarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWEditProfileAvatarView.h; sourceTree = ""; }; + C943B3092A408CEC00AF23C5 /* DWEditProfileTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWEditProfileTextFieldCell.h; sourceTree = ""; }; + C943B30A2A408CEC00AF23C5 /* DWEditProfileTextViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWEditProfileTextViewCell.h; sourceTree = ""; }; + C943B30B2A408CEC00AF23C5 /* DWEditProfileBaseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWEditProfileBaseCell.m; sourceTree = ""; }; + C943B30C2A408CEC00AF23C5 /* DWEditProfileTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWEditProfileTextFieldCell.m; sourceTree = ""; }; + C943B30D2A408CEC00AF23C5 /* DWEditProfileAvatarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWEditProfileAvatarView.m; sourceTree = ""; }; + C943B30F2A408CEC00AF23C5 /* DWUploadAvatarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUploadAvatarViewController.m; sourceTree = ""; }; + C943B3102A408CEC00AF23C5 /* DWUploadAvatarModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUploadAvatarModel.m; sourceTree = ""; }; + C943B3112A408CEC00AF23C5 /* DWHourGlassAnimationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWHourGlassAnimationView.h; sourceTree = ""; }; + C943B3122A408CEC00AF23C5 /* DWUploadAvatarChildView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUploadAvatarChildView.h; sourceTree = ""; }; + C943B3132A408CEC00AF23C5 /* DWUploadAvatarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUploadAvatarViewController.h; sourceTree = ""; }; + C943B3142A408CEC00AF23C5 /* DWUploadAvatarModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUploadAvatarModel.h; sourceTree = ""; }; + C943B3152A408CEC00AF23C5 /* DWUploadAvatarChildView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUploadAvatarChildView.m; sourceTree = ""; }; + C943B3162A408CEC00AF23C5 /* DWHourGlassAnimationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWHourGlassAnimationView.m; sourceTree = ""; }; + C943B33E2A408E0500AF23C5 /* DWMainMenuViewController+DashPay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWMainMenuViewController+DashPay.h"; sourceTree = ""; }; + C943B33F2A408E5500AF23C5 /* DWMainMenuViewController+DashPay.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DWMainMenuViewController+DashPay.m"; sourceTree = ""; }; + C943B3412A409F9E00AF23C5 /* UIImageView+DWDPAvatar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+DWDPAvatar.h"; sourceTree = ""; }; + C943B3422A409F9E00AF23C5 /* UIImageView+DWDPAvatar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+DWDPAvatar.m"; sourceTree = ""; }; + C943B3442A409FFA00AF23C5 /* DWDPAvatarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPAvatarView.m; sourceTree = ""; }; + C943B3452A409FFA00AF23C5 /* DWDPAvatarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPAvatarView.h; sourceTree = ""; }; + C943B3492A40A4C500AF23C5 /* DWInfoPopupContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInfoPopupContentView.h; sourceTree = ""; }; + C943B34A2A40A4C500AF23C5 /* DWInfoPopupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInfoPopupViewController.m; sourceTree = ""; }; + C943B34B2A40A4C500AF23C5 /* DWInfoPopupContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInfoPopupContentView.m; sourceTree = ""; }; + C943B34C2A40A4C500AF23C5 /* DWInfoPopupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInfoPopupViewController.h; sourceTree = ""; }; + C943B3512A40A54500AF23C5 /* DWBaseContactsViewController+DWProtected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsViewController+DWProtected.h"; sourceTree = ""; }; + C943B3522A40A54500AF23C5 /* DWContactsPlaceholderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsPlaceholderViewController.m; sourceTree = ""; }; + C943B3532A40A54500AF23C5 /* DWRootContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRootContactsViewController.h; sourceTree = ""; }; + C943B3542A40A54500AF23C5 /* DWContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsViewController.m; sourceTree = ""; }; + C943B3552A40A54500AF23C5 /* DWBaseContactsContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsContentViewController.m; sourceTree = ""; }; + C943B3572A40A54500AF23C5 /* DWNoContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNoContactsViewController.m; sourceTree = ""; }; + C943B3582A40A54500AF23C5 /* DWInvitationSuggestionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationSuggestionView.m; sourceTree = ""; }; + C943B3592A40A54500AF23C5 /* DWNoContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNoContactsViewController.h; sourceTree = ""; }; + C943B35A2A40A54500AF23C5 /* DWInvitationSuggestionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationSuggestionView.h; sourceTree = ""; }; + C943B35B2A40A54500AF23C5 /* DWContactsContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsContentViewController.m; sourceTree = ""; }; + C943B35C2A40A54500AF23C5 /* DWBaseContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsViewController.m; sourceTree = ""; }; + C943B35F2A40A54500AF23C5 /* DWContactsDataSourceObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsDataSourceObject.m; sourceTree = ""; }; + C943B3602A40A54500AF23C5 /* DWContactsSearchDataSourceObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsSearchDataSourceObject.m; sourceTree = ""; }; + C943B3612A40A54500AF23C5 /* DWContactsSearchDataSourceObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsSearchDataSourceObject.h; sourceTree = ""; }; + C943B3622A40A54500AF23C5 /* DWContactsDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsDataSource.h; sourceTree = ""; }; + C943B3632A40A54500AF23C5 /* DWContactsDataSourceObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsDataSourceObject.h; sourceTree = ""; }; + C943B3652A40A54500AF23C5 /* DWIncomingFetchedDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWIncomingFetchedDataSource.h; sourceTree = ""; }; + C943B3662A40A54500AF23C5 /* DWContactsFetchedDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsFetchedDataSource.h; sourceTree = ""; }; + C943B3672A40A54500AF23C5 /* DWFetchedResultsDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWFetchedResultsDataSource.h; sourceTree = ""; }; + C943B3682A40A54500AF23C5 /* DWIncomingFetchedDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWIncomingFetchedDataSource.m; sourceTree = ""; }; + C943B3692A40A54600AF23C5 /* DWContactsFetchedDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsFetchedDataSource.m; sourceTree = ""; }; + C943B36A2A40A54600AF23C5 /* DWFetchedResultsDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWFetchedResultsDataSource.m; sourceTree = ""; }; + C943B36B2A40A54600AF23C5 /* DWBaseContactsModel+DWProtected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsModel+DWProtected.h"; sourceTree = ""; }; + C943B36C2A40A54600AF23C5 /* DWBaseContactsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsModel.h; sourceTree = ""; }; + C943B36D2A40A54600AF23C5 /* DWContactsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsModel.h; sourceTree = ""; }; + C943B36E2A40A54600AF23C5 /* DWContactsSortModeProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsSortModeProtocol.h; sourceTree = ""; }; + C943B36F2A40A54600AF23C5 /* DWBaseContactsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBaseContactsModel.m; sourceTree = ""; }; + C943B3702A40A54600AF23C5 /* DWContactsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsModel.m; sourceTree = ""; }; + C943B3722A40A54600AF23C5 /* DWRequestsContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRequestsContentViewController.m; sourceTree = ""; }; + C943B3742A40A54600AF23C5 /* DWRequestsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRequestsModel.m; sourceTree = ""; }; + C943B3752A40A54600AF23C5 /* DWRequestsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRequestsModel.h; sourceTree = ""; }; + C943B3762A40A54600AF23C5 /* DWRequestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRequestsViewController.h; sourceTree = ""; }; + C943B3772A40A54600AF23C5 /* DWRequestsContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRequestsContentViewController.h; sourceTree = ""; }; + C943B3782A40A54600AF23C5 /* DWRequestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRequestsViewController.m; sourceTree = ""; }; + C943B3792A40A54600AF23C5 /* DWRootContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRootContactsViewController.m; sourceTree = ""; }; + C943B37A2A40A54600AF23C5 /* DWBaseContactsContentViewController+DWProtected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DWBaseContactsContentViewController+DWProtected.h"; sourceTree = ""; }; + C943B37B2A40A54600AF23C5 /* DWContactsPlaceholderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsPlaceholderViewController.h; sourceTree = ""; }; + C943B37C2A40A54600AF23C5 /* DWContactsContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsContentViewController.h; sourceTree = ""; }; + C943B37D2A40A54600AF23C5 /* DWBaseContactsContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsContentViewController.h; sourceTree = ""; }; + C943B37E2A40A54600AF23C5 /* DWContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsViewController.h; sourceTree = ""; }; + C943B3802A40A54600AF23C5 /* DWGlobalMatchHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWGlobalMatchHeaderView.m; sourceTree = ""; }; + C943B3812A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWGlobalMatchFailedHeaderView.m; sourceTree = ""; }; + C943B3822A40A54600AF23C5 /* DWContactsSearchPlaceholderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsSearchPlaceholderView.m; sourceTree = ""; }; + C943B3832A40A54600AF23C5 /* DWTitleActionHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTitleActionHeaderView.h; sourceTree = ""; }; + C943B3842A40A54600AF23C5 /* BaseCollectionReusableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCollectionReusableView.h; sourceTree = ""; }; + C943B3852A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWContactsSearchInfoHeaderView.m; sourceTree = ""; }; + C943B3862A40A54600AF23C5 /* DWGlobalMatchHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGlobalMatchHeaderView.h; sourceTree = ""; }; + C943B3872A40A54600AF23C5 /* DWTitleActionHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWTitleActionHeaderView.xib; sourceTree = ""; }; + C943B3882A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGlobalMatchFailedHeaderView.h; sourceTree = ""; }; + C943B3892A40A54600AF23C5 /* BaseCollectionReusableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseCollectionReusableView.m; sourceTree = ""; }; + C943B38A2A40A54600AF23C5 /* DWTitleActionHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTitleActionHeaderView.m; sourceTree = ""; }; + C943B38B2A40A54600AF23C5 /* DWContactsSearchPlaceholderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsSearchPlaceholderView.h; sourceTree = ""; }; + C943B38C2A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWContactsSearchInfoHeaderView.h; sourceTree = ""; }; + C943B38E2A40A54600AF23C5 /* DWSearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSearchViewController.h; sourceTree = ""; }; + C943B38F2A40A54600AF23C5 /* DWSearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSearchViewController.m; sourceTree = ""; }; + C943B3902A40A54600AF23C5 /* DWBaseContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBaseContactsViewController.h; sourceTree = ""; }; + C943B3922A40A54600AF23C5 /* DWUserSearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserSearchViewController.h; sourceTree = ""; }; + C943B3942A40A54600AF23C5 /* DWUserSearchModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchModel.m; sourceTree = ""; }; + C943B3952A40A54600AF23C5 /* DWUserSearchModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserSearchModel.h; sourceTree = ""; }; + C943B3962A40A54600AF23C5 /* DWUserSearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchViewController.m; sourceTree = ""; }; + C943B3982A40A54600AF23C5 /* DWUserSearchResultViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserSearchResultViewController.h; sourceTree = ""; }; + C943B3992A40A54600AF23C5 /* DWSearchStateViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSearchStateViewController.h; sourceTree = ""; }; + C943B39A2A40A54600AF23C5 /* DWUserSearchResultViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserSearchResultViewController.m; sourceTree = ""; }; + C943B39B2A40A54600AF23C5 /* DWSearchStateViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSearchStateViewController.m; sourceTree = ""; }; + C943B3C82A40A54600AF23C5 /* DWDashPayConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDashPayConstants.h; sourceTree = ""; }; + C943B3CA2A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPWelcomeCollectionViewController.m; sourceTree = ""; }; + C943B3CB2A40A54600AF23C5 /* DWInvitationFlowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationFlowViewController.m; sourceTree = ""; }; + C943B3CC2A40A54600AF23C5 /* DWDPWelcomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPWelcomeViewController.m; sourceTree = ""; }; + C943B3CD2A40A54600AF23C5 /* DWDPWelcomePageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPWelcomePageViewController.m; sourceTree = ""; }; + C943B3CF2A40A54600AF23C5 /* DWGetStartedContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWGetStartedContentViewController.m; sourceTree = ""; }; + C943B3D02A40A54600AF23C5 /* DWGetStarted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGetStarted.h; sourceTree = ""; }; + C943B3D12A40A54600AF23C5 /* DWGetStartedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWGetStartedViewController.m; sourceTree = ""; }; + C943B3D22A40A54600AF23C5 /* DWGetStartedContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGetStartedContentViewController.h; sourceTree = ""; }; + C943B3D32A40A54600AF23C5 /* DWGetStartedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGetStartedViewController.h; sourceTree = ""; }; + C943B3D52A40A54600AF23C5 /* DWGetStartedItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWGetStartedItemView.h; sourceTree = ""; }; + C943B3D62A40A54600AF23C5 /* DWGetStartedItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWGetStartedItemView.m; sourceTree = ""; }; + C943B3D72A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPWelcomeCollectionViewController.h; sourceTree = ""; }; + C943B3D82A40A54600AF23C5 /* DWInvitationFlowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationFlowViewController.h; sourceTree = ""; }; + C943B3D92A40A54600AF23C5 /* DWDPWelcomePageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPWelcomePageViewController.h; sourceTree = ""; }; + C943B3DA2A40A54600AF23C5 /* DWDPWelcomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPWelcomeViewController.h; sourceTree = ""; }; + C943B3DC2A40A54600AF23C5 /* DWPassthroughStackView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWPassthroughStackView.h; sourceTree = ""; }; + C943B3DD2A40A54600AF23C5 /* DWPassthroughView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWPassthroughView.m; sourceTree = ""; }; + C943B3DE2A40A54600AF23C5 /* DWPassthroughStackView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWPassthroughStackView.m; sourceTree = ""; }; + C943B3DF2A40A54600AF23C5 /* DWPassthroughView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWPassthroughView.h; sourceTree = ""; }; + C943B3E92A40A54600AF23C5 /* DWUserProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileViewController.h; sourceTree = ""; }; + C943B3EA2A40A54600AF23C5 /* DWModalUserProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWModalUserProfileViewController.h; sourceTree = ""; }; + C943B3ED2A40A54600AF23C5 /* DWUserProfileDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileDataSource.h; sourceTree = ""; }; + C943B3EE2A40A54600AF23C5 /* DWUserProfileDataSourceObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileDataSourceObject.m; sourceTree = ""; }; + C943B3EF2A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProfileTxsFetchedDataSource.m; sourceTree = ""; }; + C943B3F02A40A54600AF23C5 /* DWUserProfileDataSourceObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileDataSourceObject.h; sourceTree = ""; }; + C943B3F12A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProfileTxsFetchedDataSource.h; sourceTree = ""; }; + C943B3F22A40A54600AF23C5 /* DWUserProfileModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileModel.h; sourceTree = ""; }; + C943B3F32A40A54600AF23C5 /* DWUserProfileModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileModel.m; sourceTree = ""; }; + C943B3F42A40A54600AF23C5 /* DWUserProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileViewController.m; sourceTree = ""; }; + C943B3F52A40A54600AF23C5 /* DWModalUserProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWModalUserProfileViewController.m; sourceTree = ""; }; + C943B3F72A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWStretchyHeaderListCollectionLayout.h; sourceTree = ""; }; + C943B3F82A40A54600AF23C5 /* DWUserProfileSendRequestCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileSendRequestCell.m; sourceTree = ""; }; + C943B3F92A40A54600AF23C5 /* DWUserProfileHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileHeaderView.h; sourceTree = ""; }; + C943B3FA2A40A54600AF23C5 /* DWPendingContactInfoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWPendingContactInfoView.m; sourceTree = ""; }; + C943B3FB2A40A54600AF23C5 /* DWUserProfileContactActionsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileContactActionsCell.h; sourceTree = ""; }; + C943B3FC2A40A54600AF23C5 /* DWUserProfileNavigationTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileNavigationTitleView.h; sourceTree = ""; }; + C943B3FD2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWStretchyHeaderListCollectionLayout.m; sourceTree = ""; }; + C943B3FE2A40A54600AF23C5 /* DWUserProfileHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileHeaderView.m; sourceTree = ""; }; + C943B3FF2A40A54600AF23C5 /* DWUserProfileSendRequestCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUserProfileSendRequestCell.h; sourceTree = ""; }; + C943B4002A40A54600AF23C5 /* DWPendingContactInfoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWPendingContactInfoView.h; sourceTree = ""; }; + C943B4012A40A54600AF23C5 /* DWUserProfileNavigationTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileNavigationTitleView.m; sourceTree = ""; }; + C943B4022A40A54600AF23C5 /* DWUserProfileContactActionsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUserProfileContactActionsCell.m; sourceTree = ""; }; + C943B4052A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPNewIncomingRequestObject.m; sourceTree = ""; }; + C943B4062A40A54600AF23C5 /* DWDPContactObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPContactObject.h; sourceTree = ""; }; + C943B4072A40A54600AF23C5 /* DWDPEstablishedContactObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPEstablishedContactObject.m; sourceTree = ""; }; + C943B4082A40A54600AF23C5 /* DWDPPendingRequestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPPendingRequestObject.h; sourceTree = ""; }; + C943B4092A40A54600AF23C5 /* DWDPUserObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPUserObject.m; sourceTree = ""; }; + C943B40A2A40A54600AF23C5 /* DWDPTxObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPTxObject.h; sourceTree = ""; }; + C943B40B2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPRespondedIncomingRequestObject.h; sourceTree = ""; }; + C943B40C2A40A54600AF23C5 /* DWDPIncomingRequestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPIncomingRequestObject.m; sourceTree = ""; }; + C943B40D2A40A54600AF23C5 /* DWDPContactObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPContactObject.m; sourceTree = ""; }; + C943B40E2A40A54600AF23C5 /* DWDPNewIncomingRequestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestObject.h; sourceTree = ""; }; + C943B40F2A40A54600AF23C5 /* DWDPEstablishedContactObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactObject.h; sourceTree = ""; }; + C943B4102A40A54600AF23C5 /* DWDPTxObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPTxObject.m; sourceTree = ""; }; + C943B4112A40A54600AF23C5 /* DWDPUserObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPUserObject.h; sourceTree = ""; }; + C943B4122A40A54600AF23C5 /* DWDPPendingRequestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPPendingRequestObject.m; sourceTree = ""; }; + C943B4132A40A54600AF23C5 /* DWDPIncomingRequestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestObject.h; sourceTree = ""; }; + C943B4152A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPAcceptedRequestNotificationObject.m; sourceTree = ""; }; + C943B4162A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPOutgoingRequestNotificationObject.m; sourceTree = ""; }; + C943B4172A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPNewIncomingRequestNotificationObject.m; sourceTree = ""; }; + C943B4182A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactNotificationObject.h; sourceTree = ""; }; + C943B4192A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPAcceptedRequestNotificationObject.h; sourceTree = ""; }; + C943B41A2A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPOutgoingRequestNotificationObject.h; sourceTree = ""; }; + C943B41B2A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPEstablishedContactNotificationObject.m; sourceTree = ""; }; + C943B41C2A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestNotificationObject.h; sourceTree = ""; }; + C943B41D2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPRespondedIncomingRequestObject.m; sourceTree = ""; }; + C943B41F2A40A54600AF23C5 /* DWDPTextStatusCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPTextStatusCell.m; sourceTree = ""; }; + C943B4212A40A54600AF23C5 /* DWDPGenericStatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPGenericStatusItemView.h; sourceTree = ""; }; + C943B4222A40A54600AF23C5 /* DWDPGenericContactRequestItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericContactRequestItemView.m; sourceTree = ""; }; + C943B4232A40A54600AF23C5 /* DWDPTxItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPTxItemView.m; sourceTree = ""; }; + C943B4242A40A54600AF23C5 /* DWDPGenericImageItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPGenericImageItemView.h; sourceTree = ""; }; + C943B4252A40A54600AF23C5 /* DWDPGenericItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericItemView.m; sourceTree = ""; }; + C943B4262A40A54600AF23C5 /* DWDPGenericContactRequestItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPGenericContactRequestItemView.h; sourceTree = ""; }; + C943B4272A40A54600AF23C5 /* DWDPGenericStatusItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericStatusItemView.m; sourceTree = ""; }; + C943B4282A40A54600AF23C5 /* DWDPGenericImageItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPGenericImageItemView.m; sourceTree = ""; }; + C943B4292A40A54600AF23C5 /* DWDPTxItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPTxItemView.h; sourceTree = ""; }; + C943B42A2A40A54600AF23C5 /* DWDPGenericItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPGenericItemView.h; sourceTree = ""; }; + C943B42B2A40A54600AF23C5 /* DWDPBasicCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPBasicCell.h; sourceTree = ""; }; + C943B42C2A40A54600AF23C5 /* DWDPTxListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPTxListCell.h; sourceTree = ""; }; + C943B42D2A40A54600AF23C5 /* DWDPImageStatusCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPImageStatusCell.m; sourceTree = ""; }; + C943B42E2A40A54600AF23C5 /* DWDPIncomingRequestCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPIncomingRequestCell.m; sourceTree = ""; }; + C943B42F2A40A54600AF23C5 /* UIFont+DWDPItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIFont+DWDPItem.h"; sourceTree = ""; }; + C943B4302A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UICollectionView+DWDPItemDequeue.m"; sourceTree = ""; }; + C943B4312A40A54600AF23C5 /* DWDPBasicCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPBasicCell.m; sourceTree = ""; }; + C943B4322A40A54600AF23C5 /* DWDPTextStatusCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPTextStatusCell.h; sourceTree = ""; }; + C943B4332A40A54600AF23C5 /* DWDPTxListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPTxListCell.m; sourceTree = ""; }; + C943B4342A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UICollectionView+DWDPItemDequeue.h"; sourceTree = ""; }; + C943B4352A40A54600AF23C5 /* UIFont+DWDPItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIFont+DWDPItem.m"; sourceTree = ""; }; + C943B4362A40A54600AF23C5 /* DWDPIncomingRequestCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestCell.h; sourceTree = ""; }; + C943B4372A40A54600AF23C5 /* DWDPImageStatusCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPImageStatusCell.h; sourceTree = ""; }; + C943B4392A40A54600AF23C5 /* DWDPBasicItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPBasicItem.h; sourceTree = ""; }; + C943B43A2A40A54600AF23C5 /* DWDPNewIncomingRequestItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPNewIncomingRequestItem.h; sourceTree = ""; }; + C943B43B2A40A54600AF23C5 /* DWDPPendingRequestItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPPendingRequestItem.h; sourceTree = ""; }; + C943B43D2A40A54600AF23C5 /* DWDPFriendRequestBackedItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPFriendRequestBackedItem.h; sourceTree = ""; }; + C943B43E2A40A54600AF23C5 /* DWDPBlockchainIdentityBackedItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPBlockchainIdentityBackedItem.h; sourceTree = ""; }; + C943B43F2A40A54600AF23C5 /* DWDPDashpayUserBackedItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPDashpayUserBackedItem.h; sourceTree = ""; }; + C943B4402A40A54600AF23C5 /* DWDPNotificationItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPNotificationItem.h; sourceTree = ""; }; + C943B4412A40A54600AF23C5 /* DWDPEstablishedContactItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPEstablishedContactItem.h; sourceTree = ""; }; + C943B4422A40A54600AF23C5 /* DWDPTxItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPTxItem.h; sourceTree = ""; }; + C943B4432A40A54600AF23C5 /* DWDPRespondedRequestItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPRespondedRequestItem.h; sourceTree = ""; }; + C943B4442A40A54600AF23C5 /* DWDPBasicUserItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPBasicUserItem.h; sourceTree = ""; }; + C943B4452A40A54600AF23C5 /* DWDPIncomingRequestItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPIncomingRequestItem.h; sourceTree = ""; }; + C943B4472A40A54600AF23C5 /* DWDPSearchItemsFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPSearchItemsFactory.h; sourceTree = ""; }; + C943B4482A40A54600AF23C5 /* DWDPContactsItemsFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPContactsItemsFactory.m; sourceTree = ""; }; + C943B4492A40A54600AF23C5 /* DWDPSearchItemsFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPSearchItemsFactory.m; sourceTree = ""; }; + C943B44A2A40A54600AF23C5 /* DWDPContactsItemsFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPContactsItemsFactory.h; sourceTree = ""; }; + C943B44C2A40A54600AF23C5 /* DWSendInviteFirstStepViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSendInviteFirstStepViewController.h; sourceTree = ""; }; + C943B44E2A40A54600AF23C5 /* DPAlertViewController+DWInvite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DPAlertViewController+DWInvite.h"; sourceTree = ""; }; + C943B44F2A40A54600AF23C5 /* DPAlertViewController+DWInvite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DPAlertViewController+DWInvite.m"; sourceTree = ""; }; + C943B4502A40A54600AF23C5 /* DWSendInviteFlowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSendInviteFlowController.h; sourceTree = ""; }; + C943B4522A40A54600AF23C5 /* DWConfirmInvitationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWConfirmInvitationViewController.m; sourceTree = ""; }; + C943B4532A40A54600AF23C5 /* DWConfirmInvitationContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWConfirmInvitationContentView.m; sourceTree = ""; }; + C943B4542A40A54600AF23C5 /* DWConfirmInvitationContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWConfirmInvitationContentView.h; sourceTree = ""; }; + C943B4552A40A54600AF23C5 /* DWConfirmInvitationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWConfirmInvitationViewController.h; sourceTree = ""; }; + C943B4562A40A54600AF23C5 /* DWConfirmInvitationContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWConfirmInvitationContentView.xib; sourceTree = ""; }; + C943B4572A40A54600AF23C5 /* DWSendInviteFirstStepViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSendInviteFirstStepViewController.m; sourceTree = ""; }; + C943B4592A40A54600AF23C5 /* DWInvitationHistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationHistoryViewController.m; sourceTree = ""; }; + C943B45B2A40A54600AF23C5 /* DWInvitationHistoryFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationHistoryFilter.h; sourceTree = ""; }; + C943B45C2A40A54600AF23C5 /* DWInvitationHistoryModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationHistoryModel.m; sourceTree = ""; }; + C943B45D2A40A54600AF23C5 /* DWInvitationHistoryModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationHistoryModel.h; sourceTree = ""; }; + C943B45E2A40A54600AF23C5 /* DWInvitationItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationItem.h; sourceTree = ""; }; + C943B4602A40A54600AF23C5 /* DWHistoryFilterContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWHistoryFilterContentView.m; sourceTree = ""; }; + C943B4612A40A54600AF23C5 /* DWHistoryFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWHistoryFilterViewController.m; sourceTree = ""; }; + C943B4622A40A54600AF23C5 /* DWHistoryFilterContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWHistoryFilterContentView.h; sourceTree = ""; }; + C943B4632A40A54600AF23C5 /* DWHistoryFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWHistoryFilterViewController.h; sourceTree = ""; }; + C943B4652A40A54600AF23C5 /* DWHistoryHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWHistoryHeaderView.h; sourceTree = ""; }; + C943B4662A40A54600AF23C5 /* DWInvitationTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationTableViewCell.m; sourceTree = ""; }; + C943B4672A40A54600AF23C5 /* DWCreateInvitationButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWCreateInvitationButton.m; sourceTree = ""; }; + C943B4682A40A54600AF23C5 /* DWInvitationTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationTableViewCell.h; sourceTree = ""; }; + C943B4692A40A54600AF23C5 /* DWHistoryHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWHistoryHeaderView.m; sourceTree = ""; }; + C943B46A2A40A54600AF23C5 /* DWCreateInvitationButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWCreateInvitationButton.h; sourceTree = ""; }; + C943B46B2A40A54600AF23C5 /* DWInvitationHistoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationHistoryViewController.h; sourceTree = ""; }; + C943B46D2A40A54600AF23C5 /* DWInvitationPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationPreviewViewController.h; sourceTree = ""; }; + C943B46E2A40A54600AF23C5 /* DWInvitationPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationPreviewViewController.m; sourceTree = ""; }; + C943B46F2A40A54600AF23C5 /* DWSendInviteFlowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSendInviteFlowController.m; sourceTree = ""; }; + C943B4712A40A54600AF23C5 /* DWInvitationLinkBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationLinkBuilder.m; sourceTree = ""; }; + C943B4722A40A54600AF23C5 /* BaseInvitationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseInvitationViewController.swift; sourceTree = ""; }; + C943B4732A40A54600AF23C5 /* SuccessInvitationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuccessInvitationViewController.swift; sourceTree = ""; }; + C943B4742A40A54600AF23C5 /* DWInvitationLinkBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationLinkBuilder.h; sourceTree = ""; }; + C943B4762A40A54600AF23C5 /* InvitationBottomView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InvitationBottomView.swift; sourceTree = ""; }; + C943B4772A40A54600AF23C5 /* InvitationTopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InvitationTopView.swift; sourceTree = ""; }; + C943B4782A40A54600AF23C5 /* DWSuccessInvitationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSuccessInvitationView.m; sourceTree = ""; }; + C943B4792A40A54600AF23C5 /* DWInvitationMessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationMessageView.h; sourceTree = ""; }; + C943B47A2A40A54600AF23C5 /* DWInvitationActionsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationActionsView.m; sourceTree = ""; }; + C943B47B2A40A54600AF23C5 /* DWSuccessInvitationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSuccessInvitationView.h; sourceTree = ""; }; + C943B47C2A40A54600AF23C5 /* SuccessInvitationTopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuccessInvitationTopView.swift; sourceTree = ""; }; + C943B47D2A40A54600AF23C5 /* DWInvitationMessageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWInvitationMessageView.m; sourceTree = ""; }; + C943B47E2A40A54600AF23C5 /* DWInvitationActionsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWInvitationActionsView.h; sourceTree = ""; }; + C943B4802A40A54600AF23C5 /* DWNetworkUnavailableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNetworkUnavailableView.m; sourceTree = ""; }; + C943B4812A40A54600AF23C5 /* UIColor+DWDashPay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+DWDashPay.m"; sourceTree = ""; }; + C943B4822A40A54600AF23C5 /* DWDPSmallContactView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPSmallContactView.h; sourceTree = ""; }; + C943B4842A40A54600AF23C5 /* DWDashPayAnimationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDashPayAnimationView.h; sourceTree = ""; }; + C943B4852A40A54600AF23C5 /* UIColor+DWDashPay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+DWDashPay.h"; sourceTree = ""; }; + C943B4862A40A54600AF23C5 /* DWNetworkUnavailableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNetworkUnavailableView.h; sourceTree = ""; }; + C943B4872A40A54600AF23C5 /* DWDPSmallContactView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPSmallContactView.m; sourceTree = ""; }; + C943B4882A40A54600AF23C5 /* DWDashPayAnimationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDashPayAnimationView.m; sourceTree = ""; }; + C943B48D2A40A54600AF23C5 /* DWDashPayConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDashPayConstants.m; sourceTree = ""; }; + C943B48F2A40A54600AF23C5 /* UIImageView+DWDPAvatar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+DWDPAvatar.m"; sourceTree = ""; }; + C943B4902A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DSBlockchainIdentity+DWDisplayName.h"; sourceTree = ""; }; + C943B4912A40A54600AF23C5 /* DWDashPayContactsActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDashPayContactsActions.m; sourceTree = ""; }; + C943B4922A40A54600AF23C5 /* DWDashPayContactsUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDashPayContactsUpdater.h; sourceTree = ""; }; + C943B4932A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DSBlockchainIdentity+DWDisplayName.m"; sourceTree = ""; }; + C943B4942A40A54600AF23C5 /* UIImageView+DWDPAvatar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+DWDPAvatar.h"; sourceTree = ""; }; + C943B4952A40A54600AF23C5 /* DWDashPayContactsActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDashPayContactsActions.h; sourceTree = ""; }; + C943B4962A40A54600AF23C5 /* DWDashPayContactsUpdater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDashPayContactsUpdater.m; sourceTree = ""; }; + C943B4982A40A54600AF23C5 /* DWNotificationsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsProvider.m; sourceTree = ""; }; + C943B4992A40A54600AF23C5 /* DWNotificationsData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsData.m; sourceTree = ""; }; + C943B49A2A40A54600AF23C5 /* DWNotificationsFetchedDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsFetchedDataSource.h; sourceTree = ""; }; + C943B49B2A40A54600AF23C5 /* DWNotificationsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsProvider.h; sourceTree = ""; }; + C943B49C2A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsFetchedDataSource.m; sourceTree = ""; }; + C943B49D2A40A54600AF23C5 /* DWNotificationsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsData.h; sourceTree = ""; }; + C943B4A02A40A54600AF23C5 /* DWNotificationsInvitationCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsInvitationCell.h; sourceTree = ""; }; + C943B4A12A40A54600AF23C5 /* DWNoNotificationsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNoNotificationsCell.m; sourceTree = ""; }; + C943B4A22A40A54600AF23C5 /* DWNotificationsInvitationCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsInvitationCell.m; sourceTree = ""; }; + C943B4A32A40A54600AF23C5 /* DWNoNotificationsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNoNotificationsCell.h; sourceTree = ""; }; + C943B4A42A40A54600AF23C5 /* DWListCollectionLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWListCollectionLayout.h; sourceTree = ""; }; + C943B4A52A40A54600AF23C5 /* DWNotificationsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsViewController.h; sourceTree = ""; }; + C943B4A72A40A54600AF23C5 /* DWNotificationsModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsModel.m; sourceTree = ""; }; + C943B4A82A40A54600AF23C5 /* DWNotificationsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWNotificationsModel.h; sourceTree = ""; }; + C943B4A92A40A54600AF23C5 /* DWListCollectionLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWListCollectionLayout.m; sourceTree = ""; }; + C943B4AA2A40A54600AF23C5 /* DWNotificationsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWNotificationsViewController.m; sourceTree = ""; }; + C943B5362A40A65B00AF23C5 /* DWScrollingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWScrollingViewController.m; sourceTree = ""; }; + C943B5372A40A65B00AF23C5 /* DWScrollingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWScrollingViewController.h; sourceTree = ""; }; + C943B53A2A40A6BE00AF23C5 /* DPAlertChildContentsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DPAlertChildContentsView.h; sourceTree = ""; }; + C943B53B2A40A6BE00AF23C5 /* DPAlertViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DPAlertViewController.m; sourceTree = ""; }; + C943B53C2A40A6BE00AF23C5 /* DPAlertChildContentsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DPAlertChildContentsView.m; sourceTree = ""; }; + C943B53D2A40A6BE00AF23C5 /* DPAlertViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DPAlertViewController.h; sourceTree = ""; }; + C943B5412A40AFD000AF23C5 /* DWTxDetailPopupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWTxDetailPopupViewController.h; sourceTree = ""; }; + C943B5422A40AFD100AF23C5 /* DWTxDetailPopupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWTxDetailPopupViewController.m; sourceTree = ""; }; + C943B5442A40B4AF00AF23C5 /* DWDashPayReadyProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPayReadyProtocol.h; sourceTree = ""; }; + C943B5462A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+DWAutolayout.m"; sourceTree = ""; }; + C943B5472A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+DWAutolayout.h"; sourceTree = ""; }; + C943B5482A40B52F00AF23C5 /* UIView+DWAutolayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWAutolayout.m"; sourceTree = ""; }; + C943B5492A40B52F00AF23C5 /* UIView+DWAutolayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+DWAutolayout.h"; sourceTree = ""; }; + C943B54C2A40B6B500AF23C5 /* DWColoredButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWColoredButton.m; sourceTree = ""; }; + C943B54D2A40B6B500AF23C5 /* DWColoredButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWColoredButton.h; sourceTree = ""; }; + C943B5522A40C23500AF23C5 /* DWFilterHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWFilterHeaderView.xib; sourceTree = ""; }; + C943B5562A40DA3600AF23C5 /* DWFullScreenModalControllerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWFullScreenModalControllerViewController.h; sourceTree = ""; }; + C943B5572A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWFullScreenModalControllerViewController.m; sourceTree = ""; }; + C943B5592A40DD3F00AF23C5 /* NSArray+DWFlatten.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+DWFlatten.h"; sourceTree = ""; }; + C943B55A2A40DD4000AF23C5 /* NSArray+DWFlatten.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+DWFlatten.m"; sourceTree = ""; }; + C943B55C2A40E6F200AF23C5 /* DWFilterHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWFilterHeaderView.m; sourceTree = ""; }; + C943B55D2A40E6F200AF23C5 /* DWFilterHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWFilterHeaderView.h; sourceTree = ""; }; + C943B5602A40ED4000AF23C5 /* DWDashPaySetupFlowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDashPaySetupFlowController.h; sourceTree = ""; }; + C943B5612A40ED4000AF23C5 /* DWDashPaySetupFlowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDashPaySetupFlowController.m; sourceTree = ""; }; + C943B5632A40ED4000AF23C5 /* DWUsernamePendingViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernamePendingViewController.m; sourceTree = ""; }; + C943B5642A40ED4000AF23C5 /* DWUsernamePendingViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernamePendingViewController.h; sourceTree = ""; }; + C943B5662A40ED4100AF23C5 /* DWConfirmUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWConfirmUsernameViewController.h; sourceTree = ""; }; + C943B5672A40ED4100AF23C5 /* DWConfirmUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWConfirmUsernameViewController.m; sourceTree = ""; }; + C943B5692A40ED4100AF23C5 /* DWRegistrationCompletedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWRegistrationCompletedViewController.m; sourceTree = ""; }; + C943B56A2A40ED4100AF23C5 /* DWRegistrationCompletedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWRegistrationCompletedViewController.h; sourceTree = ""; }; + C943B56C2A40ED4100AF23C5 /* DWCreateUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCreateUsernameViewController.h; sourceTree = ""; }; + C943B56D2A40ED4200AF23C5 /* DWInputUsernameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWInputUsernameViewController.h; sourceTree = ""; }; + C943B56E2A40ED4200AF23C5 /* DWCreateUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWCreateUsernameViewController.m; sourceTree = ""; }; + C943B56F2A40ED4200AF23C5 /* DWInputUsernameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWInputUsernameViewController.m; sourceTree = ""; }; + C943B5712A40ED4200AF23C5 /* DWConfirmUsernameContentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWConfirmUsernameContentView.xib; sourceTree = ""; }; + C943B5722A40ED4200AF23C5 /* DWConfirmUsernameContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWConfirmUsernameContentView.m; sourceTree = ""; }; + C943B5732A40ED4200AF23C5 /* DWConfirmUsernameContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWConfirmUsernameContentView.h; sourceTree = ""; }; + C943B5752A40ED4300AF23C5 /* DWUsernameValidationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameValidationView.h; sourceTree = ""; }; + C943B5762A40ED4300AF23C5 /* DWPlanetarySystemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPlanetarySystemView.h; sourceTree = ""; }; + C943B5772A40ED4300AF23C5 /* DWTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWTextField.m; sourceTree = ""; }; + C943B5782A40ED4300AF23C5 /* DWUsernameHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameHeaderView.h; sourceTree = ""; }; + C943B5792A40ED4300AF23C5 /* DWUsernameHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameHeaderView.m; sourceTree = ""; }; + C943B57A2A40ED4300AF23C5 /* DWUsernameValidationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameValidationView.m; sourceTree = ""; }; + C943B57B2A40ED4400AF23C5 /* DWTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWTextField.h; sourceTree = ""; }; + C943B57C2A40ED4400AF23C5 /* DWPlanetarySystemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPlanetarySystemView.m; sourceTree = ""; }; + C943B57E2A40ED4400AF23C5 /* DWFirstUsernameSymbolValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWFirstUsernameSymbolValidationRule.m; sourceTree = ""; }; + C943B57F2A40ED4400AF23C5 /* DWLengthUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLengthUsernameValidationRule.h; sourceTree = ""; }; + C943B5802A40ED4400AF23C5 /* DWUsernameValidationRule+Protected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DWUsernameValidationRule+Protected.h"; sourceTree = ""; }; + C943B5812A40ED4400AF23C5 /* DWAllowedCharactersUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWAllowedCharactersUsernameValidationRule.h; sourceTree = ""; }; + C943B5822A40ED4400AF23C5 /* DWUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWUsernameValidationRule.h; sourceTree = ""; }; + C943B5832A40ED4500AF23C5 /* DWLengthUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLengthUsernameValidationRule.m; sourceTree = ""; }; + C943B5842A40ED4500AF23C5 /* DWCheckExistenceUsernameValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCheckExistenceUsernameValidationRule.h; sourceTree = ""; }; + C943B5852A40ED4500AF23C5 /* DWAllowedCharactersUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWAllowedCharactersUsernameValidationRule.m; sourceTree = ""; }; + C943B5862A40ED4500AF23C5 /* DWCheckExistenceUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWCheckExistenceUsernameValidationRule.m; sourceTree = ""; }; + C943B5872A40ED4500AF23C5 /* DWFirstUsernameSymbolValidationRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWFirstUsernameSymbolValidationRule.h; sourceTree = ""; }; + C943B5882A40ED4500AF23C5 /* DWUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameValidationRule.m; sourceTree = ""; }; + C943B59A2A40EE4800AF23C5 /* DWNetworkErrorViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNetworkErrorViewController.m; sourceTree = ""; }; + C943B59B2A40EE4800AF23C5 /* DWNetworkErrorViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNetworkErrorViewController.h; sourceTree = ""; }; C94946DE2A25EDA8008A678D /* DWHomeViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWHomeViewControllerDelegate.h; sourceTree = ""; }; C94946DF2A25EE24008A678D /* DWMainMenuViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMainMenuViewControllerDelegate.h; sourceTree = ""; }; C94946E02A25F037008A678D /* DemoMainTabbarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoMainTabbarViewController.swift; sourceTree = ""; }; @@ -1926,6 +2921,14 @@ C94F5E8B29D3FEC10034FD57 /* ShortcutsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsModel.swift; sourceTree = ""; }; C94F5E8D29D404850034FD57 /* ShortcutCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutCell.swift; sourceTree = ""; }; C94F5E8F29D4060A0034FD57 /* ShortcutsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsView.swift; sourceTree = ""; }; + C956AF152A5C3301002FAB75 /* DWPressableButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWPressableButton.h; sourceTree = ""; }; + C956AF162A5C3302002FAB75 /* DWPressableButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWPressableButton.m; sourceTree = ""; }; + C956AF192A5C337E002FAB75 /* DWBorderedActionButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBorderedActionButton.h; sourceTree = ""; }; + C956AF1A2A5C337F002FAB75 /* DWBorderedActionButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBorderedActionButton.m; sourceTree = ""; }; + C956AF1C2A5C3396002FAB75 /* DWBaseActionButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBaseActionButton.m; sourceTree = ""; }; + C956AF1D2A5C3397002FAB75 /* DWBaseActionButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBaseActionButton.h; sourceTree = ""; }; + C956AF1F2A5C33E4002FAB75 /* DWButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWButton.h; sourceTree = ""; }; + C956AF202A5C33E5002FAB75 /* DWButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWButton.m; sourceTree = ""; }; C956AF222A5C7D93002FAB75 /* ConfirmPaymentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmPaymentViewController.swift; sourceTree = ""; }; C956AF252A5CACE6002FAB75 /* TitleValueCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleValueCell.swift; sourceTree = ""; }; C956AF272A5CAD4D002FAB75 /* TitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleCell.swift; sourceTree = ""; }; @@ -1938,6 +2941,17 @@ C98AA93FF5283EC6405BCE4B /* Pods-WatchApp Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp Extension/Pods-WatchApp Extension.debug.xcconfig"; sourceTree = ""; }; C9903A5329E6A5F600535A4E /* KeysOverviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeysOverviewViewController.swift; sourceTree = ""; }; C9C133592A561FFA00B66651 /* PasteboardContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteboardContentView.swift; sourceTree = ""; }; + C9D2C9532A320AA000D15901 /* dashpay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dashpay.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C9D2C9562A320F3700D15901 /* dashpay-info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "dashpay-info.plist"; sourceTree = ""; }; + C9D2C95C2A386D7E00D15901 /* DWBasePressableControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWBasePressableControl.h; sourceTree = ""; }; + C9D2C95D2A386D7E00D15901 /* DWBasePressableControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBasePressableControl.m; sourceTree = ""; }; + C9D2C9602A386DA200D15901 /* DWDPWelcomeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDPWelcomeView.m; sourceTree = ""; }; + C9D2C9612A386DA200D15901 /* DWDPWelcomeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDPWelcomeView.h; sourceTree = ""; }; + C9D2C9642A38733B00D15901 /* DPAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = DPAssets.xcassets; sourceTree = ""; }; + C9D2C9672A3875BA00D15901 /* DWCurrentUserProfileModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWCurrentUserProfileModel.m; sourceTree = ""; }; + C9D2C9682A3875BA00D15901 /* DWCurrentUserProfileModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWCurrentUserProfileModel.h; sourceTree = ""; }; + C9D2C96F2A38778E00D15901 /* DWDashPaySetupModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWDashPaySetupModel.h; sourceTree = ""; }; + C9D2C9702A38778E00D15901 /* DWDashPaySetupModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWDashPaySetupModel.m; sourceTree = ""; }; C9F067F129E4576D0022D958 /* HomeBalanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeBalanceView.swift; sourceTree = ""; }; C9F067F329E457790022D958 /* HomeBalanceView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeBalanceView.xib; sourceTree = ""; }; C9F42F9E29DA82E5001BC549 /* PayableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayableViewController.swift; sourceTree = ""; }; @@ -1961,7 +2975,6 @@ C9F451F42A0CAC9400825057 /* HomeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeHeaderView.swift; sourceTree = ""; }; C9F451F62A0CAE1300825057 /* SyncView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncView.swift; sourceTree = ""; }; C9F451F82A0CB08900825057 /* ProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressView.swift; sourceTree = ""; }; - C9F451FA2A0CC2A800825057 /* DashPayProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashPayProfileView.swift; sourceTree = ""; }; C9F451FC2A0CC4A300825057 /* BadgeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeView.swift; sourceTree = ""; }; C9F452002A0CE6C900825057 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; C9F452022A0CEB5800825057 /* TxListEmptyTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxListEmptyTableViewCell.swift; sourceTree = ""; }; @@ -1970,8 +2983,10 @@ C9FAABB42AB793CE00878224 /* BuySellPortal.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BuySellPortal.storyboard; sourceTree = ""; }; C9FAABB62AB799AE00878224 /* UpholdPortalModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpholdPortalModel.swift; sourceTree = ""; }; CE02413EF0C60B1D1EDE6457 /* Pods-WatchApp Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp Extension/Pods-WatchApp Extension.release.xcconfig"; sourceTree = ""; }; + CE89DF632BC53160BB8FBED1 /* libPods-dashpay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dashpay.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D58B25CB4DC36975E05D3C0A /* Pods-dashwallet no watch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet no watch.debug.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet no watch/Pods-dashwallet no watch.debug.xcconfig"; sourceTree = ""; }; EA95ACF6CA2A73810B9BB451 /* Pods-DashWalletScreenshotsUITests.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.testflight.xcconfig"; sourceTree = ""; }; + EBB5D208A38257AF3DA73A99 /* Pods-dashpay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashpay.release.xcconfig"; path = "Pods/Target Support Files/Pods-dashpay/Pods-dashpay.release.xcconfig"; sourceTree = ""; }; F12049B257DDE750DE332799 /* Pods-WatchApp.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp/Pods-WatchApp.testflight.xcconfig"; sourceTree = ""; }; FB0ACB9E1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; FB0ACBA01F9ABB6200F4AB52 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; @@ -2046,7 +3061,8 @@ 222E7F561C46E9B8009AB45D /* Security.framework in Frameworks */, 222040C61C1A1940005CE1C3 /* WebKit.framework in Frameworks */, 22B6A4481C0E963900673913 /* libbz2.tbd in Frameworks */, - DE3A167A235B79D705C0A962 /* libPods-dashwallet.a in Frameworks */, + DE3A167A235B79D705C0A962 /* (null) in Frameworks */, + A90D08EA4AA9019A2D806A9C /* libPods-dashwallet.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2083,6 +3099,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C9D2C8F52A320AA000D15901 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C9D2C8F62A320AA000D15901 /* libDashSync.a in Frameworks */, + C9D2C8F72A320AA000D15901 /* CoreNFC.framework in Frameworks */, + C9D2C8F82A320AA000D15901 /* BackgroundTasks.framework in Frameworks */, + C9D2C8F92A320AA000D15901 /* GameplayKit.framework in Frameworks */, + C9D2C8FA2A320AA000D15901 /* AudioToolbox.framework in Frameworks */, + C9D2C8FB2A320AA000D15901 /* CloudKit.framework in Frameworks */, + C9D2C8FC2A320AA000D15901 /* SafariServices.framework in Frameworks */, + C9D2C8FD2A320AA000D15901 /* UserNotifications.framework in Frameworks */, + C9D2C8FE2A320AA000D15901 /* ImageIO.framework in Frameworks */, + C9D2C8FF2A320AA000D15901 /* CoreGraphics.framework in Frameworks */, + C9D2C9002A320AA000D15901 /* UIKit.framework in Frameworks */, + C9D2C9012A320AA000D15901 /* Foundation.framework in Frameworks */, + C9D2C9022A320AA000D15901 /* QuartzCore.framework in Frameworks */, + C9D2C9032A320AA000D15901 /* CoreLocation.framework in Frameworks */, + C9D2C9042A320AA000D15901 /* libsqlite3.tbd in Frameworks */, + C9D2C9052A320AA000D15901 /* SystemConfiguration.framework in Frameworks */, + C9D2C9062A320AA000D15901 /* Security.framework in Frameworks */, + C9D2C9072A320AA000D15901 /* WebKit.framework in Frameworks */, + C9D2C9082A320AA000D15901 /* libbz2.tbd in Frameworks */, + AEC28D84403A194A6C7D8C5A /* libPods-dashpay.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -2218,7 +3261,6 @@ 1147687D294B789800FB1EEE /* CrowdNodePortalViewController.swift */, 111C3C4B296C51B500788E18 /* WithdrawalLimitsController.swift */, 11ED906A29681773003784F9 /* StakingInfoDialogController.swift */, - 111B8BFF299BD973004A4129 /* WithdrawalConfirmationController.swift */, ); path = Portal; sourceTree = ""; @@ -2361,8 +3403,8 @@ 1141E4C3291FDC3B00ACDA9E /* Getting Started */, 1141E4C0291BB0FC00ACDA9E /* Portal */, 11BD737A28E6BCD400A34022 /* New Account */, - 1121A8B628E5DB6E00464C31 /* CrowdNode.storyboard */, 11E47BA728EAE7AD0097CFA0 /* CrowdNodeModel.swift */, + 75303FE42AE7B70500870D8B /* CrowdNode.storyboard */, ); path = CrowdNode; sourceTree = ""; @@ -2535,21 +3577,6 @@ path = "Syncing Views"; sourceTree = ""; }; - 2A1AE78B23F463FB00179A6E /* Views */ = { - isa = PBXGroup; - children = ( - 2A1AE79023F468CD00179A6E /* DWPlanetarySystemView.h */, - 2A1AE79123F468CD00179A6E /* DWPlanetarySystemView.m */, - 2A1AE78C23F4668B00179A6E /* DWUsernameHeaderView.h */, - 2A1AE78D23F4668B00179A6E /* DWUsernameHeaderView.m */, - 2A9E7DC523F6928C00CDA1EE /* DWTextField.h */, - 2A9E7DC623F6928C00CDA1EE /* DWTextField.m */, - 2A9E7DC823F6BD5200CDA1EE /* DWUsernameValidationView.h */, - 2A9E7DC923F6BD5200CDA1EE /* DWUsernameValidationView.m */, - ); - path = Views; - sourceTree = ""; - }; 2A1B7D7E232151B800BA8C6A /* Tx */ = { isa = PBXGroup; children = ( @@ -2664,15 +3691,6 @@ path = Views; sourceTree = ""; }; - 2A3CCEF6242BB0AF00300AF8 /* RegistrationCompleted */ = { - isa = PBXGroup; - children = ( - 2A3CCEF7242BB1B900300AF8 /* DWRegistrationCompletedViewController.h */, - 2A3CCEF8242BB1B900300AF8 /* DWRegistrationCompletedViewController.m */, - ); - path = RegistrationCompleted; - sourceTree = ""; - }; 2A4430E922CBB98D009BAF7F /* Setup */ = { isa = PBXGroup; children = ( @@ -2731,6 +3749,7 @@ C9829CE12A562CEE007132E4 /* TappableTextView.swift */, C9829CDD2A562822007132E4 /* TappableLabel.swift */, C956AF2C2A5CEA1F002FAB75 /* SheetViewController.swift */, + 75EAFBB02B04C057005ABC6A /* CustomHUDView.swift */, ); path = Views; sourceTree = ""; @@ -2747,6 +3766,8 @@ 2A44311B22CC9B2C009BAF7F /* RootNavigation */ = { isa = PBXGroup; children = ( + 755E6DFD2A99E7A000A42870 /* DWInvitationSetupState.h */, + 755E6DFC2A99E7A000A42870 /* DWInvitationSetupState.m */, 2A9CEBAB22E1DA4000A50237 /* DWAppRootViewController.h */, 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */, 2A913E9323A3F75F006A2A59 /* DWInitialViewController.h */, @@ -2789,12 +3810,11 @@ 2A4431C722D4D92A009BAF7F /* DWCenteredTableView.m */, 2A4E531B22EA49FE00E5168A /* DWProgressView.h */, 2A4E531C22EA49FE00E5168A /* DWProgressView.m */, - 2A2CD71422F98FEA008C7BC9 /* DWShadowView.h */, - 2A2CD71522F98FEA008C7BC9 /* DWShadowView.m */, 2A74EFF623053ECE00C475EB /* DWIntrinsicTextView.h */, 2A74EFF723053ECE00C475EB /* DWIntrinsicTextView.m */, 2A0C69B12312E8A0001B8C90 /* DWWindow.h */, 2A0C69B22312E8A0001B8C90 /* DWWindow.m */, + 757514E12B15DB510026AD8E /* ShadowView.swift */, ); path = SharedViews; sourceTree = ""; @@ -2830,6 +3850,7 @@ 2A44313C22CF631E009BAF7F /* UI */ = { isa = PBXGroup; children = ( + C943B34F2A40A54500AF23C5 /* DashPay */, 4751137228DAF27300223B77 /* Assembly */, C9F42FA729DC09C6001BC549 /* Style */, 11C5F51128E5D0C500F6F135 /* CrowdNode */, @@ -2837,7 +3858,6 @@ 4751136A28D9A3BE00223B77 /* Portal */, 0F6EDFE028C8AE32000427E7 /* Coinbase */, 47AE8BB328C1305E00490F5E /* Explore Dash */, - 2AE8B63D23CDB94E0016F221 /* DashPay */, 2AB231CF2196E23200A6E7E6 /* Start */, 2A913E6C23A26469006A2A59 /* Onboarding */, 2A7A7BAF2347917800451078 /* Menu */, @@ -2859,6 +3879,7 @@ 2A44313D22CF632F009BAF7F /* Models */ = { isa = PBXGroup; children = ( + 75A8C1612AE571E30042256E /* Voting */, 47081194298CF1E3003FCA3D /* Transactions */, 11BD737F28E7354200A34022 /* CrowdNode */, 479DBDDB2995167800F30AF1 /* Tx */, @@ -2868,8 +3889,6 @@ 2A9FFDF62230FF2B00956D5F /* Uphold */, 2A11F58021947CBE00E7B563 /* DataMigration */, 2A913E6323A11DCF006A2A59 /* URL Handling */, - 2A7AF39C2482FE46001D74F9 /* DWDateFormatter.h */, - 2A7AF39D2482FE46001D74F9 /* DWDateFormatter.m */, FB2E5535218BA161003A1B7C /* DWVersionManager.h */, FB2E5536218BA161003A1B7C /* DWVersionManager.m */, FBEF3AEF21823CD800917AB6 /* DWEnvironment.h */, @@ -2880,6 +3899,7 @@ 2A8B9E7C23034AC100FF8653 /* DWAppGroupOptions.m */, BA4EECDF1B351AE200D443A3 /* DWAppGroupConstants.h */, 4762C947276CAF6800F5F42D /* DWPaymentCurrency.h */, + 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */, ); path = Models; sourceTree = ""; @@ -2959,20 +3979,16 @@ 2A4E533C22F025ED00E5168A /* Cells */ = { isa = PBXGroup; children = ( + 2A4E535322F1D0D900E5168A /* TxListTableViewCell.xib */, C9F451F22A0C933700825057 /* SyncingHeaderView.swift */, - 2A5E4544243E0595006BA067 /* RegistrationStatus */, C9F452022A0CEB5800825057 /* TxListEmptyTableViewCell.swift */, 2A4E533F22F025FE00E5168A /* TxListEmptyTableViewCell.xib */, - 2A4E534922F03A9E00E5168A /* DWFilterHeaderView.h */, - 2A4E534A22F03A9E00E5168A /* DWFilterHeaderView.m */, - 2A4E534C22F03AAC00E5168A /* DWFilterHeaderView.xib */, 474C7219298A803200475CA6 /* TxListTableViewCell.swift */, - 2A4E535322F1D0D900E5168A /* TxListTableViewCell.xib */, ); path = Cells; sourceTree = ""; }; - 2A5E4544243E0595006BA067 /* RegistrationStatus */ = { + 2A5E4544243E0595006BA067 /* Registration Status */ = { isa = PBXGroup; children = ( 4708119C298CF9E0003FCA3D /* DWDPRegistrationErrorRetryDelegate.h */, @@ -2986,7 +4002,7 @@ 2A5E4546243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m */, 2A5E4547243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib */, ); - path = RegistrationStatus; + path = "Registration Status"; sourceTree = ""; }; 2A6300402328CCAC00827825 /* LockScreen */ = { @@ -3171,155 +4187,6 @@ path = Cells; sourceTree = ""; }; - 2A7AF3192480E619001D74F9 /* Models */ = { - isa = PBXGroup; - children = ( - 2A7AF31A2480E6AD001D74F9 /* DWNotificationsModel.h */, - 2A7AF31B2480E6AD001D74F9 /* DWNotificationsModel.m */, - ); - path = Models; - sourceTree = ""; - }; - 2A7AF33D24815BCA001D74F9 /* Fetched DataSource */ = { - isa = PBXGroup; - children = ( - C3DAD26D246D46BF0001624F /* DWFetchedResultsDataSource.h */, - C3DAD26E246D46BF0001624F /* DWFetchedResultsDataSource.m */, - 2A7AF3132480DA51001D74F9 /* DWIncomingFetchedDataSource.h */, - 2A7AF3142480DA51001D74F9 /* DWIncomingFetchedDataSource.m */, - 2A7AF3162480E35A001D74F9 /* DWContactsFetchedDataSource.h */, - 2A7AF3172480E35A001D74F9 /* DWContactsFetchedDataSource.m */, - ); - path = "Fetched DataSource"; - sourceTree = ""; - }; - 2A7AF3412481A33C001D74F9 /* Views */ = { - isa = PBXGroup; - children = ( - 2A7AF34D2482369D001D74F9 /* ContentViews */, - 2A7AF34E2482374D001D74F9 /* DWDPBasicCell.h */, - 2A7AF34F2482374D001D74F9 /* DWDPBasicCell.m */, - 2A7AF35124823EC8001D74F9 /* DWDPIncomingRequestCell.h */, - 2A7AF35224823EC8001D74F9 /* DWDPIncomingRequestCell.m */, - 2A7AF35424824F97001D74F9 /* DWDPImageStatusCell.h */, - 2A7AF35524824F97001D74F9 /* DWDPImageStatusCell.m */, - 2A7AF35724824FEB001D74F9 /* DWDPTextStatusCell.h */, - 2A7AF35824824FEB001D74F9 /* DWDPTextStatusCell.m */, - 2ACCA3A624BE0C7D00DB32DE /* DWDPTxListCell.h */, - 2ACCA3A724BE0C7D00DB32DE /* DWDPTxListCell.m */, - 2A7AF38724829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.h */, - 2A7AF38824829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.m */, - 2A7AF38D2482BDF1001D74F9 /* UIFont+DWDPItem.h */, - 2A7AF38E2482BDF1001D74F9 /* UIFont+DWDPItem.m */, - ); - path = Views; - sourceTree = ""; - }; - 2A7AF34D2482369D001D74F9 /* ContentViews */ = { - isa = PBXGroup; - children = ( - 2A7AF33E2481A1B2001D74F9 /* DWDPGenericItemView.h */, - 2A7AF33F2481A1B2001D74F9 /* DWDPGenericItemView.m */, - 2A7AF34224822AE0001D74F9 /* DWDPGenericContactRequestItemView.h */, - 2A7AF34324822AE0001D74F9 /* DWDPGenericContactRequestItemView.m */, - 2A7AF34724823167001D74F9 /* DWDPGenericImageItemView.h */, - 2A7AF34824823167001D74F9 /* DWDPGenericImageItemView.m */, - 2A7AF34A24823315001D74F9 /* DWDPGenericStatusItemView.h */, - 2A7AF34B24823315001D74F9 /* DWDPGenericStatusItemView.m */, - 2A6688FB24BCB739008E10F0 /* DWDPTxItemView.h */, - 2A6688FC24BCB739008E10F0 /* DWDPTxItemView.m */, - ); - path = ContentViews; - sourceTree = ""; - }; - 2A7AF35A248256EB001D74F9 /* Protocols */ = { - isa = PBXGroup; - children = ( - 2A7AF3902482D98C001D74F9 /* Items Associated Data */, - 2A6688FA24BCB3AC008E10F0 /* DWDPBasicItem.h */, - 2A7AF35B2482577B001D74F9 /* DWDPBasicUserItem.h */, - 2A7AF35F24825991001D74F9 /* DWDPEstablishedContactItem.h */, - 2A7AF35C24825860001D74F9 /* DWDPIncomingRequestItem.h */, - 2A9D72A9249A0E7800F79CD8 /* DWDPNewIncomingRequestItem.h */, - 2AE56473249B675500CC2E80 /* DWDPNotificationItem.h */, - 2A7AF35E2482592F001D74F9 /* DWDPPendingRequestItem.h */, - 2A7AF35D248258C9001D74F9 /* DWDPRespondedRequestItem.h */, - 2ACCA3A924BE0D3600DB32DE /* DWDPTxItem.h */, - ); - path = Protocols; - sourceTree = ""; - }; - 2A7AF360248259C6001D74F9 /* Objects */ = { - isa = PBXGroup; - children = ( - 2A7AF37C2482759F001D74F9 /* Notifications */, - 2A7AF36D24826737001D74F9 /* DWDPContactObject.h */, - 2A7AF36E24826737001D74F9 /* DWDPContactObject.m */, - 2A7AF36A248266FB001D74F9 /* DWDPEstablishedContactObject.h */, - 2A7AF36B248266FB001D74F9 /* DWDPEstablishedContactObject.m */, - 2A7AF3642482666C001D74F9 /* DWDPIncomingRequestObject.h */, - 2A7AF3652482666C001D74F9 /* DWDPIncomingRequestObject.m */, - 2A9D72AA249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.h */, - 2A9D72AB249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.m */, - 2A7AF3792482756D001D74F9 /* DWDPPendingRequestObject.h */, - 2A7AF37A2482756D001D74F9 /* DWDPPendingRequestObject.m */, - 2A7AF36724826681001D74F9 /* DWDPRespondedIncomingRequestObject.h */, - 2A7AF36824826681001D74F9 /* DWDPRespondedIncomingRequestObject.m */, - 2A7AF36124825A0C001D74F9 /* DWDPUserObject.h */, - 2A7AF36224825A0C001D74F9 /* DWDPUserObject.m */, - 2ACCA3B324BF280A00DB32DE /* DWDPTxObject.h */, - 2ACCA3B424BF280A00DB32DE /* DWDPTxObject.m */, - ); - path = Objects; - sourceTree = ""; - }; - 2A7AF37C2482759F001D74F9 /* Notifications */ = { - isa = PBXGroup; - children = ( - 2A7AF37024826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.h */, - 2A7AF37124826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.m */, - 2A7AF376248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.h */, - 2A7AF377248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m */, - 2A7AF3732482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.h */, - 2A7AF3742482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m */, - 2AEC5CBC24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.h */, - 2AEC5CBD24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.m */, - ); - path = Notifications; - sourceTree = ""; - }; - 2A7AF37D248280A8001D74F9 /* Factory */ = { - isa = PBXGroup; - children = ( - 2A7AF3812482954C001D74F9 /* DWDPContactsItemsFactory.h */, - 2A7AF3822482954C001D74F9 /* DWDPContactsItemsFactory.m */, - 2A7AF37E248280CE001D74F9 /* DWDPSearchItemsFactory.h */, - 2A7AF37F248280CE001D74F9 /* DWDPSearchItemsFactory.m */, - ); - path = Factory; - sourceTree = ""; - }; - 2A7AF3902482D98C001D74F9 /* Items Associated Data */ = { - isa = PBXGroup; - children = ( - 2A7AF38A2482A22D001D74F9 /* DWDPBlockchainIdentityBackedItem.h */, - 2A7AF3912482D9BE001D74F9 /* DWDPDashpayUserBackedItem.h */, - 2A7AF3922482DA2B001D74F9 /* DWDPFriendRequestBackedItem.h */, - ); - path = "Items Associated Data"; - sourceTree = ""; - }; - 2A7AF39A2482FA7D001D74F9 /* Items */ = { - isa = PBXGroup; - children = ( - 2A7AF37D248280A8001D74F9 /* Factory */, - 2A7AF360248259C6001D74F9 /* Objects */, - 2A7AF35A248256EB001D74F9 /* Protocols */, - 2A7AF3412481A33C001D74F9 /* Views */, - ); - path = Items; - sourceTree = ""; - }; 2A7F3B18238C643D00DEA3EF /* Advanced Security */ = { isa = PBXGroup; children = ( @@ -3366,26 +4233,6 @@ path = AppleWatch; sourceTree = ""; }; - 2A885FC12449B56000B9F679 /* Children */ = { - isa = PBXGroup; - children = ( - 2A885FC52449B66500B9F679 /* DWSearchStateViewController.h */, - 2A885FC62449B66500B9F679 /* DWSearchStateViewController.m */, - 2A885FCA2449F08700B9F679 /* DWUserSearchResultViewController.h */, - 2A885FCB2449F08700B9F679 /* DWUserSearchResultViewController.m */, - ); - path = Children; - sourceTree = ""; - }; - 2A885FCD2449F34400B9F679 /* Model */ = { - isa = PBXGroup; - children = ( - 2A885FCE2449F37A00B9F679 /* DWUserSearchModel.h */, - 2A885FCF2449F37A00B9F679 /* DWUserSearchModel.m */, - ); - path = Model; - sourceTree = ""; - }; 2A8B9E3822FC7F3B00FF8653 /* Payments */ = { isa = PBXGroup; children = ( @@ -3630,19 +4477,6 @@ path = PhraseRepair; sourceTree = ""; }; - 2A951CE523D1CC6300602824 /* Profile */ = { - isa = PBXGroup; - children = ( - 2ACCA3AA24BE10C100DB32DE /* Model */, - 2ADC9D6A2462D4AD001D7C0D /* Views */, - 2AE2F0F7245C16C8001DD722 /* DWUserProfileViewController.h */, - 2AE2F0F8245C16C8001DD722 /* DWUserProfileViewController.m */, - 2A80F39324D86201003E3B1E /* DWModalUserProfileViewController.h */, - 2A80F39424D86201003E3B1E /* DWModalUserProfileViewController.m */, - ); - path = Profile; - sourceTree = ""; - }; 2A9CEBA322E1C25700A50237 /* SecureWallet */ = { isa = PBXGroup; children = ( @@ -3708,24 +4542,6 @@ path = Home; sourceTree = ""; }; - 2A9E7DCB23F6C00C00CDA1EE /* Models */ = { - isa = PBXGroup; - children = ( - 2A5BD5932451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.h */, - 2A5BD5942451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.m */, - 2A5BD59C2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.h */, - 2A5BD59D2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m */, - 2A5BD5962451DD0700688A8D /* DWMaxLengthUsernameValidationRule.h */, - 2A5BD5972451DD0700688A8D /* DWMaxLengthUsernameValidationRule.m */, - 2A5BD5902451D68200688A8D /* DWMinLengthUsernameValidationRule.h */, - 2A5BD5912451D68300688A8D /* DWMinLengthUsernameValidationRule.m */, - 2A9E7DCC23F6C01A00CDA1EE /* DWUsernameValidationRule.h */, - 2A9E7DCD23F6C01A00CDA1EE /* DWUsernameValidationRule.m */, - 2A5BD5992451F1A100688A8D /* DWUsernameValidationRule+Protected.h */, - ); - path = Models; - sourceTree = ""; - }; 2A9FFDF62230FF2B00956D5F /* Uphold */ = { isa = PBXGroup; children = ( @@ -3903,17 +4719,6 @@ path = Start; sourceTree = ""; }; - 2AB2373524488D8E0081B62C /* GlobalSearch */ = { - isa = PBXGroup; - children = ( - 2A885FCD2449F34400B9F679 /* Model */, - 2A885FC12449B56000B9F679 /* Children */, - 2AB2373624488DB80081B62C /* DWUserSearchViewController.h */, - 2AB2373724488DB80081B62C /* DWUserSearchViewController.m */, - ); - path = GlobalSearch; - sourceTree = ""; - }; 2AB3416623A8C464004E37A7 /* Views */ = { isa = PBXGroup; children = ( @@ -4033,41 +4838,6 @@ path = Views; sourceTree = ""; }; - 2AC52AD3241BB5CC00D9A829 /* Setup */ = { - isa = PBXGroup; - children = ( - 2A3CCEF6242BB0AF00300AF8 /* RegistrationCompleted */, - 2AE8B66823CF0EEA0016F221 /* UsernamePending */, - 2AE8B66123CF08C50016F221 /* ConfirmUsername */, - 2AE8B63E23CDB9570016F221 /* CreateUsername */, - 2AC52AD4241BB5FC00D9A829 /* DWDashPaySetupFlowController.h */, - 2AC52AD5241BB5FC00D9A829 /* DWDashPaySetupFlowController.m */, - ); - path = Setup; - sourceTree = ""; - }; - 2ACCA3AA24BE10C100DB32DE /* Model */ = { - isa = PBXGroup; - children = ( - 2ACCA3AF24BE3CC200DB32DE /* DataSource */, - 2ADC9D7424640A2B001D7C0D /* DWUserProfileModel.h */, - 2ADC9D7524640A2B001D7C0D /* DWUserProfileModel.m */, - ); - path = Model; - sourceTree = ""; - }; - 2ACCA3AF24BE3CC200DB32DE /* DataSource */ = { - isa = PBXGroup; - children = ( - 2ACCA3AB24BE117300DB32DE /* DWProfileTxsFetchedDataSource.h */, - 2ACCA3AC24BE117300DB32DE /* DWProfileTxsFetchedDataSource.m */, - 2ACCA3AE24BE3BF900DB32DE /* DWUserProfileDataSource.h */, - 2ACCA3B024BE3CDC00DB32DE /* DWUserProfileDataSourceObject.h */, - 2ACCA3B124BE3CDC00DB32DE /* DWUserProfileDataSourceObject.m */, - ); - path = DataSource; - sourceTree = ""; - }; 2ACCD8562319395000A96B62 /* RequestAmount */ = { isa = PBXGroup; children = ( @@ -4229,71 +4999,6 @@ path = VerifiedSuccessfully; sourceTree = ""; }; - 2AD6E54A2487A20700B52F14 /* Requests */ = { - isa = PBXGroup; - children = ( - 2AD6E5642487E18200B52F14 /* Models */, - 2AD6E55E2487E13F00B52F14 /* DWRequestsContentViewController.h */, - 2AD6E55F2487E13F00B52F14 /* DWRequestsContentViewController.m */, - 2AD6E5612487E16400B52F14 /* DWRequestsViewController.h */, - 2AD6E5622487E16400B52F14 /* DWRequestsViewController.m */, - ); - path = Requests; - sourceTree = ""; - }; - 2AD6E5542487D65200B52F14 /* DataSource */ = { - isa = PBXGroup; - children = ( - C3DAD2BB247327D90001624F /* DWContactsDataSource.h */, - 2AD6E54B2487CE0100B52F14 /* DWContactsDataSourceObject.h */, - 2AD6E54C2487CE0100B52F14 /* DWContactsDataSourceObject.m */, - C3DAD2CA24757A210001624F /* DWContactsSearchDataSourceObject.h */, - C3DAD2CB24757A210001624F /* DWContactsSearchDataSourceObject.m */, - ); - path = DataSource; - sourceTree = ""; - }; - 2AD6E5642487E18200B52F14 /* Models */ = { - isa = PBXGroup; - children = ( - 2AD6E5682487E1DB00B52F14 /* DWRequestsModel.h */, - 2AD6E5692487E1DB00B52F14 /* DWRequestsModel.m */, - ); - path = Models; - sourceTree = ""; - }; - 2ADB396624223D4800A6F898 /* Views */ = { - isa = PBXGroup; - children = ( - 2ADB396724223D9B00A6F898 /* DWDashPayAnimationView.h */, - 2ADB396824223D9B00A6F898 /* DWDashPayAnimationView.m */, - 2A3CCEFA242BB1DD00300AF8 /* DWDPAvatarView.h */, - 2A3CCEFB242BB1DD00300AF8 /* DWDPAvatarView.m */, - 2A919F9A24A4DCAD0018C9A3 /* DWDPSmallContactView.h */, - 2A919F9B24A4DCAD0018C9A3 /* DWDPSmallContactView.m */, - 2AB7303C24D0BC0400DCB420 /* UIColor+DWDashPay.h */, - 2AB7303D24D0BC0400DCB420 /* UIColor+DWDashPay.m */, - ); - path = Views; - sourceTree = ""; - }; - 2ADC9D6A2462D4AD001D7C0D /* Views */ = { - isa = PBXGroup; - children = ( - 2ADC9D6B2462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.h */, - 2ADC9D6F2462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.m */, - 2ADC9D6C2462D4AD001D7C0D /* DWUserProfileHeaderView.h */, - 2ADC9D6E2462D4AD001D7C0D /* DWUserProfileHeaderView.m */, - 2ADC9D6D2462D4AD001D7C0D /* DWUserProfileNavigationTitleView.h */, - 2ADC9D702462D4AD001D7C0D /* DWUserProfileNavigationTitleView.m */, - 2ADC9D7A24644E46001D7C0D /* DWUserProfileContactActionsCell.h */, - 2ADC9D7B24644E46001D7C0D /* DWUserProfileContactActionsCell.m */, - 2A80F3D724DC55CC003E3B1E /* DWUserProfileSendRequestCell.h */, - 2A80F3D824DC55CC003E3B1E /* DWUserProfileSendRequestCell.m */, - ); - path = Views; - sourceTree = ""; - }; 2ADF83FB23632D55008459A7 /* Shared */ = { isa = PBXGroup; children = ( @@ -4320,138 +5025,6 @@ path = Resources; sourceTree = ""; }; - 2AE8B63D23CDB94E0016F221 /* DashPay */ = { - isa = PBXGroup; - children = ( - 2AEC5CBF2497558900F4A689 /* Global */, - 2A7AF39A2482FA7D001D74F9 /* Items */, - C3CA2029247E4AC300158074 /* Notifications */, - 2ADB396624223D4800A6F898 /* Views */, - 2AC52AD3241BB5CC00D9A829 /* Setup */, - 2A951CE523D1CC6300602824 /* Profile */, - 2AE9549A23D0C4DC003612B3 /* Contacts */, - 2A56EEFE2419310C002C32F3 /* DWDashPayConstants.h */, - 2A56EEFF2419310C002C32F3 /* DWDashPayConstants.m */, - ); - path = DashPay; - sourceTree = ""; - }; - 2AE8B63E23CDB9570016F221 /* CreateUsername */ = { - isa = PBXGroup; - children = ( - 2A9E7DCB23F6C00C00CDA1EE /* Models */, - 2A1AE78B23F463FB00179A6E /* Views */, - 2AE8B63F23CDB98A0016F221 /* DWCreateUsernameViewController.h */, - 2AE8B64023CDB98A0016F221 /* DWCreateUsernameViewController.m */, - 2AE8B64223CDC0F40016F221 /* DWInputUsernameViewController.h */, - 2AE8B64323CDC0F50016F221 /* DWInputUsernameViewController.m */, - ); - path = CreateUsername; - sourceTree = ""; - }; - 2AE8B66123CF08C50016F221 /* ConfirmUsername */ = { - isa = PBXGroup; - children = ( - 2AE8B66523CF09A00016F221 /* Views */, - 2AE8B66223CF09000016F221 /* DWConfirmUsernameViewController.h */, - 2AE8B66323CF09000016F221 /* DWConfirmUsernameViewController.m */, - ); - path = ConfirmUsername; - sourceTree = ""; - }; - 2AE8B66523CF09A00016F221 /* Views */ = { - isa = PBXGroup; - children = ( - 2A56EEF92417E30F002C32F3 /* DWConfirmUsernameContentView.h */, - 2A56EEFA2417E30F002C32F3 /* DWConfirmUsernameContentView.m */, - 2A60C9442444BF3900AF72CF /* DWConfirmUsernameContentView.xib */, - ); - path = Views; - sourceTree = ""; - }; - 2AE8B66823CF0EEA0016F221 /* UsernamePending */ = { - isa = PBXGroup; - children = ( - 2AE8B66923CF0F390016F221 /* DWUsernamePendingViewController.h */, - 2AE8B66A23CF0F390016F221 /* DWUsernamePendingViewController.m */, - ); - path = UsernamePending; - sourceTree = ""; - }; - 2AE9549A23D0C4DC003612B3 /* Contacts */ = { - isa = PBXGroup; - children = ( - C3DAD2BD24747F2D0001624F /* Base */, - 2AB2373524488D8E0081B62C /* GlobalSearch */, - 2AE954A223D0C621003612B3 /* Models */, - 2AD6E54A2487A20700B52F14 /* Requests */, - 2AE9549E23D0C519003612B3 /* Views */, - C3DAD2C1247512BA0001624F /* DWBaseContactsContentViewController.h */, - C3DAD2C2247512BA0001624F /* DWBaseContactsContentViewController.m */, - 2A827B7324B729C400A42042 /* DWBaseContactsContentViewController+DWProtected.h */, - 2AE9549B23D0C4F4003612B3 /* DWBaseContactsViewController.h */, - 2AE9549C23D0C4F4003612B3 /* DWBaseContactsViewController.m */, - 2AD6E55B2487DACC00B52F14 /* DWBaseContactsViewController+DWProtected.h */, - 2AD6E5552487D8C000B52F14 /* DWContactsContentViewController.h */, - 2AD6E5562487D8C000B52F14 /* DWContactsContentViewController.m */, - 2AD6E5582487D9AF00B52F14 /* DWContactsViewController.h */, - 2AD6E5592487D9AF00B52F14 /* DWContactsViewController.m */, - ); - path = Contacts; - sourceTree = ""; - }; - 2AE9549E23D0C519003612B3 /* Views */ = { - isa = PBXGroup; - children = ( - C3DAD2C6247538A90001624F /* DWTitleActionHeaderView.h */, - C3DAD2C5247538A90001624F /* DWTitleActionHeaderView.m */, - C3DAD2C7247538AA0001624F /* DWTitleActionHeaderView.xib */, - C3DAD2D32476886D0001624F /* DWContactsSearchInfoHeaderView.h */, - C3DAD2D42476886D0001624F /* DWContactsSearchInfoHeaderView.m */, - ); - path = Views; - sourceTree = ""; - }; - 2AE954A223D0C621003612B3 /* Models */ = { - isa = PBXGroup; - children = ( - 2AD6E5542487D65200B52F14 /* DataSource */, - 2A7AF33D24815BCA001D74F9 /* Fetched DataSource */, - 2A951CE223D1B92C00602824 /* DWBaseContactsModel.h */, - 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */, - 2AD6E54E2487D45F00B52F14 /* DWBaseContactsModel+DWProtected.h */, - 2AD6E5512487D50200B52F14 /* DWContactsModel.h */, - 2AD6E5522487D50200B52F14 /* DWContactsModel.m */, - C3DAD2C4247534820001624F /* DWContactsSortModeProtocol.h */, - ); - path = Models; - sourceTree = ""; - }; - 2AEC5CBF2497558900F4A689 /* Global */ = { - isa = PBXGroup; - children = ( - 2AEC5CC42497A90A00F4A689 /* Notifications */, - 2A7AF3972482E32E001D74F9 /* DWDashPayContactsActions.h */, - 2A7AF3982482E32E001D74F9 /* DWDashPayContactsActions.m */, - 2AEC5CC0249755BB00F4A689 /* DWDashPayContactsUpdater.h */, - 2AEC5CC1249755BB00F4A689 /* DWDashPayContactsUpdater.m */, - ); - path = Global; - sourceTree = ""; - }; - 2AEC5CC42497A90A00F4A689 /* Notifications */ = { - isa = PBXGroup; - children = ( - 2A7AF32624814A17001D74F9 /* DWNotificationsData.h */, - 2A7AF32724814A17001D74F9 /* DWNotificationsData.m */, - 2AEC5CB92494045C00F4A689 /* DWNotificationsFetchedDataSource.h */, - 2AEC5CBA2494045C00F4A689 /* DWNotificationsFetchedDataSource.m */, - 2AEC5CB32493D87D00F4A689 /* DWNotificationsProvider.h */, - 2AEC5CB42493D87D00F4A689 /* DWNotificationsProvider.m */, - ); - path = Notifications; - sourceTree = ""; - }; 2AFCB9B023BDEED900FF59A6 /* Send */ = { isa = PBXGroup; children = ( @@ -4903,6 +5476,7 @@ 47A2A2E3293DF63F00938DB7 /* DTOs */ = { isa = PBXGroup; children = ( + 75CED09C2ACFD0E00095F10C /* Deposit */, 0F6EDFB028C896BC000427E7 /* Base */, 4751CACB2970004500F63AC4 /* Account */, 4751CACA2970003D00F63AC4 /* Exchange Rates */, @@ -5387,9 +5961,80 @@ path = Networking; sourceTree = ""; }; + 7502A4852AE401DA00ACDDD3 /* Voting */ = { + isa = PBXGroup; + children = ( + 754495DB2AE91AF700492817 /* Cells */, + 7502A4862AE401EF00ACDDD3 /* UsernameVotingViewController.swift */, + 7514E4EB2AF27E5900A0466F /* VotingHeaderView.swift */, + 7514E4E72AF233CF00A0466F /* VotingFiltersViewController.swift */, + 75F990812AFD1065006759AB /* UsernameRequestDetailsViewController.swift */, + 75C1F09D2AFF675400FE675E /* EnterVotingKeyViewController.swift */, + 7573C2DE2B00C05900F4C347 /* CastVoteViewController.swift */, + 75D66D322B05E7AE00A8DDA6 /* QuickVoteViewController.swift */, + 75A8C1682AE6A1AC0042256E /* VotingViewModel.swift */, + 753FDBED2AECF52B0005EEC3 /* UsernameVoting.storyboard */, + 753FDBEB2AECF4CC0005EEC3 /* VotingHeaderView.xib */, + ); + path = Voting; + sourceTree = ""; + }; + 754495DB2AE91AF700492817 /* Cells */ = { + isa = PBXGroup; + children = ( + 754495DC2AE91B6300492817 /* GroupedRequestCell.swift */, + 754495DE2AE91D3500492817 /* UsernameRequestCell.swift */, + 7573C2E02B01103900F4C347 /* VotingFilterItemSelectableCell.swift */, + 7573C2E22B01105F00F4C347 /* MasternodeIPCell.swift */, + ); + path = Cells; + sourceTree = ""; + }; + 75889B742AD296D500C17F5D /* CoinJoin */ = { + isa = PBXGroup; + children = ( + 75889B752AD296E700C17F5D /* CoinJoinInfoViewController.swift */, + 751B61C72AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift */, + 75889B812AD2D7F800C17F5D /* CoinJoin.storyboard */, + 75C1F0442AE26AC0006929CA /* CoinJoinViewModel.swift */, + ); + path = CoinJoin; + sourceTree = ""; + }; + 75A8C1612AE571E30042256E /* Voting */ = { + isa = PBXGroup; + children = ( + 75A8C1622AE571E90042256E /* DAO */, + 75A8C1662AE5734A0042256E /* UsernameRequest.swift */, + 753FDBE92AEA422F0005EEC3 /* VotingPrefs.swift */, + 7514E4E92AF2351F00A0466F /* VotingFiltersModel.swift */, + 7573C2E42B01120B00F4C347 /* MasternodeKey.swift */, + 757514DF2B15D8DE0026AD8E /* VotingConstants.swift */, + ); + path = Voting; + sourceTree = ""; + }; + 75A8C1622AE571E90042256E /* DAO */ = { + isa = PBXGroup; + children = ( + 75A8C1632AE5725C0042256E /* UsernameRequestsDAO.swift */, + ); + path = DAO; + sourceTree = ""; + }; + 75CED09C2ACFD0E00095F10C /* Deposit */ = { + isa = PBXGroup; + children = ( + 75CED09D2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift */, + 75CED09F2ACFED200095F10C /* CoinbaseDepositResponse.swift */, + ); + path = Deposit; + sourceTree = ""; + }; 75D5F3B5191EC270004AB296 = { isa = PBXGroup; children = ( + C9D2C9552A320AC100D15901 /* DashPay */, 2ADF83FB23632D55008459A7 /* Shared */, 75D5F3C7191EC270004AB296 /* DashWallet */, BAE12BE81B2DEE7F00895CC5 /* TodayExtension */, @@ -5412,6 +6057,7 @@ BA913BDE1BD57E4D005A7C0E /* WatchApp.app */, BA913BEA1BD57E4D005A7C0E /* WatchApp Extension.appex */, 2A4663002279DC2F0027533B /* DashWalletScreenshotsUITests.xctest */, + C9D2C9532A320AA000D15901 /* dashpay.app */, ); name = Products; sourceTree = ""; @@ -5448,8 +6094,9 @@ 02771AC5DDCA0A1749C6A05B /* libPods-TodayExtension.a */, 07283055DE20FE578E399BE7 /* libPods-WatchApp.a */, C47D5A9D319D41B450A9B96B /* libPods-WatchApp Extension.a */, - 982607F21196681DAC51A074 /* libPods-dashwallet.a */, 0CDD4C961516ED20BC9F01FA /* libPods-DashWalletScreenshotsUITests.a */, + CE89DF632BC53160BB8FBED1 /* libPods-dashpay.a */, + 17427514C25A58AB4AEDF999 /* libPods-dashwallet.a */, ); name = Frameworks; sourceTree = ""; @@ -5499,6 +6146,22 @@ path = DashWalletTests; sourceTree = ""; }; + 75D656182B0792AB00D1A902 /* Usernames */ = { + isa = PBXGroup; + children = ( + 75D6561B2B07935000D1A902 /* WelcomeToDashpayViewController.swift */, + 75A664D72B09F1EA007EFD16 /* VotingInfoViewController.swift */, + 75B2F45C2B0B1EC1004C071A /* RequestUsernameViewController.swift */, + 757118DB2B0F189D000AE391 /* VerifyIdenityViewController.swift */, + 75C83B512B11B62400C33660 /* ConfirmRequestViewController.swift */, + 751A572F2B132FED00EF4925 /* RequestDetailsViewController.swift */, + 755A22BC2B1385FD001F170D /* IconAttributedText.swift */, + 7565D5942B08B35F0092C9BA /* RequestUsernameViewModel.swift */, + 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */, + ); + path = Usernames; + sourceTree = ""; + }; BA913BDF1BD57E4D005A7C0E /* WatchApp */ = { isa = PBXGroup; children = ( @@ -5544,69 +6207,1032 @@ path = TodayExtension; sourceTree = ""; }; - C3CA2029247E4AC300158074 /* Notifications */ = { + C3DAD265246AA6CF0001624F /* ScreenshotWarning */ = { + isa = PBXGroup; + children = ( + C3DAD266246AA6F10001624F /* DWScreenshotWarningViewController.h */, + C3DAD267246AA6F10001624F /* DWScreenshotWarningViewController.m */, + ); + path = ScreenshotWarning; + sourceTree = ""; + }; + C909615629F29C7500002D82 /* Cell */ = { + isa = PBXGroup; + children = ( + C909615829F29C9200002D82 /* KeysOverviewCell.swift */, + ); + path = Cell; + sourceTree = ""; + }; + C909615729F29C7E00002D82 /* Model */ = { + isa = PBXGroup; + children = ( + C909614C29EFF7D600002D82 /* WalletKeysOverviewModel.swift */, + ); + path = Model; + sourceTree = ""; + }; + C92963BB2AA0AFF800B96B22 /* Portal */ = { + isa = PBXGroup; + children = ( + C9FAABB62AB799AE00878224 /* UpholdPortalModel.swift */, + 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */, + ); + path = Portal; + sourceTree = ""; + }; + C943B2B22A408CAF00AF23C5 /* Profile */ = { + isa = PBXGroup; + children = ( + C943B2CF2A408CEC00AF23C5 /* EditProfile */, + C943B2B92A408CEC00AF23C5 /* UserProfile */, + C943B2C92A408CEC00AF23C5 /* UserProfileModalQR */, + ); + path = Profile; + sourceTree = ""; + }; + C943B2B92A408CEC00AF23C5 /* UserProfile */ = { + isa = PBXGroup; + children = ( + C943B2BA2A408CEC00AF23C5 /* DWUpdatingUserProfileView.h */, + C943B2BB2A408CEC00AF23C5 /* DWCurrentUserProfileView.h */, + C943B2BC2A408CEC00AF23C5 /* DWErrorUpdatingUserProfileView.m */, + C943B2BE2A408CEC00AF23C5 /* DWUserProfileContainerView.h */, + C943B2BF2A408CEC00AF23C5 /* Models */, + C943B2C42A408CEC00AF23C5 /* DWErrorUpdatingUserProfileView.h */, + C943B2C52A408CEC00AF23C5 /* DWCurrentUserProfileView.m */, + C943B2C62A408CEC00AF23C5 /* DWUpdatingUserProfileView.m */, + C943B2C82A408CEC00AF23C5 /* DWUserProfileContainerView.m */, + 757514E42B1735370026AD8E /* DPWelcomeMenuView.swift */, + ); + path = UserProfile; + sourceTree = ""; + }; + C943B2BF2A408CEC00AF23C5 /* Models */ = { + isa = PBXGroup; + children = ( + C943B2C02A408CEC00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.h */, + C943B2C12A408CEC00AF23C5 /* DWDPUpdateProfileModel.h */, + C943B2C22A408CEC00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.m */, + C943B2C32A408CEC00AF23C5 /* DWDPUpdateProfileModel.m */, + ); + path = Models; + sourceTree = ""; + }; + C943B2C92A408CEC00AF23C5 /* UserProfileModalQR */ = { + isa = PBXGroup; + children = ( + C943B2CA2A408CEC00AF23C5 /* DWUserProfileModalQRContentView.h */, + C943B2CB2A408CEC00AF23C5 /* DWDWUserProfileModalQRContentView.h */, + C943B2CC2A408CEC00AF23C5 /* DWUserProfileModalQRViewController.h */, + C943B2CD2A408CEC00AF23C5 /* DWUserProfileModalQRContentView.m */, + C943B2CE2A408CEC00AF23C5 /* DWUserProfileModalQRViewController.m */, + ); + path = UserProfileModalQR; + sourceTree = ""; + }; + C943B2CF2A408CEC00AF23C5 /* EditProfile */ = { + isa = PBXGroup; + children = ( + C943B2D02A408CEC00AF23C5 /* DWCropAvatarViewController.h */, + C943B2D12A408CEC00AF23C5 /* DWEditProfileViewController.h */, + C943B2D22A408CEC00AF23C5 /* DWRootEditProfileViewController.h */, + C943B2D32A408CEC00AF23C5 /* Imgur */, + C943B2DA2A408CEC00AF23C5 /* Utils */, + C943B2DD2A408CEC00AF23C5 /* DWRootEditProfileViewController.m */, + C943B2DE2A408CEC00AF23C5 /* DWEditProfileViewController.m */, + C943B2DF2A408CEC00AF23C5 /* DWCropAvatarViewController.m */, + C943B2E02A408CEC00AF23C5 /* Avatar */, + C943B2E62A408CEC00AF23C5 /* External Sources */, + C943B2F52A408CEC00AF23C5 /* SaveAlert */, + C943B2FA2A408CEC00AF23C5 /* Views */, + C943B30E2A408CEC00AF23C5 /* Upload */, + ); + path = EditProfile; + sourceTree = ""; + }; + C943B2D32A408CEC00AF23C5 /* Imgur */ = { + isa = PBXGroup; + children = ( + C943B2D42A408CEC00AF23C5 /* DWImgurInfoChildView.m */, + C943B2D52A408CEC00AF23C5 /* DWImgurInfoViewController.h */, + C943B2D62A408CEC00AF23C5 /* DWImgurItemView.m */, + C943B2D72A408CEC00AF23C5 /* DWImgurInfoViewController.m */, + C943B2D82A408CEC00AF23C5 /* DWImgurInfoChildView.h */, + C943B2D92A408CEC00AF23C5 /* DWImgurItemView.h */, + ); + path = Imgur; + sourceTree = ""; + }; + C943B2DA2A408CEC00AF23C5 /* Utils */ = { + isa = PBXGroup; + children = ( + C943B2DB2A408CEC00AF23C5 /* DWFaceDetector.h */, + C943B2DC2A408CEC00AF23C5 /* DWFaceDetector.m */, + ); + path = Utils; + sourceTree = ""; + }; + C943B2E02A408CEC00AF23C5 /* Avatar */ = { + isa = PBXGroup; + children = ( + C943B2E12A408CEC00AF23C5 /* DWAvatarEditSelectorViewController.m */, + C943B2E22A408CEC00AF23C5 /* DWAvatarEditSelectorViewController.h */, + C943B2E32A408CEC00AF23C5 /* Views */, + ); + path = Avatar; + sourceTree = ""; + }; + C943B2E32A408CEC00AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B2E42A408CEC00AF23C5 /* DWAvatarEditSelectorContentView.m */, + C943B2E52A408CEC00AF23C5 /* DWAvatarEditSelectorContentView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B2E62A408CEC00AF23C5 /* External Sources */ = { + isa = PBXGroup; + children = ( + C943B2E72A408CEC00AF23C5 /* Skeleton */, + C943B2F12A408CEC00AF23C5 /* DWAvatarGravatarViewController.h */, + C943B2F22A408CEC00AF23C5 /* DWAvatarPublicURLViewController.m */, + C943B2F32A408CEC00AF23C5 /* DWAvatarGravatarViewController.m */, + C943B2F42A408CEC00AF23C5 /* DWAvatarPublicURLViewController.h */, + ); + path = "External Sources"; + sourceTree = ""; + }; + C943B2E72A408CEC00AF23C5 /* Skeleton */ = { + isa = PBXGroup; + children = ( + C943B2E82A408CEC00AF23C5 /* DWExternalSourceViewController.h */, + C943B2E92A408CEC00AF23C5 /* DWExternalSourceViewController.m */, + C943B2EA2A408CEC00AF23C5 /* Views */, + ); + path = Skeleton; + sourceTree = ""; + }; + C943B2EA2A408CEC00AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B2EB2A408CEC00AF23C5 /* DWAvatarExternalLoadingView.h */, + C943B2EC2A408CEC00AF23C5 /* DWAvatarExternalSourceView.m */, + C943B2ED2A408CEC00AF23C5 /* DWAvatarExternalSourceConfig.h */, + C943B2EE2A408CEC00AF23C5 /* DWAvatarExternalLoadingView.m */, + C943B2EF2A408CEC00AF23C5 /* DWAvatarExternalSourceConfig.m */, + C943B2F02A408CEC00AF23C5 /* DWAvatarExternalSourceView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B2F52A408CEC00AF23C5 /* SaveAlert */ = { + isa = PBXGroup; + children = ( + C943B2F62A408CEC00AF23C5 /* DWSaveAlertChildView.h */, + C943B2F72A408CEC00AF23C5 /* DWSaveAlertViewController.m */, + C943B2F82A408CEC00AF23C5 /* DWSaveAlertChildView.m */, + C943B2F92A408CEC00AF23C5 /* DWSaveAlertViewController.h */, + ); + path = SaveAlert; + sourceTree = ""; + }; + C943B2FA2A408CEC00AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B2FB2A408CEC00AF23C5 /* CellModels */, + C943B3062A408CEC00AF23C5 /* DWEditProfileBaseCell.h */, + C943B3072A408CEC00AF23C5 /* DWEditProfileTextViewCell.m */, + C943B3082A408CEC00AF23C5 /* DWEditProfileAvatarView.h */, + C943B3092A408CEC00AF23C5 /* DWEditProfileTextFieldCell.h */, + C943B30A2A408CEC00AF23C5 /* DWEditProfileTextViewCell.h */, + C943B30B2A408CEC00AF23C5 /* DWEditProfileBaseCell.m */, + C943B30C2A408CEC00AF23C5 /* DWEditProfileTextFieldCell.m */, + C943B30D2A408CEC00AF23C5 /* DWEditProfileAvatarView.m */, + ); + path = Views; + sourceTree = ""; + }; + C943B2FB2A408CEC00AF23C5 /* CellModels */ = { + isa = PBXGroup; + children = ( + C943B2FC2A408CEC00AF23C5 /* DWProfileAboutCellModel.m */, + C943B2FD2A408CEC00AF23C5 /* DWProfileDisplayNameCellModel.m */, + C943B2FE2A408CEC00AF23C5 /* Base */, + C943B3042A408CEC00AF23C5 /* DWProfileDisplayNameCellModel.h */, + C943B3052A408CEC00AF23C5 /* DWProfileAboutCellModel.h */, + ); + path = CellModels; + sourceTree = ""; + }; + C943B2FE2A408CEC00AF23C5 /* Base */ = { + isa = PBXGroup; + children = ( + C943B2FF2A408CEC00AF23C5 /* DWTextViewFormCellModel.h */, + C943B3002A408CEC00AF23C5 /* DWTextFieldFormCellModel.m */, + C943B3012A408CEC00AF23C5 /* DWTextFieldFormCellModel.h */, + C943B3022A408CEC00AF23C5 /* DWTextViewFormCellModel.m */, + C943B3032A408CEC00AF23C5 /* DWTextInputFormTableViewCell.h */, + ); + path = Base; + sourceTree = ""; + }; + C943B30E2A408CEC00AF23C5 /* Upload */ = { + isa = PBXGroup; + children = ( + C943B30F2A408CEC00AF23C5 /* DWUploadAvatarViewController.m */, + C943B3102A408CEC00AF23C5 /* DWUploadAvatarModel.m */, + C943B3112A408CEC00AF23C5 /* DWHourGlassAnimationView.h */, + C943B3122A408CEC00AF23C5 /* DWUploadAvatarChildView.h */, + C943B3132A408CEC00AF23C5 /* DWUploadAvatarViewController.h */, + C943B3142A408CEC00AF23C5 /* DWUploadAvatarModel.h */, + C943B3152A408CEC00AF23C5 /* DWUploadAvatarChildView.m */, + C943B3162A408CEC00AF23C5 /* DWHourGlassAnimationView.m */, + ); + path = Upload; + sourceTree = ""; + }; + C943B33D2A408DB900AF23C5 /* Menu */ = { + isa = PBXGroup; + children = ( + C943B33E2A408E0500AF23C5 /* DWMainMenuViewController+DashPay.h */, + C943B33F2A408E5500AF23C5 /* DWMainMenuViewController+DashPay.m */, + ); + path = Menu; + sourceTree = ""; + }; + C943B3482A40A4C500AF23C5 /* InfoPopup */ = { + isa = PBXGroup; + children = ( + C943B3492A40A4C500AF23C5 /* DWInfoPopupContentView.h */, + C943B34A2A40A4C500AF23C5 /* DWInfoPopupViewController.m */, + C943B34B2A40A4C500AF23C5 /* DWInfoPopupContentView.m */, + C943B34C2A40A4C500AF23C5 /* DWInfoPopupViewController.h */, + ); + path = InfoPopup; + sourceTree = ""; + }; + C943B34F2A40A54500AF23C5 /* DashPay */ = { + isa = PBXGroup; + children = ( + C943B3502A40A54500AF23C5 /* Contacts */, + C943B3C82A40A54600AF23C5 /* DWDashPayConstants.h */, + C943B3C92A40A54600AF23C5 /* Welcome */, + C943B3E82A40A54600AF23C5 /* Profile */, + C943B4032A40A54600AF23C5 /* Items */, + C943B44B2A40A54600AF23C5 /* Invites */, + 7502A4852AE401DA00ACDDD3 /* Voting */, + 75D656182B0792AB00D1A902 /* Usernames */, + 75889B742AD296D500C17F5D /* CoinJoin */, + C943B47F2A40A54600AF23C5 /* Views */, + C943B48D2A40A54600AF23C5 /* DWDashPayConstants.m */, + C943B48E2A40A54600AF23C5 /* Global */, + C943B49E2A40A54600AF23C5 /* Notifications */, + ); + path = DashPay; + sourceTree = ""; + }; + C943B3502A40A54500AF23C5 /* Contacts */ = { + isa = PBXGroup; + children = ( + C943B3512A40A54500AF23C5 /* DWBaseContactsViewController+DWProtected.h */, + C943B3522A40A54500AF23C5 /* DWContactsPlaceholderViewController.m */, + C943B3532A40A54500AF23C5 /* DWRootContactsViewController.h */, + C943B3542A40A54500AF23C5 /* DWContactsViewController.m */, + C943B3552A40A54500AF23C5 /* DWBaseContactsContentViewController.m */, + C943B3562A40A54500AF23C5 /* Placeholders */, + C943B35B2A40A54500AF23C5 /* DWContactsContentViewController.m */, + C943B35C2A40A54500AF23C5 /* DWBaseContactsViewController.m */, + C943B35D2A40A54500AF23C5 /* Models */, + C943B3712A40A54600AF23C5 /* Requests */, + C943B3792A40A54600AF23C5 /* DWRootContactsViewController.m */, + C943B37A2A40A54600AF23C5 /* DWBaseContactsContentViewController+DWProtected.h */, + C943B37B2A40A54600AF23C5 /* DWContactsPlaceholderViewController.h */, + C943B37C2A40A54600AF23C5 /* DWContactsContentViewController.h */, + C943B37D2A40A54600AF23C5 /* DWBaseContactsContentViewController.h */, + C943B37E2A40A54600AF23C5 /* DWContactsViewController.h */, + C943B37F2A40A54600AF23C5 /* Views */, + C943B38D2A40A54600AF23C5 /* Base */, + C943B3902A40A54600AF23C5 /* DWBaseContactsViewController.h */, + C943B3912A40A54600AF23C5 /* GlobalSearch */, + ); + path = Contacts; + sourceTree = ""; + }; + C943B3562A40A54500AF23C5 /* Placeholders */ = { + isa = PBXGroup; + children = ( + C943B3572A40A54500AF23C5 /* DWNoContactsViewController.m */, + C943B3582A40A54500AF23C5 /* DWInvitationSuggestionView.m */, + C943B3592A40A54500AF23C5 /* DWNoContactsViewController.h */, + C943B35A2A40A54500AF23C5 /* DWInvitationSuggestionView.h */, + ); + path = Placeholders; + sourceTree = ""; + }; + C943B35D2A40A54500AF23C5 /* Models */ = { + isa = PBXGroup; + children = ( + C943B35E2A40A54500AF23C5 /* DataSource */, + C943B3642A40A54500AF23C5 /* Fetched DataSource */, + C943B36B2A40A54600AF23C5 /* DWBaseContactsModel+DWProtected.h */, + C943B36C2A40A54600AF23C5 /* DWBaseContactsModel.h */, + C943B36D2A40A54600AF23C5 /* DWContactsModel.h */, + C943B36E2A40A54600AF23C5 /* DWContactsSortModeProtocol.h */, + C943B36F2A40A54600AF23C5 /* DWBaseContactsModel.m */, + C943B3702A40A54600AF23C5 /* DWContactsModel.m */, + ); + path = Models; + sourceTree = ""; + }; + C943B35E2A40A54500AF23C5 /* DataSource */ = { + isa = PBXGroup; + children = ( + C943B35F2A40A54500AF23C5 /* DWContactsDataSourceObject.m */, + C943B3602A40A54500AF23C5 /* DWContactsSearchDataSourceObject.m */, + C943B3612A40A54500AF23C5 /* DWContactsSearchDataSourceObject.h */, + C943B3622A40A54500AF23C5 /* DWContactsDataSource.h */, + C943B3632A40A54500AF23C5 /* DWContactsDataSourceObject.h */, + ); + path = DataSource; + sourceTree = ""; + }; + C943B3642A40A54500AF23C5 /* Fetched DataSource */ = { + isa = PBXGroup; + children = ( + C943B3652A40A54500AF23C5 /* DWIncomingFetchedDataSource.h */, + C943B3662A40A54500AF23C5 /* DWContactsFetchedDataSource.h */, + C943B3672A40A54500AF23C5 /* DWFetchedResultsDataSource.h */, + C943B3682A40A54500AF23C5 /* DWIncomingFetchedDataSource.m */, + C943B3692A40A54600AF23C5 /* DWContactsFetchedDataSource.m */, + C943B36A2A40A54600AF23C5 /* DWFetchedResultsDataSource.m */, + ); + path = "Fetched DataSource"; + sourceTree = ""; + }; + C943B3712A40A54600AF23C5 /* Requests */ = { + isa = PBXGroup; + children = ( + C943B3722A40A54600AF23C5 /* DWRequestsContentViewController.m */, + C943B3732A40A54600AF23C5 /* Models */, + C943B3762A40A54600AF23C5 /* DWRequestsViewController.h */, + C943B3772A40A54600AF23C5 /* DWRequestsContentViewController.h */, + C943B3782A40A54600AF23C5 /* DWRequestsViewController.m */, + ); + path = Requests; + sourceTree = ""; + }; + C943B3732A40A54600AF23C5 /* Models */ = { + isa = PBXGroup; + children = ( + C943B3742A40A54600AF23C5 /* DWRequestsModel.m */, + C943B3752A40A54600AF23C5 /* DWRequestsModel.h */, + ); + path = Models; + sourceTree = ""; + }; + C943B37F2A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B3802A40A54600AF23C5 /* DWGlobalMatchHeaderView.m */, + C943B3812A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m */, + C943B3822A40A54600AF23C5 /* DWContactsSearchPlaceholderView.m */, + C943B3832A40A54600AF23C5 /* DWTitleActionHeaderView.h */, + C943B3842A40A54600AF23C5 /* BaseCollectionReusableView.h */, + C943B3852A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m */, + C943B3862A40A54600AF23C5 /* DWGlobalMatchHeaderView.h */, + C943B3872A40A54600AF23C5 /* DWTitleActionHeaderView.xib */, + C943B3882A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.h */, + C943B3892A40A54600AF23C5 /* BaseCollectionReusableView.m */, + C943B38A2A40A54600AF23C5 /* DWTitleActionHeaderView.m */, + C943B38B2A40A54600AF23C5 /* DWContactsSearchPlaceholderView.h */, + C943B38C2A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B38D2A40A54600AF23C5 /* Base */ = { + isa = PBXGroup; + children = ( + C943B38E2A40A54600AF23C5 /* DWSearchViewController.h */, + C943B38F2A40A54600AF23C5 /* DWSearchViewController.m */, + ); + path = Base; + sourceTree = ""; + }; + C943B3912A40A54600AF23C5 /* GlobalSearch */ = { + isa = PBXGroup; + children = ( + C943B3922A40A54600AF23C5 /* DWUserSearchViewController.h */, + C943B3932A40A54600AF23C5 /* Model */, + C943B3962A40A54600AF23C5 /* DWUserSearchViewController.m */, + C943B3972A40A54600AF23C5 /* Children */, + ); + path = GlobalSearch; + sourceTree = ""; + }; + C943B3932A40A54600AF23C5 /* Model */ = { + isa = PBXGroup; + children = ( + C943B3942A40A54600AF23C5 /* DWUserSearchModel.m */, + C943B3952A40A54600AF23C5 /* DWUserSearchModel.h */, + ); + path = Model; + sourceTree = ""; + }; + C943B3972A40A54600AF23C5 /* Children */ = { + isa = PBXGroup; + children = ( + C943B3982A40A54600AF23C5 /* DWUserSearchResultViewController.h */, + C943B3992A40A54600AF23C5 /* DWSearchStateViewController.h */, + C943B39A2A40A54600AF23C5 /* DWUserSearchResultViewController.m */, + C943B39B2A40A54600AF23C5 /* DWSearchStateViewController.m */, + ); + path = Children; + sourceTree = ""; + }; + C943B3C92A40A54600AF23C5 /* Welcome */ = { + isa = PBXGroup; + children = ( + C943B3CA2A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.m */, + C943B3CB2A40A54600AF23C5 /* DWInvitationFlowViewController.m */, + C943B3CC2A40A54600AF23C5 /* DWDPWelcomeViewController.m */, + C943B3CD2A40A54600AF23C5 /* DWDPWelcomePageViewController.m */, + C943B3CE2A40A54600AF23C5 /* GetStarted */, + C943B3D72A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.h */, + C943B3D82A40A54600AF23C5 /* DWInvitationFlowViewController.h */, + C943B3D92A40A54600AF23C5 /* DWDPWelcomePageViewController.h */, + C943B3DA2A40A54600AF23C5 /* DWDPWelcomeViewController.h */, + C943B3DB2A40A54600AF23C5 /* Views */, + ); + path = Welcome; + sourceTree = ""; + }; + C943B3CE2A40A54600AF23C5 /* GetStarted */ = { + isa = PBXGroup; + children = ( + C943B3CF2A40A54600AF23C5 /* DWGetStartedContentViewController.m */, + C943B3D02A40A54600AF23C5 /* DWGetStarted.h */, + C943B3D12A40A54600AF23C5 /* DWGetStartedViewController.m */, + C943B3D22A40A54600AF23C5 /* DWGetStartedContentViewController.h */, + C943B3D32A40A54600AF23C5 /* DWGetStartedViewController.h */, + C943B3D42A40A54600AF23C5 /* Views */, + ); + path = GetStarted; + sourceTree = ""; + }; + C943B3D42A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B3D52A40A54600AF23C5 /* DWGetStartedItemView.h */, + C943B3D62A40A54600AF23C5 /* DWGetStartedItemView.m */, + ); + path = Views; + sourceTree = ""; + }; + C943B3DB2A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B3DC2A40A54600AF23C5 /* DWPassthroughStackView.h */, + C943B3DD2A40A54600AF23C5 /* DWPassthroughView.m */, + C943B3DE2A40A54600AF23C5 /* DWPassthroughStackView.m */, + C943B3DF2A40A54600AF23C5 /* DWPassthroughView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B3E82A40A54600AF23C5 /* Profile */ = { + isa = PBXGroup; + children = ( + C943B3E92A40A54600AF23C5 /* DWUserProfileViewController.h */, + C943B3EA2A40A54600AF23C5 /* DWModalUserProfileViewController.h */, + C943B3EB2A40A54600AF23C5 /* Model */, + C943B3F42A40A54600AF23C5 /* DWUserProfileViewController.m */, + C943B3F52A40A54600AF23C5 /* DWModalUserProfileViewController.m */, + C943B3F62A40A54600AF23C5 /* Views */, + ); + path = Profile; + sourceTree = ""; + }; + C943B3EB2A40A54600AF23C5 /* Model */ = { + isa = PBXGroup; + children = ( + C943B3EC2A40A54600AF23C5 /* DataSource */, + C943B3F22A40A54600AF23C5 /* DWUserProfileModel.h */, + C943B3F32A40A54600AF23C5 /* DWUserProfileModel.m */, + ); + path = Model; + sourceTree = ""; + }; + C943B3EC2A40A54600AF23C5 /* DataSource */ = { + isa = PBXGroup; + children = ( + C943B3ED2A40A54600AF23C5 /* DWUserProfileDataSource.h */, + C943B3EE2A40A54600AF23C5 /* DWUserProfileDataSourceObject.m */, + C943B3EF2A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.m */, + C943B3F02A40A54600AF23C5 /* DWUserProfileDataSourceObject.h */, + C943B3F12A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.h */, + ); + path = DataSource; + sourceTree = ""; + }; + C943B3F62A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B3F72A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.h */, + C943B3F82A40A54600AF23C5 /* DWUserProfileSendRequestCell.m */, + C943B3F92A40A54600AF23C5 /* DWUserProfileHeaderView.h */, + C943B3FA2A40A54600AF23C5 /* DWPendingContactInfoView.m */, + C943B3FB2A40A54600AF23C5 /* DWUserProfileContactActionsCell.h */, + C943B3FC2A40A54600AF23C5 /* DWUserProfileNavigationTitleView.h */, + C943B3FD2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m */, + C943B3FE2A40A54600AF23C5 /* DWUserProfileHeaderView.m */, + C943B3FF2A40A54600AF23C5 /* DWUserProfileSendRequestCell.h */, + C943B4002A40A54600AF23C5 /* DWPendingContactInfoView.h */, + C943B4012A40A54600AF23C5 /* DWUserProfileNavigationTitleView.m */, + C943B4022A40A54600AF23C5 /* DWUserProfileContactActionsCell.m */, + ); + path = Views; + sourceTree = ""; + }; + C943B4032A40A54600AF23C5 /* Items */ = { + isa = PBXGroup; + children = ( + C943B4042A40A54600AF23C5 /* Objects */, + C943B41E2A40A54600AF23C5 /* Views */, + C943B4382A40A54600AF23C5 /* Protocols */, + C943B4462A40A54600AF23C5 /* Factory */, + ); + path = Items; + sourceTree = ""; + }; + C943B4042A40A54600AF23C5 /* Objects */ = { + isa = PBXGroup; + children = ( + C943B4052A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m */, + C943B4062A40A54600AF23C5 /* DWDPContactObject.h */, + C943B4072A40A54600AF23C5 /* DWDPEstablishedContactObject.m */, + C943B4082A40A54600AF23C5 /* DWDPPendingRequestObject.h */, + C943B4092A40A54600AF23C5 /* DWDPUserObject.m */, + C943B40A2A40A54600AF23C5 /* DWDPTxObject.h */, + C943B40B2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.h */, + C943B40C2A40A54600AF23C5 /* DWDPIncomingRequestObject.m */, + C943B40D2A40A54600AF23C5 /* DWDPContactObject.m */, + C943B40E2A40A54600AF23C5 /* DWDPNewIncomingRequestObject.h */, + C943B40F2A40A54600AF23C5 /* DWDPEstablishedContactObject.h */, + C943B4102A40A54600AF23C5 /* DWDPTxObject.m */, + C943B4112A40A54600AF23C5 /* DWDPUserObject.h */, + C943B4122A40A54600AF23C5 /* DWDPPendingRequestObject.m */, + C943B4132A40A54600AF23C5 /* DWDPIncomingRequestObject.h */, + C943B4142A40A54600AF23C5 /* Notifications */, + C943B41D2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.m */, + ); + path = Objects; + sourceTree = ""; + }; + C943B4142A40A54600AF23C5 /* Notifications */ = { + isa = PBXGroup; + children = ( + C943B4152A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.m */, + C943B4162A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m */, + C943B4172A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.m */, + C943B4182A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.h */, + C943B4192A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.h */, + C943B41A2A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.h */, + C943B41B2A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.m */, + C943B41C2A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.h */, + ); + path = Notifications; + sourceTree = ""; + }; + C943B41E2A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B41F2A40A54600AF23C5 /* DWDPTextStatusCell.m */, + C943B4202A40A54600AF23C5 /* ContentViews */, + C943B42B2A40A54600AF23C5 /* DWDPBasicCell.h */, + C943B42C2A40A54600AF23C5 /* DWDPTxListCell.h */, + C943B42D2A40A54600AF23C5 /* DWDPImageStatusCell.m */, + C943B42E2A40A54600AF23C5 /* DWDPIncomingRequestCell.m */, + C943B42F2A40A54600AF23C5 /* UIFont+DWDPItem.h */, + C943B4302A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m */, + C943B4312A40A54600AF23C5 /* DWDPBasicCell.m */, + C943B4322A40A54600AF23C5 /* DWDPTextStatusCell.h */, + C943B4332A40A54600AF23C5 /* DWDPTxListCell.m */, + C943B4342A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.h */, + C943B4352A40A54600AF23C5 /* UIFont+DWDPItem.m */, + C943B4362A40A54600AF23C5 /* DWDPIncomingRequestCell.h */, + C943B4372A40A54600AF23C5 /* DWDPImageStatusCell.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B4202A40A54600AF23C5 /* ContentViews */ = { + isa = PBXGroup; + children = ( + C943B4212A40A54600AF23C5 /* DWDPGenericStatusItemView.h */, + C943B4222A40A54600AF23C5 /* DWDPGenericContactRequestItemView.m */, + C943B4232A40A54600AF23C5 /* DWDPTxItemView.m */, + C943B4242A40A54600AF23C5 /* DWDPGenericImageItemView.h */, + C943B4252A40A54600AF23C5 /* DWDPGenericItemView.m */, + C943B4262A40A54600AF23C5 /* DWDPGenericContactRequestItemView.h */, + C943B4272A40A54600AF23C5 /* DWDPGenericStatusItemView.m */, + C943B4282A40A54600AF23C5 /* DWDPGenericImageItemView.m */, + C943B4292A40A54600AF23C5 /* DWDPTxItemView.h */, + C943B42A2A40A54600AF23C5 /* DWDPGenericItemView.h */, + ); + path = ContentViews; + sourceTree = ""; + }; + C943B4382A40A54600AF23C5 /* Protocols */ = { + isa = PBXGroup; + children = ( + C943B4392A40A54600AF23C5 /* DWDPBasicItem.h */, + C943B43A2A40A54600AF23C5 /* DWDPNewIncomingRequestItem.h */, + C943B43B2A40A54600AF23C5 /* DWDPPendingRequestItem.h */, + C943B43C2A40A54600AF23C5 /* Items Associated Data */, + C943B4402A40A54600AF23C5 /* DWDPNotificationItem.h */, + C943B4412A40A54600AF23C5 /* DWDPEstablishedContactItem.h */, + C943B4422A40A54600AF23C5 /* DWDPTxItem.h */, + C943B4432A40A54600AF23C5 /* DWDPRespondedRequestItem.h */, + C943B4442A40A54600AF23C5 /* DWDPBasicUserItem.h */, + C943B4452A40A54600AF23C5 /* DWDPIncomingRequestItem.h */, + ); + path = Protocols; + sourceTree = ""; + }; + C943B43C2A40A54600AF23C5 /* Items Associated Data */ = { + isa = PBXGroup; + children = ( + C943B43D2A40A54600AF23C5 /* DWDPFriendRequestBackedItem.h */, + C943B43E2A40A54600AF23C5 /* DWDPBlockchainIdentityBackedItem.h */, + C943B43F2A40A54600AF23C5 /* DWDPDashpayUserBackedItem.h */, + ); + path = "Items Associated Data"; + sourceTree = ""; + }; + C943B4462A40A54600AF23C5 /* Factory */ = { + isa = PBXGroup; + children = ( + C943B4472A40A54600AF23C5 /* DWDPSearchItemsFactory.h */, + C943B4482A40A54600AF23C5 /* DWDPContactsItemsFactory.m */, + C943B4492A40A54600AF23C5 /* DWDPSearchItemsFactory.m */, + C943B44A2A40A54600AF23C5 /* DWDPContactsItemsFactory.h */, + ); + path = Factory; + sourceTree = ""; + }; + C943B44B2A40A54600AF23C5 /* Invites */ = { + isa = PBXGroup; + children = ( + C943B44C2A40A54600AF23C5 /* DWSendInviteFirstStepViewController.h */, + C943B44D2A40A54600AF23C5 /* Additions */, + C943B4502A40A54600AF23C5 /* DWSendInviteFlowController.h */, + C943B4512A40A54600AF23C5 /* Confirmation */, + C943B4572A40A54600AF23C5 /* DWSendInviteFirstStepViewController.m */, + C943B4582A40A54600AF23C5 /* History */, + C943B46C2A40A54600AF23C5 /* Preview */, + C943B46F2A40A54600AF23C5 /* DWSendInviteFlowController.m */, + C943B4702A40A54600AF23C5 /* Invitation */, + ); + path = Invites; + sourceTree = ""; + }; + C943B44D2A40A54600AF23C5 /* Additions */ = { + isa = PBXGroup; + children = ( + C943B44E2A40A54600AF23C5 /* DPAlertViewController+DWInvite.h */, + C943B44F2A40A54600AF23C5 /* DPAlertViewController+DWInvite.m */, + ); + path = Additions; + sourceTree = ""; + }; + C943B4512A40A54600AF23C5 /* Confirmation */ = { + isa = PBXGroup; + children = ( + C943B4522A40A54600AF23C5 /* DWConfirmInvitationViewController.m */, + C943B4532A40A54600AF23C5 /* DWConfirmInvitationContentView.m */, + C943B4542A40A54600AF23C5 /* DWConfirmInvitationContentView.h */, + C943B4552A40A54600AF23C5 /* DWConfirmInvitationViewController.h */, + C943B4562A40A54600AF23C5 /* DWConfirmInvitationContentView.xib */, + ); + path = Confirmation; + sourceTree = ""; + }; + C943B4582A40A54600AF23C5 /* History */ = { + isa = PBXGroup; + children = ( + C943B4592A40A54600AF23C5 /* DWInvitationHistoryViewController.m */, + C943B45A2A40A54600AF23C5 /* Models */, + C943B45F2A40A54600AF23C5 /* Filter */, + C943B4642A40A54600AF23C5 /* Views */, + C943B46B2A40A54600AF23C5 /* DWInvitationHistoryViewController.h */, + ); + path = History; + sourceTree = ""; + }; + C943B45A2A40A54600AF23C5 /* Models */ = { + isa = PBXGroup; + children = ( + C943B45B2A40A54600AF23C5 /* DWInvitationHistoryFilter.h */, + C943B45C2A40A54600AF23C5 /* DWInvitationHistoryModel.m */, + C943B45D2A40A54600AF23C5 /* DWInvitationHistoryModel.h */, + C943B45E2A40A54600AF23C5 /* DWInvitationItem.h */, + ); + path = Models; + sourceTree = ""; + }; + C943B45F2A40A54600AF23C5 /* Filter */ = { + isa = PBXGroup; + children = ( + C943B4602A40A54600AF23C5 /* DWHistoryFilterContentView.m */, + C943B4612A40A54600AF23C5 /* DWHistoryFilterViewController.m */, + C943B4622A40A54600AF23C5 /* DWHistoryFilterContentView.h */, + C943B4632A40A54600AF23C5 /* DWHistoryFilterViewController.h */, + ); + path = Filter; + sourceTree = ""; + }; + C943B4642A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B4652A40A54600AF23C5 /* DWHistoryHeaderView.h */, + C943B4662A40A54600AF23C5 /* DWInvitationTableViewCell.m */, + C943B4672A40A54600AF23C5 /* DWCreateInvitationButton.m */, + C943B4682A40A54600AF23C5 /* DWInvitationTableViewCell.h */, + C943B4692A40A54600AF23C5 /* DWHistoryHeaderView.m */, + C943B46A2A40A54600AF23C5 /* DWCreateInvitationButton.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B46C2A40A54600AF23C5 /* Preview */ = { + isa = PBXGroup; + children = ( + C943B46D2A40A54600AF23C5 /* DWInvitationPreviewViewController.h */, + C943B46E2A40A54600AF23C5 /* DWInvitationPreviewViewController.m */, + ); + path = Preview; + sourceTree = ""; + }; + C943B4702A40A54600AF23C5 /* Invitation */ = { + isa = PBXGroup; + children = ( + C943B4712A40A54600AF23C5 /* DWInvitationLinkBuilder.m */, + C943B4722A40A54600AF23C5 /* BaseInvitationViewController.swift */, + C943B4732A40A54600AF23C5 /* SuccessInvitationViewController.swift */, + C943B4742A40A54600AF23C5 /* DWInvitationLinkBuilder.h */, + C943B4752A40A54600AF23C5 /* Views */, + ); + path = Invitation; + sourceTree = ""; + }; + C943B4752A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B4762A40A54600AF23C5 /* InvitationBottomView.swift */, + C943B4772A40A54600AF23C5 /* InvitationTopView.swift */, + C943B4782A40A54600AF23C5 /* DWSuccessInvitationView.m */, + C943B4792A40A54600AF23C5 /* DWInvitationMessageView.h */, + C943B47A2A40A54600AF23C5 /* DWInvitationActionsView.m */, + C943B47B2A40A54600AF23C5 /* DWSuccessInvitationView.h */, + C943B47C2A40A54600AF23C5 /* SuccessInvitationTopView.swift */, + C943B47D2A40A54600AF23C5 /* DWInvitationMessageView.m */, + C943B47E2A40A54600AF23C5 /* DWInvitationActionsView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B47F2A40A54600AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B4862A40A54600AF23C5 /* DWNetworkUnavailableView.h */, + C943B4802A40A54600AF23C5 /* DWNetworkUnavailableView.m */, + C943B4852A40A54600AF23C5 /* UIColor+DWDashPay.h */, + C943B4812A40A54600AF23C5 /* UIColor+DWDashPay.m */, + C943B4822A40A54600AF23C5 /* DWDPSmallContactView.h */, + C943B4872A40A54600AF23C5 /* DWDPSmallContactView.m */, + C943B4842A40A54600AF23C5 /* DWDashPayAnimationView.h */, + C943B4882A40A54600AF23C5 /* DWDashPayAnimationView.m */, + ); + path = Views; + sourceTree = ""; + }; + C943B48E2A40A54600AF23C5 /* Global */ = { + isa = PBXGroup; + children = ( + C943B48F2A40A54600AF23C5 /* UIImageView+DWDPAvatar.m */, + C943B4902A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.h */, + C943B4912A40A54600AF23C5 /* DWDashPayContactsActions.m */, + C943B4922A40A54600AF23C5 /* DWDashPayContactsUpdater.h */, + C943B4932A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.m */, + C943B4942A40A54600AF23C5 /* UIImageView+DWDPAvatar.h */, + C943B4952A40A54600AF23C5 /* DWDashPayContactsActions.h */, + C943B4962A40A54600AF23C5 /* DWDashPayContactsUpdater.m */, + C943B4972A40A54600AF23C5 /* Notifications */, + ); + path = Global; + sourceTree = ""; + }; + C943B4972A40A54600AF23C5 /* Notifications */ = { + isa = PBXGroup; + children = ( + C943B4982A40A54600AF23C5 /* DWNotificationsProvider.m */, + C943B4992A40A54600AF23C5 /* DWNotificationsData.m */, + C943B49A2A40A54600AF23C5 /* DWNotificationsFetchedDataSource.h */, + C943B49B2A40A54600AF23C5 /* DWNotificationsProvider.h */, + C943B49C2A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m */, + C943B49D2A40A54600AF23C5 /* DWNotificationsData.h */, + ); + path = Notifications; + sourceTree = ""; + }; + C943B49E2A40A54600AF23C5 /* Notifications */ = { isa = PBXGroup; children = ( - 2A7AF3192480E619001D74F9 /* Models */, - C3CA202D247E549B00158074 /* Cells */, - C3CA202A247E4AF300158074 /* DWNotificationsViewController.h */, - C3CA202B247E4AF300158074 /* DWNotificationsViewController.m */, - 2A827B7024B5CA1800A42042 /* DWListCollectionLayout.h */, - 2A827B7124B5CA1800A42042 /* DWListCollectionLayout.m */, + C943B49F2A40A54600AF23C5 /* Cells */, + C943B4A42A40A54600AF23C5 /* DWListCollectionLayout.h */, + C943B4A52A40A54600AF23C5 /* DWNotificationsViewController.h */, + C943B4A62A40A54600AF23C5 /* Models */, + C943B4A92A40A54600AF23C5 /* DWListCollectionLayout.m */, + C943B4AA2A40A54600AF23C5 /* DWNotificationsViewController.m */, ); path = Notifications; sourceTree = ""; }; - C3CA202D247E549B00158074 /* Cells */ = { + C943B49F2A40A54600AF23C5 /* Cells */ = { isa = PBXGroup; children = ( - C3CA202E247E54C400158074 /* DWNoNotificationsCell.h */, - C3CA202F247E54C400158074 /* DWNoNotificationsCell.m */, + C943B4A02A40A54600AF23C5 /* DWNotificationsInvitationCell.h */, + C943B4A12A40A54600AF23C5 /* DWNoNotificationsCell.m */, + C943B4A22A40A54600AF23C5 /* DWNotificationsInvitationCell.m */, + C943B4A32A40A54600AF23C5 /* DWNoNotificationsCell.h */, ); path = Cells; sourceTree = ""; }; - C3DAD265246AA6CF0001624F /* ScreenshotWarning */ = { + C943B4A62A40A54600AF23C5 /* Models */ = { isa = PBXGroup; children = ( - C3DAD266246AA6F10001624F /* DWScreenshotWarningViewController.h */, - C3DAD267246AA6F10001624F /* DWScreenshotWarningViewController.m */, + C943B4A72A40A54600AF23C5 /* DWNotificationsModel.m */, + C943B4A82A40A54600AF23C5 /* DWNotificationsModel.h */, ); - path = ScreenshotWarning; + path = Models; sourceTree = ""; }; - C3DAD2BD24747F2D0001624F /* Base */ = { + C943B5392A40A6BE00AF23C5 /* DPAlert */ = { isa = PBXGroup; children = ( - C3DAD2BE24747F580001624F /* DWSearchViewController.h */, - C3DAD2BF24747F580001624F /* DWSearchViewController.m */, + C943B53A2A40A6BE00AF23C5 /* DPAlertChildContentsView.h */, + C943B53B2A40A6BE00AF23C5 /* DPAlertViewController.m */, + C943B53C2A40A6BE00AF23C5 /* DPAlertChildContentsView.m */, + C943B53D2A40A6BE00AF23C5 /* DPAlertViewController.h */, ); - path = Base; + path = DPAlert; sourceTree = ""; }; - C909615629F29C7500002D82 /* Cell */ = { + C943B5402A40AFC400AF23C5 /* Tx Details */ = { isa = PBXGroup; children = ( - C909615829F29C9200002D82 /* KeysOverviewCell.swift */, + C943B5412A40AFD000AF23C5 /* DWTxDetailPopupViewController.h */, + C943B5422A40AFD100AF23C5 /* DWTxDetailPopupViewController.m */, ); - path = Cell; + path = "Tx Details"; sourceTree = ""; }; - C909615729F29C7E00002D82 /* Model */ = { + C943B5452A40B52500AF23C5 /* Autolayout */ = { isa = PBXGroup; children = ( - C909614C29EFF7D600002D82 /* WalletKeysOverviewModel.swift */, + C943B5592A40DD3F00AF23C5 /* NSArray+DWFlatten.h */, + C943B55A2A40DD4000AF23C5 /* NSArray+DWFlatten.m */, + C943B5472A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.h */, + C943B5462A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.m */, + C943B5492A40B52F00AF23C5 /* UIView+DWAutolayout.h */, + C943B5482A40B52F00AF23C5 /* UIView+DWAutolayout.m */, ); - path = Model; + path = Autolayout; sourceTree = ""; }; - C92963BB2AA0AFF800B96B22 /* Portal */ = { + C943B54F2A40C21A00AF23C5 /* Filter View */ = { isa = PBXGroup; children = ( - C9FAABB62AB799AE00878224 /* UpholdPortalModel.swift */, - 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */, + C943B5522A40C23500AF23C5 /* DWFilterHeaderView.xib */, ); - path = Portal; + path = "Filter View"; + sourceTree = ""; + }; + C943B5552A40DA2F00AF23C5 /* Containers */ = { + isa = PBXGroup; + children = ( + C943B5562A40DA3600AF23C5 /* DWFullScreenModalControllerViewController.h */, + C943B5572A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m */, + ); + path = Containers; + sourceTree = ""; + }; + C943B55F2A40ECEC00AF23C5 /* Cells */ = { + isa = PBXGroup; + children = ( + 2A5E4544243E0595006BA067 /* Registration Status */, + C943B55D2A40E6F200AF23C5 /* DWFilterHeaderView.h */, + C943B55C2A40E6F200AF23C5 /* DWFilterHeaderView.m */, + 2A4E534C22F03AAC00E5168A /* DWFilterHeaderView.xib */, + ); + path = Cells; + sourceTree = ""; + }; + C943B5622A40ED4000AF23C5 /* UsernamePending */ = { + isa = PBXGroup; + children = ( + C943B5642A40ED4000AF23C5 /* DWUsernamePendingViewController.h */, + C943B5632A40ED4000AF23C5 /* DWUsernamePendingViewController.m */, + ); + path = UsernamePending; + sourceTree = ""; + }; + C943B5652A40ED4000AF23C5 /* ConfirmUsername */ = { + isa = PBXGroup; + children = ( + C943B5672A40ED4100AF23C5 /* DWConfirmUsernameViewController.m */, + C943B5662A40ED4100AF23C5 /* DWConfirmUsernameViewController.h */, + C943B5702A40ED4200AF23C5 /* Views */, + ); + path = ConfirmUsername; + sourceTree = ""; + }; + C943B5682A40ED4100AF23C5 /* RegistrationCompleted */ = { + isa = PBXGroup; + children = ( + C943B5692A40ED4100AF23C5 /* DWRegistrationCompletedViewController.m */, + C943B56A2A40ED4100AF23C5 /* DWRegistrationCompletedViewController.h */, + ); + path = RegistrationCompleted; + sourceTree = ""; + }; + C943B56B2A40ED4100AF23C5 /* CreateUsername */ = { + isa = PBXGroup; + children = ( + C943B56D2A40ED4200AF23C5 /* DWInputUsernameViewController.h */, + C943B56C2A40ED4100AF23C5 /* DWCreateUsernameViewController.h */, + C943B57D2A40ED4400AF23C5 /* Models */, + C943B56F2A40ED4200AF23C5 /* DWInputUsernameViewController.m */, + C943B56E2A40ED4200AF23C5 /* DWCreateUsernameViewController.m */, + C943B5742A40ED4300AF23C5 /* Views */, + ); + path = CreateUsername; + sourceTree = ""; + }; + C943B5702A40ED4200AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B5722A40ED4200AF23C5 /* DWConfirmUsernameContentView.m */, + C943B5712A40ED4200AF23C5 /* DWConfirmUsernameContentView.xib */, + C943B5732A40ED4200AF23C5 /* DWConfirmUsernameContentView.h */, + ); + path = Views; + sourceTree = ""; + }; + C943B5742A40ED4300AF23C5 /* Views */ = { + isa = PBXGroup; + children = ( + C943B5792A40ED4300AF23C5 /* DWUsernameHeaderView.m */, + C943B57C2A40ED4400AF23C5 /* DWPlanetarySystemView.m */, + C943B5772A40ED4300AF23C5 /* DWTextField.m */, + C943B5752A40ED4300AF23C5 /* DWUsernameValidationView.h */, + C943B57B2A40ED4400AF23C5 /* DWTextField.h */, + C943B5762A40ED4300AF23C5 /* DWPlanetarySystemView.h */, + C943B5782A40ED4300AF23C5 /* DWUsernameHeaderView.h */, + C943B57A2A40ED4300AF23C5 /* DWUsernameValidationView.m */, + ); + path = Views; + sourceTree = ""; + }; + C943B57D2A40ED4400AF23C5 /* Models */ = { + isa = PBXGroup; + children = ( + C943B5882A40ED4500AF23C5 /* DWUsernameValidationRule.m */, + C943B57F2A40ED4400AF23C5 /* DWLengthUsernameValidationRule.h */, + C943B5852A40ED4500AF23C5 /* DWAllowedCharactersUsernameValidationRule.m */, + C943B5842A40ED4500AF23C5 /* DWCheckExistenceUsernameValidationRule.h */, + C943B5872A40ED4500AF23C5 /* DWFirstUsernameSymbolValidationRule.h */, + C943B5832A40ED4500AF23C5 /* DWLengthUsernameValidationRule.m */, + C943B5822A40ED4400AF23C5 /* DWUsernameValidationRule.h */, + C943B5812A40ED4400AF23C5 /* DWAllowedCharactersUsernameValidationRule.h */, + C943B5802A40ED4400AF23C5 /* DWUsernameValidationRule+Protected.h */, + C943B57E2A40ED4400AF23C5 /* DWFirstUsernameSymbolValidationRule.m */, + C943B5862A40ED4500AF23C5 /* DWCheckExistenceUsernameValidationRule.m */, + ); + path = Models; + sourceTree = ""; + }; + C943B5992A40EE4800AF23C5 /* Error */ = { + isa = PBXGroup; + children = ( + C943B59B2A40EE4800AF23C5 /* DWNetworkErrorViewController.h */, + C943B59A2A40EE4800AF23C5 /* DWNetworkErrorViewController.m */, + ); + path = Error; sourceTree = ""; }; C94D98262A53034A00F3BEE1 /* Enter Address */ = { @@ -5644,6 +7270,128 @@ path = Views; sourceTree = ""; }; + C9D2C9552A320AC100D15901 /* DashPay */ = { + isa = PBXGroup; + children = ( + C9D2C9632A38732900D15901 /* Assets */, + C9D2C9582A386A5B00D15901 /* Presentation */, + C9D2C9562A320F3700D15901 /* dashpay-info.plist */, + ); + path = DashPay; + sourceTree = ""; + }; + C9D2C9582A386A5B00D15901 /* Presentation */ = { + isa = PBXGroup; + children = ( + C943B5992A40EE4800AF23C5 /* Error */, + C943B5552A40DA2F00AF23C5 /* Containers */, + C943B54F2A40C21A00AF23C5 /* Filter View */, + C943B5402A40AFC400AF23C5 /* Tx Details */, + C943B3482A40A4C500AF23C5 /* InfoPopup */, + C943B33D2A408DB900AF23C5 /* Menu */, + C943B2B22A408CAF00AF23C5 /* Profile */, + C9D2C96D2A38777A00D15901 /* Setup */, + C9D2C9592A386A6700D15901 /* Home */, + C9D2C95A2A386D5200D15901 /* Shared */, + ); + path = Presentation; + sourceTree = ""; + }; + C9D2C9592A386A6700D15901 /* Home */ = { + isa = PBXGroup; + children = ( + C943B55F2A40ECEC00AF23C5 /* Cells */, + C943B5442A40B4AF00AF23C5 /* DWDashPayReadyProtocol.h */, + C9D2C9662A3875AB00D15901 /* Model */, + C9D2C95F2A386D9700D15901 /* Views */, + ); + path = Home; + sourceTree = ""; + }; + C9D2C95A2A386D5200D15901 /* Shared */ = { + isa = PBXGroup; + children = ( + C943B5452A40B52500AF23C5 /* Autolayout */, + C943B5372A40A65B00AF23C5 /* DWScrollingViewController.h */, + C943B5362A40A65B00AF23C5 /* DWScrollingViewController.m */, + C943B3452A409FFA00AF23C5 /* DWDPAvatarView.h */, + C943B3442A409FFA00AF23C5 /* DWDPAvatarView.m */, + C943B3412A409F9E00AF23C5 /* UIImageView+DWDPAvatar.h */, + C943B3422A409F9E00AF23C5 /* UIImageView+DWDPAvatar.m */, + C943B5392A40A6BE00AF23C5 /* DPAlert */, + C9D2C95B2A386D6C00D15901 /* Buttons */, + ); + path = Shared; + sourceTree = ""; + }; + C9D2C95B2A386D6C00D15901 /* Buttons */ = { + isa = PBXGroup; + children = ( + C956AF1F2A5C33E4002FAB75 /* DWButton.h */, + C956AF202A5C33E5002FAB75 /* DWButton.m */, + C956AF1D2A5C3397002FAB75 /* DWBaseActionButton.h */, + C956AF1C2A5C3396002FAB75 /* DWBaseActionButton.m */, + C956AF192A5C337E002FAB75 /* DWBorderedActionButton.h */, + C956AF1A2A5C337F002FAB75 /* DWBorderedActionButton.m */, + C956AF152A5C3301002FAB75 /* DWPressableButton.h */, + C956AF162A5C3302002FAB75 /* DWPressableButton.m */, + C943B54D2A40B6B500AF23C5 /* DWColoredButton.h */, + C943B54C2A40B6B500AF23C5 /* DWColoredButton.m */, + C9D2C95C2A386D7E00D15901 /* DWBasePressableControl.h */, + C9D2C95D2A386D7E00D15901 /* DWBasePressableControl.m */, + ); + path = Buttons; + sourceTree = ""; + }; + C9D2C95F2A386D9700D15901 /* Views */ = { + isa = PBXGroup; + children = ( + C9D2C9612A386DA200D15901 /* DWDPWelcomeView.h */, + C9D2C9602A386DA200D15901 /* DWDPWelcomeView.m */, + ); + path = Views; + sourceTree = ""; + }; + C9D2C9632A38732900D15901 /* Assets */ = { + isa = PBXGroup; + children = ( + C9D2C9642A38733B00D15901 /* DPAssets.xcassets */, + ); + path = Assets; + sourceTree = ""; + }; + C9D2C9662A3875AB00D15901 /* Model */ = { + isa = PBXGroup; + children = ( + C9D2C9682A3875BA00D15901 /* DWCurrentUserProfileModel.h */, + C9D2C9672A3875BA00D15901 /* DWCurrentUserProfileModel.m */, + ); + path = Model; + sourceTree = ""; + }; + C9D2C96D2A38777A00D15901 /* Setup */ = { + isa = PBXGroup; + children = ( + C943B5622A40ED4000AF23C5 /* UsernamePending */, + C943B56B2A40ED4100AF23C5 /* CreateUsername */, + C943B5682A40ED4100AF23C5 /* RegistrationCompleted */, + C943B5612A40ED4000AF23C5 /* DWDashPaySetupFlowController.m */, + C943B5602A40ED4000AF23C5 /* DWDashPaySetupFlowController.h */, + C943B5652A40ED4000AF23C5 /* ConfirmUsername */, + C9D2C96E2A38778400D15901 /* Model */, + ); + path = Setup; + sourceTree = ""; + }; + C9D2C96E2A38778400D15901 /* Model */ = { + isa = PBXGroup; + children = ( + C9D2C96F2A38778E00D15901 /* DWDashPaySetupModel.h */, + C9D2C9702A38778E00D15901 /* DWDashPaySetupModel.m */, + ); + path = Model; + sourceTree = ""; + }; C9F42FA729DC09C6001BC549 /* Style */ = { isa = PBXGroup; children = ( @@ -5664,7 +7412,6 @@ C9F451FE2A0CE60400825057 /* Home Header View */ = { isa = PBXGroup; children = ( - C9F451FA2A0CC2A800825057 /* DashPayProfileView.swift */, C9F451F42A0CAC9400825057 /* HomeHeaderView.swift */, C9F4520A2A1209D100825057 /* HomeHeaderModel.swift */, ); @@ -5729,6 +7476,10 @@ 75EDC78DE1686E55AE12233C /* Pods-DashWalletScreenshotsUITests.testnet.xcconfig */, A9529BDC33490B8F700E733D /* Pods-DashWalletScreenshotsUITests.release.xcconfig */, EA95ACF6CA2A73810B9BB451 /* Pods-DashWalletScreenshotsUITests.testflight.xcconfig */, + 1EBB53DD8E53B4B63E5A885E /* Pods-dashpay.debug.xcconfig */, + C4C041DE4CD73FF445090FA3 /* Pods-dashpay.testnet.xcconfig */, + EBB5D208A38257AF3DA73A99 /* Pods-dashpay.release.xcconfig */, + 3BF640216ECD5FBFC17B85D3 /* Pods-dashpay.testflight.xcconfig */, ); name = Pods; sourceTree = ""; @@ -5868,12 +7619,36 @@ productReference = BAE12BE51B2DEE7F00895CC5 /* TodayExtension.appex */; productType = "com.apple.product-type.app-extension"; }; + C9D2C68A2A320AA000D15901 /* dashpay */ = { + isa = PBXNativeTarget; + buildConfigurationList = C9D2C94E2A320AA000D15901 /* Build configuration list for PBXNativeTarget "dashpay" */; + buildPhases = ( + C9D2C68F2A320AA000D15901 /* [CP] Check Pods Manifest.lock */, + C9D2C6902A320AA000D15901 /* Run Script - Uphold Constants */, + C9D2C6912A320AA000D15901 /* Run Script - clang-format */, + C9D2C6922A320AA000D15901 /* Run Script - bartycrouch */, + C9D2C6932A320AA000D15901 /* Sources */, + C9D2C8F52A320AA000D15901 /* Frameworks */, + C9D2C90A2A320AA000D15901 /* Resources */, + C9D2C94C2A320AA000D15901 /* [CP] Copy Pods Resources */, + C9D2C94D2A320AA000D15901 /* Run Script - Cleanup Uphold Constants */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = dashpay; + productName = DashWallet; + productReference = C9D2C9532A320AA000D15901 /* dashpay.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 75D5F3B6191EC270004AB296 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; CLASSPREFIX = DW; LastSwiftUpdateCheck = 1020; LastUpgradeCheck = 1400; @@ -5963,6 +7738,7 @@ projectRoot = ""; targets = ( 75D5F3BD191EC270004AB296 /* dashwallet */, + C9D2C68A2A320AA000D15901 /* dashpay */, BAE12BE41B2DEE7F00895CC5 /* TodayExtension */, 75D5F3E4191EC270004AB296 /* DashWalletTests */, BA913BDD1BD57E4D005A7C0E /* WatchApp */, @@ -5988,8 +7764,8 @@ 2AFF01E0243F74BF003718DC /* DWDPRegistrationErrorTableViewCell.xib in Resources */, 47838B7F290160860003E8AB /* ExploreDash.storyboard in Resources */, 474C720D298A19D100475CA6 /* TxDetailHeaderCell.xib in Resources */, + 75303FE52AE7B70500870D8B /* CrowdNode.storyboard in Resources */, 2AB231D42196E27300A6E7E6 /* StartStoryboard.storyboard in Resources */, - 2A60C9452444BF3A00AF72CF /* DWConfirmUsernameContentView.xib in Resources */, C9FAABB52AB793CE00878224 /* BuySellPortal.storyboard in Resources */, 2A1AF6DF23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib in Resources */, 2A4431D622D52F67009BAF7F /* DWInfoTextCell.xib in Resources */, @@ -5999,6 +7775,7 @@ 2A4E534D22F03AAC00E5168A /* DWFilterHeaderView.xib in Resources */, 757E09991ADB8EEB006FD352 /* Localizable.strings in Resources */, 2A6300422328CCE900827825 /* LockScreen.storyboard in Resources */, + 75889B7F2AD2D7F800C17F5D /* CoinJoin.storyboard in Resources */, 4709C30F287E787700B4BD48 /* Migrations.bundle in Resources */, 474C720F298A1A3E00475CA6 /* TxDetailTaxCategoryCell.xib in Resources */, 2ADC722923B5547000D9DD37 /* Localizable.stringsdict in Resources */, @@ -6018,7 +7795,6 @@ C9F42FB629DD8702001BC549 /* BackupInfoItemView.xib in Resources */, 47AE8BB028BFF28700490F5E /* explore.db in Resources */, 0F36937F2919A70B007F4E91 /* Coinbase.storyboard in Resources */, - C3DAD2C9247538AA0001624F /* DWTitleActionHeaderView.xib in Resources */, 2A10EB3E2358BDA500C38B61 /* ImportWalletInfo.storyboard in Resources */, C9F42FAD29DC115A001BC549 /* ReceiveContentView.xib in Resources */, 2AD1CE8622DC9B7300C99324 /* VerifySeedPhrase.storyboard in Resources */, @@ -6028,7 +7804,6 @@ 2A913E7123A2667E006A2A59 /* Onboarding.storyboard in Resources */, 1193FF3E2962F1BE004EA8D7 /* OperationStatus.storyboard in Resources */, 2A9FFE9C2230FF4700956D5F /* UpholdLogoutTutorialStoryboard.storyboard in Resources */, - 1121A8B728E5DB6E00464C31 /* CrowdNode.storyboard in Resources */, 2AFF01E6243F8626003718DC /* DWDPRegistrationDoneTableViewCell.xib in Resources */, 2A10EB412358D2A900C38B61 /* ResetWalletInfo.storyboard in Resources */, FB66977F212C0B940034BE4F /* LaunchScreen.storyboard in Resources */, @@ -6084,6 +7859,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C9D2C90A2A320AA000D15901 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C9D2C90B2A320AA000D15901 /* DWShortcutCollectionViewCell~ipad.xib in Resources */, + 75AE5A7F2A87C363006CD4BA /* DWConfirmUsernameContentView.xib in Resources */, + C9D2C90C2A320AA000D15901 /* DWDPRegistrationErrorTableViewCell.xib in Resources */, + C9D2C90D2A320AA000D15901 /* ExploreDash.storyboard in Resources */, + C9D2C90E2A320AA000D15901 /* TxDetailHeaderCell.xib in Resources */, + 752C3ED22B1AF19C00F46CD3 /* BuySellPortal.storyboard in Resources */, + C9D2C9652A38733B00D15901 /* DPAssets.xcassets in Resources */, + C9D2C90F2A320AA000D15901 /* StartStoryboard.storyboard in Resources */, + C9D2C9112A320AA000D15901 /* DWShortcutCollectionViewCell~iphone.xib in Resources */, + C9D2C9122A320AA000D15901 /* DWInfoTextCell.xib in Resources */, + C9D2C9132A320AA000D15901 /* BiometricAuth.storyboard in Resources */, + C9D2C9142A320AA000D15901 /* TxListEmptyTableViewCell.xib in Resources */, + C9D2C9152A320AA000D15901 /* Payments.storyboard in Resources */, + C9D2C9172A320AA000D15901 /* Localizable.strings in Resources */, + C9D2C9182A320AA000D15901 /* LockScreen.storyboard in Resources */, + C9D2C91A2A320AA000D15901 /* Migrations.bundle in Resources */, + C9D2C91B2A320AA000D15901 /* TxDetailTaxCategoryCell.xib in Resources */, + C9D2C91C2A320AA000D15901 /* Localizable.stringsdict in Resources */, + C943B4C12A40A54600AF23C5 /* DWTitleActionHeaderView.xib in Resources */, + C9D2C91D2A320AA000D15901 /* ShortcutsView.xib in Resources */, + C9D2C91E2A320AA000D15901 /* HomeBalanceView.xib in Resources */, + C9D2C91F2A320AA000D15901 /* DWDPRegistrationStatusTableViewCell.xib in Resources */, + 753FDBEE2AECF52B0005EEC3 /* UsernameVoting.storyboard in Resources */, + C9D2C9202A320AA000D15901 /* TxDetailInfoCell.xib in Resources */, + C9D2C9212A320AA000D15901 /* UpholdOTPStoryboard.storyboard in Resources */, + C9D2C9222A320AA000D15901 /* AppAssets.xcassets in Resources */, + C9D2C9232A320AA000D15901 /* PayTableViewCell.xib in Resources */, + 75D6561D2B07936100D1A902 /* UsernameRequests.storyboard in Resources */, + C9D2C9242A320AA000D15901 /* coinflip.aiff in Resources */, + C9D2C9252A320AA000D15901 /* SharedAssets.xcassets in Resources */, + C9D2C9262A320AA000D15901 /* BackupInfo.storyboard in Resources */, + C9D2C9272A320AA000D15901 /* SyncView.xib in Resources */, + C9D2C9282A320AA000D15901 /* TxListTableViewCell.xib in Resources */, + C9D2C9292A320AA000D15901 /* BackupInfoItemView.xib in Resources */, + C9D2C92A2A320AA000D15901 /* explore.db in Resources */, + C9D2C92B2A320AA000D15901 /* (null) in Resources */, + C9D2C92C2A320AA000D15901 /* Coinbase.storyboard in Resources */, + 75889B892AD2DF0200C17F5D /* CoinJoin.storyboard in Resources */, + C9D2C92E2A320AA000D15901 /* ImportWalletInfo.storyboard in Resources */, + C9D2C92F2A320AA000D15901 /* ReceiveContentView.xib in Resources */, + C9D2C9302A320AA000D15901 /* VerifySeedPhrase.storyboard in Resources */, + 753FDBEC2AECF4CC0005EEC3 /* VotingHeaderView.xib in Resources */, + C9D2C9312A320AA000D15901 /* DWSecurityStatusView.xib in Resources */, + C9D2C9322A320AA000D15901 /* About.storyboard in Resources */, + C9D2C9332A320AA000D15901 /* SetPin.storyboard in Resources */, + C9D2C9342A320AA000D15901 /* Onboarding.storyboard in Resources */, + C9D2C9352A320AA000D15901 /* OperationStatus.storyboard in Resources */, + C9D2C9362A320AA000D15901 /* UpholdLogoutTutorialStoryboard.storyboard in Resources */, + C943B5542A40C23500AF23C5 /* DWFilterHeaderView.xib in Resources */, + C9D2C9392A320AA000D15901 /* DWDPRegistrationDoneTableViewCell.xib in Resources */, + C9D2C93A2A320AA000D15901 /* ResetWalletInfo.storyboard in Resources */, + C9D2C93B2A320AA000D15901 /* LaunchScreen.storyboard in Resources */, + C9D2C93C2A320AA000D15901 /* Pay.storyboard in Resources */, + C9D2C93D2A320AA000D15901 /* QuickReceive.storyboard in Resources */, + C9D2C93E2A320AA000D15901 /* Tx.storyboard in Resources */, + C9D2C93F2A320AA000D15901 /* DashSyncCurrentCommit in Resources */, + C9D2C9402A320AA000D15901 /* DWMainMenuTableViewCell.xib in Resources */, + C9D2C9412A320AA000D15901 /* VerifiedSuccessfully.storyboard in Resources */, + C9D2C9422A320AA000D15901 /* Setup.storyboard in Resources */, + C9D2C9432A320AA000D15901 /* GoogleService-Info.plist in Resources */, + C9D2C9442A320AA000D15901 /* uphold-logout.jpg in Resources */, + 75303FE62AE7B70500870D8B /* CrowdNode.storyboard in Resources */, + C9D2C9452A320AA000D15901 /* AmountPreviewView.xib in Resources */, + C9D2C9462A320AA000D15901 /* TxDetailActionCell.xib in Resources */, + C9D2C9472A320AA000D15901 /* CNCreateAccountCell.xib in Resources */, + C943B50F2A40A54600AF23C5 /* DWConfirmInvitationContentView.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -6289,6 +8137,114 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + C9D2C68F2A320AA000D15901 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-dashpay-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C9D2C6902A320AA000D15901 /* Run Script - Uphold Constants */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Script - Uphold Constants"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ \"${CONFIGURATION}\" = \"Release\" ] ; then\n if [ ! -f \"DWUpholdMainnetConstants__Release.m\" ]; then\n echo \"error: DWUpholdMainnetConstants__Release.m file not found!\"\n exit 1\n fi\n\n cp \"DWUpholdMainnetConstants__Release.m\" \"DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m\"\nelse\n # check if original file exist (in case it was moved or deleted while refactoring)\n if [ ! -f \"DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m\" ]; then\n echo \"error: DWUpholdMainnetConstants.m file not found! Fix Uphold Constants build phase\"\n exit 1\n fi\nfi\n"; + }; + C9D2C6912A320AA000D15901 /* Run Script - clang-format */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Script - clang-format"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/bin/bash\n\necho \"Reformatting code with clang-format\"\n\nfunction formatObjCFiles() {\n find \"$1\" -name '*.h' -print0 | xargs -0 clang-format -i -style=file\n find \"$1\" -name '*.m' -print0 | xargs -0 clang-format -i -style=file\n find \"$1\" -name '*.mm' -print0 | xargs -0 clang-format -i -style=file\n}\n\nif which clang-format >/dev/null; then\n for SUBDIR in DashWallet/Sources\n do\n formatObjCFiles $SUBDIR\n done\n \n formatObjCFiles TodayExtension\n formatObjCFiles Shared/Sources\nelse\n echo \"warning: clang-format not installed, install it by running `brew install clang-format`\"\nfi\n"; + }; + C9D2C6922A320AA000D15901 /* Run Script - bartycrouch */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script - bartycrouch"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which bartycrouch > /dev/null; then\n BTCRCH=`which bartycrouch`\n env -i $BTCRCH update -x\n env -i $BTCRCH lint -x\nelse\n echo \"warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch\"\nfi\n"; + }; + C9D2C94C2A320AA000D15901 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-dashpay/Pods-dashpay-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/DashSync/DashSync.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DashSync.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-dashpay/Pods-dashpay-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + C9D2C94D2A320AA000D15901 /* Run Script - Cleanup Uphold Constants */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Script - Cleanup Uphold Constants"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif [ \"${CONFIGURATION}\" = \"Release\" ] ; then\nif [ ! -f \"DWUpholdMainnetConstants__Empty.m\" ]; then\n echo \"error: DWUpholdMainnetConstants__Empty.m file not found!\"\n exit 1\nfi\n\ncp \"DWUpholdMainnetConstants__Empty.m\" \"DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m\"\nelse\n # check if original file exist (in case it was moved or deleted while refactoring)\n if [ ! -f \"DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m\" ]; then\n echo \"error: DWUpholdMainnetConstants.m file not found! Fix Uphold Constants build phase\"\n exit 1\n fi\nfi\n"; + }; DD2839496F426BDB0829397D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -6375,12 +8331,11 @@ 11B8449428F27C470082770C /* ApiCode.swift in Sources */, 47838B92290701470003E8AB /* CoinbaseEntryPointModel.swift in Sources */, C9F451EB2A0BF10B00825057 /* SyncingAlertViewController.swift in Sources */, - 2A56EF002419310C002C32F3 /* DWDashPayConstants.m in Sources */, 11B8449628F5B9F80082770C /* CrowdNodeResponse.swift in Sources */, 47AE8BB228BFF61A00490F5E /* FileManager+DashWallet.swift in Sources */, 47AE8BF228C1306000490F5E /* PointOfUseItemCell.swift in Sources */, 47083B3229892D770010AF71 /* DSTransaction+DashWallet.swift in Sources */, - 2AE8B66423CF09000016F221 /* DWConfirmUsernameViewController.m in Sources */, + 751B61C82AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift in Sources */, C9F42F9F29DA82E5001BC549 /* PayableViewController.swift in Sources */, 47AE8C1528C6378E00490F5E /* HairlineView.swift in Sources */, 2A913E9523A3F75F006A2A59 /* DWInitialViewController.m in Sources */, @@ -6388,13 +8343,10 @@ 2A7A7BD62348CB6600451078 /* DWSettingsMenuViewController.m in Sources */, 47AE8C1E28C7491C00490F5E /* AboutViewController.swift in Sources */, 2A0C69DA2314727F001B8C90 /* UISpringTimingParameters+DWInit.m in Sources */, - 2A9D72AC249A0EE000F79CD8 /* DWDPNewIncomingRequestObject.m in Sources */, 2A7A7BDD2348DC0A00451078 /* DWToolsMenuModel.m in Sources */, - C3CA202C247E4AF300158074 /* DWNotificationsViewController.m in Sources */, 47C661AD28F972BD00028A8D /* NumberKeyboardButton.swift in Sources */, 11AE3DD82997C599000856EE /* IsDefaultEmail.swift in Sources */, 2A1B7DC323266C8400BA8C6A /* DWHomeViewController+DWSecureWalletDelegateImpl.m in Sources */, - 2AEC5CB52493D87D00F4A689 /* DWNotificationsProvider.m in Sources */, 2A9FFF2A2233E60F00956D5F /* DWUpholdAccountObject.m in Sources */, 2A9FFE812230FF4700956D5F /* DWFormTableViewController.m in Sources */, C909614D29EFF7D600002D82 /* WalletKeysOverviewModel.swift in Sources */, @@ -6425,7 +8377,6 @@ 2A74EFFB2305464C00C475EB /* DWRecoverTextView.m in Sources */, 4709C315287EA11900B4BD48 /* TxUserInfo.swift in Sources */, C91E91AE29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift in Sources */, - 2A7AF3182480E35A001D74F9 /* DWContactsFetchedDataSource.m in Sources */, 47AE8BFE28C1306000490F5E /* AtmListViewController.swift in Sources */, 47A514602848F75B005A8E3E /* TxDetailViewController.swift in Sources */, 472D13EA299E5396006903F1 /* NSAttributedString+Builder.swift in Sources */, @@ -6434,10 +8385,8 @@ 47C661AB28F9707A00028A8D /* NumberKeyboard.swift in Sources */, 75F51AAD2ABD8C800057B499 /* IntegrationViewController+Uphold.swift in Sources */, 2A4431E622D73617009BAF7F /* DWSeedPhraseTitledView.m in Sources */, - 2A7AF38924829AF2001D74F9 /* UICollectionView+DWDPItemDequeue.m in Sources */, 119E8D0C2907C61400D406C1 /* CrowdNodeTopUpTx.swift in Sources */, C9F42FB429DD86FB001BC549 /* BackupInfoItemView.swift in Sources */, - C3DAD2D52476886D0001624F /* DWContactsSearchInfoHeaderView.m in Sources */, 118A1393291AA21B002641E4 /* AccountCreatingController.swift in Sources */, 7527720D2AA9B2630066557E /* SupportedTopperAssets.swift in Sources */, 2A4E534422F02BC300E5168A /* UIView+DWReuseHelper.m in Sources */, @@ -6446,18 +8395,14 @@ 0F71317528F4365C0072F454 /* ServiceEntryPointModel.swift in Sources */, 47AE8B9528BFACA100490F5E /* ExploreDash.swift in Sources */, 2A7A7BE02348DC1900451078 /* DWToolsMenuViewController.m in Sources */, - 2AE8B66B23CF0F390016F221 /* DWUsernamePendingViewController.m in Sources */, 4789D22F2981067C00BAFEFA /* UpholdAmountModel.swift in Sources */, 2A0C69BD23140779001B8C90 /* DWModalInteractiveTransition.m in Sources */, - 2AD6E5632487E16400B52F14 /* DWRequestsViewController.m in Sources */, - 2A7AF36324825A0C001D74F9 /* DWDPUserObject.m in Sources */, BAA4843C1B3EFFAF0075C749 /* UIImage+Utils.m in Sources */, 47083B3629893E700010AF71 /* CNCreateAccountCell.swift in Sources */, 2A4430EE22CBBAC9009BAF7F /* DWSetupViewController.m in Sources */, 47AE8BAB28BFAE5800490F5E /* ExploreDatabaseConnection.swift in Sources */, 111C3C4C296C51B500788E18 /* WithdrawalLimitsController.swift in Sources */, 0F6EDFCD28C896BD000427E7 /* CoinbaseTransactionResponse.swift in Sources */, - 2A7AF3152480DA51001D74F9 /* DWIncomingFetchedDataSource.m in Sources */, 4709C31F28818BAE00B4BD48 /* TxDetailModel.swift in Sources */, 11BD737E28E6BD7400A34022 /* NewAccountViewController.swift in Sources */, 47AE8BFA28C1306000490F5E /* PointOfUseListModel.swift in Sources */, @@ -6482,7 +8427,6 @@ 2A9FFE9B2230FF4700956D5F /* DWUpholdLogoutTutorialViewController.m in Sources */, 47CF46A529654E190067B6EE /* CBAccount.swift in Sources */, 47AF180529070B720025803E /* Types.swift in Sources */, - 2A7AF3402481A1B2001D74F9 /* DWDPGenericItemView.m in Sources */, 4774DCDB28F3FA9C008CF87D /* Coinbase.swift in Sources */, C9F452082A11F28600825057 /* SyncModel.swift in Sources */, C9F42FAB29DC1098001BC549 /* ReceiveContentView.swift in Sources */, @@ -6491,8 +8435,6 @@ 1193FF3629602835004EA8D7 /* CrowdNodeTransferModel.swift in Sources */, 2A44312622CCC14F009BAF7F /* DWSetPinViewController.m in Sources */, 47F4B6C7294842DF00AED4C9 /* ConfirmOrderController.swift in Sources */, - 2A1AE78E23F4668B00179A6E /* DWUsernameHeaderView.m in Sources */, - 2A7AF3992482E32E001D74F9 /* DWDashPayContactsActions.m in Sources */, 2A10EB442358D2CA00C38B61 /* DWResetWalletInfoViewController.m in Sources */, 2AD46232232A286000C71557 /* DWLockScreenModel.m in Sources */, 2AD1CE8A22DC9C6F00C99324 /* DWVerifySeedPhraseContentView.m in Sources */, @@ -6501,11 +8443,11 @@ 4774DCE128F44BA4008CF87D /* ServiceDataProvider.swift in Sources */, C9F451E72A0BA16400825057 /* PaymentButton.swift in Sources */, 2A4431DB22D675CD009BAF7F /* DWPreviewSeedPhraseViewController.m in Sources */, - C9F451FB2A0CC2A800825057 /* DashPayProfileView.swift in Sources */, C956AF2F2A5D5F6B002FAB75 /* UpholdConfirmViewController.swift in Sources */, 110D1781298BA9AF005BEB30 /* WKWebView+CrowdNode.swift in Sources */, 47FA3AFF29350929008D58DC /* SyncingActivityMonitor.swift in Sources */, C9F42FB029DC27F4001BC549 /* EmptyView.swift in Sources */, + 757514E32B15DF7C0026AD8E /* ShadowView.swift in Sources */, 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */, 2A3DC87123972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */, C9F451F72A0CAE1300825057 /* SyncView.swift in Sources */, @@ -6515,11 +8457,8 @@ 2A74EFFE2305763F00C475EB /* DWRecoverModel.m in Sources */, 2A4431C822D4D92A009BAF7F /* DWCenteredTableView.m in Sources */, 2A913E6F23A26663006A2A59 /* DWOnboardingViewController.m in Sources */, - 2A9E7DCA23F6BD5200CDA1EE /* DWUsernameValidationView.m in Sources */, 111C3C52296D620D00788E18 /* CrowdNode+UserDefaults.swift in Sources */, - 2A7AF37224826CDF001D74F9 /* DWDPAcceptedRequestNotificationObject.m in Sources */, 2A44313922CE2CB9009BAF7F /* DWPinView.m in Sources */, - 2A9E7DCE23F6C01A00CDA1EE /* DWUsernameValidationRule.m in Sources */, 2AB3416523A8213C004E37A7 /* DWBaseReceiveModel.m in Sources */, 2A1F6412238D650200A9B505 /* DWSegmentSlider.m in Sources */, 0F6EDFCA28C896BD000427E7 /* CoinbasePlaceBuyOrderRequest.swift in Sources */, @@ -6534,7 +8473,6 @@ 2A9FFE062230FF2B00956D5F /* DWUpholdCardObject.m in Sources */, 2A2CD72222F9B571008C7BC9 /* DWIntrinsicCollectionView.m in Sources */, 2A913E7F23A30609006A2A59 /* DWRootModelStub.m in Sources */, - 2A7AF3662482666C001D74F9 /* DWDPIncomingRequestObject.m in Sources */, 2A2CD6EE22F48159008C7BC9 /* UIDevice+DashWallet.m in Sources */, 47CF46AC2965B65B0067B6EE /* CBAccountManager.swift in Sources */, 47522F522927CBEE00EE143E /* FailedOperationStatusViewController.swift in Sources */, @@ -6547,11 +8485,9 @@ 2AD1CE9422DD078600C99324 /* DWSeedPhraseRow.m in Sources */, 0F71317928F436ED0072F454 /* ServiceOverviewViewController.swift in Sources */, 4751CAC4296EFE9500F63AC4 /* AccountListModel.swift in Sources */, - 2A7AF380248280CE001D74F9 /* DWDPSearchItemsFactory.m in Sources */, 2A3DC86E239717C2004B3DBA /* DWRecoverWalletCommand.m in Sources */, 2A9FFE832230FF4700956D5F /* DWSwitcherFormTableViewCell.m in Sources */, 2A0C699C23104588001B8C90 /* DWPaymentInput.m in Sources */, - 2AE9549D23D0C4F4003612B3 /* DWBaseContactsViewController.m in Sources */, 114D16B629812730009A124C /* OnlineAccountDetailsController.swift in Sources */, C9F451E92A0BDAE700825057 /* UIApplication+DashWallet.swift in Sources */, 110D1784298E68A8005BEB30 /* OnlineAccountInfoController.swift in Sources */, @@ -6564,14 +8500,12 @@ 2A8B9E7D23034AC100FF8653 /* DWAppGroupOptions.m in Sources */, 2A913EA423A799F3006A2A59 /* DWTransactionListDataItemObject.m in Sources */, 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, - 2A56EEFB2417E30F002C32F3 /* DWConfirmUsernameContentView.m in Sources */, C94D98282A53035D00F3BEE1 /* EnterAddressViewController.swift in Sources */, 47F2C67D28602D4F00C2B774 /* BasePageSheetViewController.swift in Sources */, - 2A827B7224B5CA1800A42042 /* DWListCollectionLayout.m in Sources */, 119E8D0429051F9900D406C1 /* CrowdNodeRequest.swift in Sources */, 0F6EDFD228C896BD000427E7 /* CoinbaseExchangeRateResponse.swift in Sources */, - 2A6688FD24BCB739008E10F0 /* DWDPTxItemView.m in Sources */, 117728A3297A7D24006F1553 /* CrowdNodePortalItem.swift in Sources */, + 75EAFBB12B04C057005ABC6A /* CustomHUDView.swift in Sources */, 47C661B628FE75A700028A8D /* BaseViewController.swift in Sources */, 4751CAC0296EFD2900F63AC4 /* AccountListController.swift in Sources */, 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, @@ -6581,11 +8515,8 @@ 4730586E295AB3BE004641DA /* UIDevice+Compatibility.swift in Sources */, 2A4431E222D7219E009BAF7F /* DWSeedWordView.m in Sources */, 2A7F3B1F238C651200DEA3EF /* DWSecurityStatusView.m in Sources */, - 2AD6E5602487E13F00B52F14 /* DWRequestsContentViewController.m in Sources */, 2ACCD8D1231D33EA00A96B62 /* DWAnimatedShapeLayer.m in Sources */, C9FAABB72AB799AE00878224 /* UpholdPortalModel.swift in Sources */, - 2ADC9D732462D4AD001D7C0D /* DWUserProfileNavigationTitleView.m in Sources */, - 2A9E7DC723F6928C00CDA1EE /* DWTextField.m in Sources */, C3DAD268246AA6F10001624F /* DWScreenshotWarningViewController.m in Sources */, 4751CACD297021EE00F63AC4 /* ConvertCryptoOrderPreviewController.swift in Sources */, 4708119F2990F56F003FCA3D /* TransactionDataItem.swift in Sources */, @@ -6593,8 +8524,6 @@ 2AD1CE8D22DCB3B600C99324 /* DWVerifySeedPhraseModel.m in Sources */, C9F42FA629DC092B001BC549 /* ReceiveViewController.swift in Sources */, 118B7A3F29865A3A00FBB6CC /* ConfirmationTransactionQRController.swift in Sources */, - 2ADB396924223D9B00A6F898 /* DWDashPayAnimationView.m in Sources */, - 2AEC5CBE24940EC200F4A689 /* DWDPOutgoingRequestNotificationObject.m in Sources */, 47E4B7B7292F85E800CE0EB6 /* Numbers+Dash.swift in Sources */, 478C983229433C5700FAA0F0 /* PaymentMethodsController.swift in Sources */, 47AE8C1328C5F0A700490F5E /* PointOfUseDetailsViewController.swift in Sources */, @@ -6604,15 +8533,11 @@ 2A4E535C22F335C200E5168A /* DWTransactionListDataProvider.m in Sources */, 2A1B7DA82323AF4300BA8C6A /* DWModalPopupTransition.m in Sources */, 2A7F3B1B238C646600DEA3EF /* DWAdvancedSecurityViewController.m in Sources */, - 2AE8B64423CDC0F50016F221 /* DWInputUsernameViewController.m in Sources */, 4751CAD6297024ED00F63AC4 /* OrderPreviewModel.swift in Sources */, - 2A7AF34924823167001D74F9 /* DWDPGenericImageItemView.m in Sources */, 2A885FD6244DFEF100B9F679 /* UIView+DWFindConstraints.m in Sources */, 2A1B7DA52323AC1F00BA8C6A /* DWModalPopupPresentationController.m in Sources */, 11517C8A294B11DD004FC7BF /* CrowdNodeBalance.swift in Sources */, 471DD1BA290A962B00E030C8 /* String+DashWallet.swift in Sources */, - C3DAD2C3247512BA0001624F /* DWBaseContactsContentViewController.m in Sources */, - 2AE2F0F9245C16C8001DD722 /* DWUserProfileViewController.m in Sources */, 2A0C69D723143B2F001B8C90 /* DWBaseModalViewController.m in Sources */, C956AF2D2A5CEA1F002FAB75 /* SheetViewController.swift in Sources */, C9C1335A2A561FFA00B66651 /* PasteboardContentView.swift in Sources */, @@ -6623,7 +8548,6 @@ 47838B8C29068F110003E8AB /* BaseResponse.swift in Sources */, 2AB3417723A92978004E37A7 /* DWDemoAdvancedSecurityViewController.m in Sources */, 474C721A298A803200475CA6 /* TxListTableViewCell.swift in Sources */, - 2ADC9D722462D4AD001D7C0D /* DWStretchyHeaderListCollectionLayout.m in Sources */, C9829CDE2A562822007132E4 /* TappableLabel.swift in Sources */, 111C3C50296D5A4700788E18 /* TxWithinTimePeriod.swift in Sources */, 0F6EDFC528C896BD000427E7 /* CoinbaseSwapeTradeRequest.swift in Sources */, @@ -6633,25 +8557,20 @@ 4751136F28D9B50E00223B77 /* CoinbaseInfoViewController.swift in Sources */, 2A9FFE7E2230FF4600956D5F /* DWSelectorFormCellModel.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, - 2A7AF378248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m in Sources */, + 755B4B222B0C903500B844F0 /* DWDateFormatter.swift in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, 47AE8C1128C5430300490F5E /* PointOfUseInfoViewController.swift in Sources */, 47C661B428FDCF7800028A8D /* ActionButtonViewController.swift in Sources */, 4774DCE528F4668B008CF87D /* PortalServiceItemCell.swift in Sources */, - 2A7AF35624824F97001D74F9 /* DWDPImageStatusCell.m in Sources */, - 111B8C00299BD973004A4129 /* WithdrawalConfirmationController.swift in Sources */, 2A7A7BC92347E0D700451078 /* DWBaseFormTableViewCell.m in Sources */, 4751CAC7296FAEBB00F63AC4 /* AccountCell.swift in Sources */, 2A913EA823A79AD2006A2A59 /* DWTransactionListDataProviderStub.m in Sources */, - 2A885FD02449F37A00B9F679 /* DWUserSearchModel.m in Sources */, - 2A7AF3502482374D001D74F9 /* DWDPBasicCell.m in Sources */, 47AE8BFF28C1306000490F5E /* DWExploreHeaderView.m in Sources */, 0F6EDFC628C896BD000427E7 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */, 47AC8413297822E000BD1B49 /* SpecifyAmountViewController.swift in Sources */, 2AFCB9C423BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.m in Sources */, 2A36A88B2350A05B0014DC60 /* DWBackupSeedPhraseViewController.m in Sources */, 114CFED0296469D9005F421B /* CrowdNodeDepositTx.swift in Sources */, - 2A7AF31C2480E6AD001D74F9 /* DWNotificationsModel.m in Sources */, 2A9FFF192233E56E00956D5F /* DWIntrinsicTableView.m in Sources */, 2A913E6623A11DFE006A2A59 /* DWURLActions.m in Sources */, C9903A5429E6A5F600535A4E /* KeysOverviewViewController.swift in Sources */, @@ -6667,7 +8586,7 @@ 471DD1B8290A92CD00E030C8 /* Tools.swift in Sources */, 478A2C7128DC554200AD1420 /* PortalModel.swift in Sources */, 75F51AAF2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift in Sources */, - 2A7AF39E2482FE46001D74F9 /* DWDateFormatter.m in Sources */, + 75C1F0452AE26AC0006929CA /* CoinJoinViewModel.swift in Sources */, 478C98262942DC2700FAA0F0 /* BuyDashViewController.swift in Sources */, 2A0C69D023143435001B8C90 /* DWModalDismissalAnimation.m in Sources */, 47CDEECE294A3CF2008AE06D /* UIViewController+DashWallet.swift in Sources */, @@ -6675,10 +8594,8 @@ 47AE8BF528C1306000490F5E /* MerchantListLocationOffCell.swift in Sources */, 47AE8C0028C1306000490F5E /* DWExploreTestnetContentsView.m in Sources */, 2A7A7BB6234792A600451078 /* DWMainMenuContentView.m in Sources */, - 2A7AF35324823EC8001D74F9 /* DWDPIncomingRequestCell.m in Sources */, 1186092529759C4B00279FCC /* CrowdNodeAPIConfirmationTx.swift in Sources */, 2A913E9023A31713006A2A59 /* UIViewController+DWEmbedding.m in Sources */, - 2A2CD71622F98FEA008C7BC9 /* DWShadowView.m in Sources */, 2A2CD71322F97B65008C7BC9 /* CALayer+DWShadow.m in Sources */, 47AE8BA528BFADD900490F5E /* MerchantDAO.swift in Sources */, 47AE8BAA28BFAE5800490F5E /* ExploreDatabaseSyncManager.swift in Sources */, @@ -6688,9 +8605,8 @@ 2A913E8223A30623006A2A59 /* DWHomeModelStub.m in Sources */, 2ADC9D1C24603C4F001D7C0D /* UISearchBar+DWAdditions.m in Sources */, 2A74F0042305C59700C475EB /* UIViewController+DWTxFilter.m in Sources */, - 2ACCA3AD24BE117300DB32DE /* DWProfileTxsFetchedDataSource.m in Sources */, + 75CED0A02ACFED200095F10C /* CoinbaseDepositResponse.swift in Sources */, 117ED4A828ED66F9006E3EE4 /* TransactionFilter.swift in Sources */, - C3DAD2C024747F580001624F /* DWSearchViewController.m in Sources */, 111C3C54296D6A2D00788E18 /* CrowdNodeWithdrawalReceivedTx.swift in Sources */, 47AE8C0328C1F0C600490F5E /* PointOfUseListSegmentedCell.swift in Sources */, 2A913E6823A1473A006A2A59 /* DWURLRequestHandler.m in Sources */, @@ -6703,18 +8619,14 @@ 47AE8BA628BFADD900490F5E /* AtmDAO.swift in Sources */, 475AE2B92974348F009A1055 /* App.swift in Sources */, 2A0C69A3231048DA001B8C90 /* DWPaymentProcessor.m in Sources */, - 2A7AF32824814A17001D74F9 /* DWNotificationsData.m in Sources */, C9F451F32A0C933700825057 /* SyncingHeaderView.swift in Sources */, 114CFED2296489CD005F421B /* MinimumDepositBanner.swift in Sources */, 47838B8F2906D7340003E8AB /* BalanceView.swift in Sources */, 2AD85A9F245881740045B480 /* DWQRScanStatusView.m in Sources */, 2A741DC62363A06000840ADF /* DWURLParser.m in Sources */, - 2A7AF36F24826737001D74F9 /* DWDPContactObject.m in Sources */, 2A8B9E6C23029D2B00FF8653 /* DWPaymentInputBuilder.m in Sources */, 2AC92C841FEB0A6D008CAEE0 /* DWQRScanViewController.m in Sources */, 2A9FFE802230FF4600956D5F /* DWSelectorFormTableViewCell.m in Sources */, - 2A3CCEF9242BB1B900300AF8 /* DWRegistrationCompletedViewController.m in Sources */, - 2ADC9D712462D4AD001D7C0D /* DWUserProfileHeaderView.m in Sources */, 47305872295C971F004641DA /* UIViewController+AlertPresenting.swift in Sources */, 2A858A0F237EE89C0097A7B5 /* DSWatchTransactionDataObject.m in Sources */, 47FA3B0229364991008D58DC /* HTTPClient.swift in Sources */, @@ -6724,44 +8636,34 @@ 47A2A2EC293E618600938DB7 /* CBUser.swift in Sources */, 47A2A2EE293E622700938DB7 /* CBSecureTokenService.swift in Sources */, C9F42FA129DA95F5001BC549 /* PayTableViewCell.swift in Sources */, - C3DAD2C8247538AA0001624F /* DWTitleActionHeaderView.m in Sources */, - 2ACCA3B524BF280A00DB32DE /* DWDPTxObject.m in Sources */, 0F71317728F436920072F454 /* ServiceOverviewTableCell.swift in Sources */, - 2AD6E5532487D50200B52F14 /* DWContactsModel.m in Sources */, 47838B87290670630003E8AB /* IntegrationViewController.swift in Sources */, 2AD1CE8022DC92BF00C99324 /* NSString+DWTextSize.m in Sources */, 47AE8C0528C1F74A00490F5E /* PointOfUseListFiltersCell.swift in Sources */, 47081199298CF57D003FCA3D /* TransactionListDataSource.swift in Sources */, - 2A5BD5952451DCAF00688A8D /* DWAllowedCharactersUsernameValidationRule.m in Sources */, 2A7A7BB22347927700451078 /* DWMainMenuViewController.m in Sources */, 47838B7D290133610003E8AB /* PointOfUseListFiltersViewController.swift in Sources */, 47AE8C1A28C6A21A00490F5E /* AllMerchantLocationsDataProvider.swift in Sources */, C9F451E52A0B986E00825057 /* MainTabbarController.swift in Sources */, 47B30D78290BFCA60080C326 /* NumberFormatter+DashWallet.swift in Sources */, - 2AEC5CBB2494045C00F4A689 /* DWNotificationsFetchedDataSource.m in Sources */, 47AF18082907B7880025803E /* BaseAmountModel.swift in Sources */, - 2A7AF3752482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m in Sources */, 4709C312287E78BD00B4BD48 /* SeedDB.swift in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, 2AD1CEA222DFC80900C99324 /* DWCenteredScrollView.m in Sources */, - 2A7AF36C248266FB001D74F9 /* DWDPEstablishedContactObject.m in Sources */, 2A9172C425233DC50024B4C5 /* DWPhraseRepairViewController.m in Sources */, 2A44314C22CF8801009BAF7F /* DWBiometricAuthModel.m in Sources */, 7527720F2AA9F58E0066557E /* TopperViewModel.swift in Sources */, 2ACCD8ED231ECCF000A96B62 /* DWNumberKeyboardInputViewAudioFeedback.m in Sources */, 11E47BAD28EB3A7D0097CFA0 /* CrowdNode+Constants.swift in Sources */, 47F006022971B1FF0029EB10 /* CurrencyExchanger.swift in Sources */, - 2A5BD5922451D68300688A8D /* DWMinLengthUsernameValidationRule.m in Sources */, C94946E12A25F037008A678D /* DemoMainTabbarViewController.swift in Sources */, 11AE3DD62997AA36000856EE /* MessageStatus.swift in Sources */, 2AD1CEAB22E18F1800C99324 /* DWGlobalOptions.m in Sources */, 2A4430E722CBB6EC009BAF7F /* AppDelegate.m in Sources */, C917023F29D44E0B008C034D /* SendReceivePageController.swift in Sources */, 2A7A7BD92348CB7300451078 /* DWSettingsMenuModel.m in Sources */, - 2A80F3D924DC55CD003E3B1E /* DWUserProfileSendRequestCell.m in Sources */, 478A2C7228DC909C00AD1420 /* BaseNavigationController.swift in Sources */, 47CDEECC294A2BAD008AE06D /* UIViewController+Coinbase.swift in Sources */, - 2A5BD59E2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m in Sources */, 472D13E1299E1F2F006903F1 /* CSVBuilder.swift in Sources */, 2A5E4548243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m in Sources */, 0F6EDFC428C896BD000427E7 /* CoinbaseUserAuthInformation.swift in Sources */, @@ -6789,29 +8691,24 @@ 4709C318287EA23000B4BD48 /* TxUserInfoDAO.swift in Sources */, 2A0C69E323155A0E001B8C90 /* DWModalContentView.m in Sources */, 2A9FFE042230FF2B00956D5F /* DWUpholdConstants.m in Sources */, - 2A5BD5982451DD0700688A8D /* DWMaxLengthUsernameValidationRule.m in Sources */, 0F6EDFC728C896BD000427E7 /* CoinbaseSwapeTradeResponse.swift in Sources */, 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */, 4774DCDF28F43AB4008CF87D /* ServiceItem.swift in Sources */, 47EE171729560DC200BA1986 /* ErrorPresentable.swift in Sources */, 2ACCD8E2231E507900A96B62 /* DWPinInputStepView.m in Sources */, - 2AC52AD6241BB5FC00D9A829 /* DWDashPaySetupFlowController.m in Sources */, 2A74EFED2305318000C475EB /* DWRecoverViewController.m in Sources */, - 2A919F9F24A65CE00018C9A3 /* DWDPAmountContactView.m in Sources */, 2A913EAE23A7AC86006A2A59 /* DWBaseTransactionListDataProvider.m in Sources */, 0F6EDFCC28C896BD000427E7 /* CoinbaseTransactionsRequest.swift in Sources */, 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */, 47F005FF297164600029EB10 /* UITableView+DashWallet.swift in Sources */, 47C661B228FDC72700028A8D /* TransferAmountViewController.swift in Sources */, C94F5E8E29D404850034FD57 /* ShortcutCell.swift in Sources */, - 2A7AF34424822AE0001D74F9 /* DWDPGenericContactRequestItemView.m in Sources */, 2A44312122CCA2A0009BAF7F /* UIColor+DWStyle.m in Sources */, FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */, 47AE8BF028C1306000490F5E /* AtmItemCell.swift in Sources */, 0F6EDFD728C896BD000427E7 /* CoinbaseService.swift in Sources */, 2A8B9E5622FEDF2900FF8653 /* DWControllerCollectionView.m in Sources */, 2A9FFDF52230FF1A00956D5F /* SFSafariViewController+DashWallet.m in Sources */, - 2AD6E54D2487CE0100B52F14 /* DWContactsDataSourceObject.m in Sources */, 474C7218298A422500475CA6 /* TransactionItemView.swift in Sources */, 474C7211298A1A9500475CA6 /* UIView+Reuse.swift in Sources */, 2A9FFE072230FF2B00956D5F /* DWUpholdClient.m in Sources */, @@ -6821,23 +8718,18 @@ C94F5E8C29D3FEC10034FD57 /* ShortcutsModel.swift in Sources */, 2A6300452328D07500827825 /* DWLockPinInputView.m in Sources */, 2A0C69AC23125074001B8C90 /* UIView+DWHUD.m in Sources */, + 75CED09E2ACFD0ED0095F10C /* CoinbaseDepositRequest.swift in Sources */, C94D98212A4CC78F00F3BEE1 /* DashInputField.swift in Sources */, 2A8B9E6822FFE4CC00FF8653 /* DWPayOptionModel.m in Sources */, - 2A7AF36924826681001D74F9 /* DWDPRespondedIncomingRequestObject.m in Sources */, 0F6EDFC928C896BD000427E7 /* CoinbaseTokenResponse.swift in Sources */, C9F42FB229DD5141001BC549 /* BackupInfoViewController.swift in Sources */, - 2A1AE79223F468CD00179A6E /* DWPlanetarySystemView.m in Sources */, 47C6E6E5291A68B6003FEDF2 /* AppliedFiltersView.swift in Sources */, 2A7A7BAE234770C900451078 /* DWCaptureSessionManager.m in Sources */, C94D982E2A544E8E00F3BEE1 /* UIButton+Dash.swift in Sources */, C956AF2B2A5CC97F002FAB75 /* ConfirmPaymentModel.swift in Sources */, 2A11F59F2194BD6200E7B563 /* DWDataMigrationManager.m in Sources */, - 2AD6E56A2487E1DB00B52F14 /* DWRequestsModel.m in Sources */, - 2A7AF35924824FEB001D74F9 /* DWDPTextStatusCell.m in Sources */, - 2AD6E55A2487D9AF00B52F14 /* DWContactsViewController.m in Sources */, 472D13E6299E3C82006903F1 /* AmountPreviewView.swift in Sources */, 4759D514292FEFFC002F20DC /* ModalNavigationController.swift in Sources */, - 2A919F9C24A4DCAD0018C9A3 /* DWDPSmallContactView.m in Sources */, 47A50F3B2913BC0900C70123 /* TransferAmountModel.swift in Sources */, 47305870295AD62B004641DA /* NavigationBarAppearanceCustomizable.swift in Sources */, 471DD1B6290A901200E030C8 /* AmountObject.swift in Sources */, @@ -6847,16 +8739,14 @@ 2A7A7C1D234B771400451078 /* DWLocalCurrencyModel.m in Sources */, 2A7A7BC3234797FC00451078 /* DWMainMenuModel.m in Sources */, FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */, - 2A885FCC2449F08700B9F679 /* DWUserSearchResultViewController.m in Sources */, - 2A7AF34C24823315001D74F9 /* DWDPGenericStatusItemView.m in Sources */, C9F42FA929DC09CF001BC549 /* Style.swift in Sources */, C917024129D462C6008C034D /* PayViewController.swift in Sources */, 479E7924287C00EC00D0F7D7 /* DatabaseConnection.swift in Sources */, + 75889B762AD296E700C17F5D /* CoinJoinInfoViewController.swift in Sources */, 2A9FFE822230FF4700956D5F /* DWSwitcherFormCellModel.m in Sources */, 2A74EFF823053ECE00C475EB /* DWIntrinsicTextView.m in Sources */, 47AE8C0128C1306000490F5E /* DWExploreTestnetViewController.m in Sources */, 471A2608289ACDA00056B7B2 /* AddressUserInfoDAO.swift in Sources */, - 2AEC5CC2249755BB00F4A689 /* DWDashPayContactsUpdater.m in Sources */, 2A0C69D323143568001B8C90 /* DWModalTransition.m in Sources */, 47AE8BF928C1306000490F5E /* MerchantsDataProvider.swift in Sources */, 119E8D082905409300D406C1 /* FullCrowdNodeSignUpTxSet.swift in Sources */, @@ -6866,18 +8756,14 @@ 47AE8BFB28C1306000490F5E /* ExploreMapAnnotationView.swift in Sources */, 2A1B7DC0232669FF00BA8C6A /* DWHomeViewController+DWBackupReminder.m in Sources */, 2A4E533822F023AB00E5168A /* DWHomeModel.m in Sources */, - 2ADC9D7624640A2B001D7C0D /* DWUserProfileModel.m in Sources */, 2A9CEBB922E1FA1000A50237 /* DWHomeViewController.m in Sources */, 1186092129758B2F00279FCC /* IsAddressInUse.swift in Sources */, - C3DAD26F246D46BF0001624F /* DWFetchedResultsDataSource.m in Sources */, 2A8B9E4022FD75C000FF8653 /* DWSegmentedControl.m in Sources */, 47AE8BF328C1306000490F5E /* MerchantItemCell.swift in Sources */, 478C98372943A60000FAA0F0 /* PaymentMethodCell.swift in Sources */, - 2AD6E5572487D8C000B52F14 /* DWContactsContentViewController.m in Sources */, 47EEE23B293F041E00049E0B /* CBUserManager.swift in Sources */, C909615B29F6535300002D82 /* DerivationPathKeysHeaderView.swift in Sources */, 4751CAD02970224D00F63AC4 /* ConvertCryptoOrderPreviewModel.swift in Sources */, - C3DAD2CC24757A210001624F /* DWContactsSearchDataSourceObject.m in Sources */, 47A2E3A92972B15F0032A63B /* RatesProvider.swift in Sources */, 47A2A2E9293E612900938DB7 /* CBAuth.swift in Sources */, 0F6EDFD128C896BD000427E7 /* CoinbaseCreateAddressesRequest.swift in Sources */, @@ -6890,15 +8776,12 @@ C94F5E8A29D3FCCF0034FD57 /* ShortcutAction.swift in Sources */, 2A0C69E0231556D6001B8C90 /* DWModalChevronView.m in Sources */, 2A58815921A5906C00FD4D2C /* DWBaseLegacyViewController.m in Sources */, - C3CA2030247E54C400158074 /* DWNoNotificationsCell.m in Sources */, C9F452012A0CE6C900825057 /* HomeView.swift in Sources */, 47A2E3AC2972B1A60032A63B /* CoinbaseRatesProvider.swift in Sources */, 472D13DF299DF5C6006903F1 /* TaxReportGenerator.swift in Sources */, 119E8D122909513F00D406C1 /* CrowdNodeError.swift in Sources */, 111C3C4E296C52F800788E18 /* WithdrawalLimit.swift in Sources */, 2A8B9E6522FFE43500FF8653 /* DWPayModel.m in Sources */, - 2A885FC82449B66500B9F679 /* DWSearchStateViewController.m in Sources */, - 2ACCA3A824BE0C7D00DB32DE /* DWDPTxListCell.m in Sources */, 47AE8C1828C63F9C00490F5E /* PointOfUseDetailsView.swift in Sources */, 47E4F7C7297596D9006BEA68 /* DSChain+DashWallet.m in Sources */, 1193FF3B2961960B004EA8D7 /* FromLabel.swift in Sources */, @@ -6907,33 +8790,23 @@ 0F6EDFCF28C896BD000427E7 /* CoinbaseAccountAddress.swift in Sources */, 2A7A7BBE2347950700451078 /* DWMainMenuTableViewCell.m in Sources */, 1141E4C2291BB12200ACDA9E /* CrowdNodeTransferViewController.swift in Sources */, - 2AB2373824488DB80081B62C /* DWUserSearchViewController.m in Sources */, 478483E829629C0700E05A5A /* CBAuthInterop.swift in Sources */, - 2A7AF38F2482BDF1001D74F9 /* UIFont+DWDPItem.m in Sources */, 4789D27029825F5400BAFEFA /* CoinbaseAmountViewController.swift in Sources */, 2A1F640F238D5C0900A9B505 /* DWSegmentSliderFormCellModel.m in Sources */, 2AD1CE6022D8E9D900C99324 /* DWSeedPhraseView.m in Sources */, - 2A3CCEFC242BB1DD00300AF8 /* DWDPAvatarView.m in Sources */, 47B30D7C29100ABA0080C326 /* UIStackView+DashWallet.swift in Sources */, - 2ADC9D7C24644E46001D7C0D /* DWUserProfileContactActionsCell.m in Sources */, 47AE8B9C28BFAD3600490F5E /* ExplorePointOfUse.swift in Sources */, - 2ACCA3B224BE3CDC00DB32DE /* DWUserProfileDataSourceObject.m in Sources */, - 2A56EF0624193AEB002C32F3 /* DWDashPayModel.m in Sources */, 117ED4A128EC86E0006E3EE4 /* TransactionObserver.swift in Sources */, 2A4431D522D52F67009BAF7F /* DWInfoTextCell.m in Sources */, 47EE17192959CDC200BA1986 /* ColorizedText.swift in Sources */, - 2A7AF37B2482756D001D74F9 /* DWDPPendingRequestObject.m in Sources */, C956AF282A5CAD4D002FAB75 /* TitleCell.swift in Sources */, - 2A80F39524D86201003E3B1E /* DWModalUserProfileViewController.m in Sources */, C9F42FA429DBC6E5001BC549 /* PaymentsViewController.swift in Sources */, - 2A7AF3832482954C001D74F9 /* DWDPContactsItemsFactory.m in Sources */, 4774DCDD28F43A68008CF87D /* ServiceDataSource.swift in Sources */, 47838B7A2900196F0003E8AB /* ConverterView.swift in Sources */, 2A0C69CA23142E11001B8C90 /* DWModalBaseAnimation.m in Sources */, C956AF262A5CACE6002FAB75 /* TitleValueCell.swift in Sources */, C9F42FB829DFC507001BC549 /* SpendableTransaction.swift in Sources */, 11ED906B29681773003784F9 /* StakingInfoDialogController.swift in Sources */, - 2AE8B64123CDB98A0016F221 /* DWCreateUsernameViewController.m in Sources */, 0F36937E2919A5DB007F4E91 /* TwoFactorAuthViewController.swift in Sources */, 471A260A289ACDF70056B7B2 /* Taxes.swift in Sources */, 2AD1CE9722DD0E8E00C99324 /* DWSeedWordModel+DWLayoutSupport.m in Sources */, @@ -6945,8 +8818,6 @@ 2A7A7BCD2347F01B00451078 /* DWSecurityMenuViewController.m in Sources */, 11BD738128E7356100A34022 /* CrowdNode.swift in Sources */, 47AE8B9F28BFAD8200490F5E /* SQLite+ExloreDash.swift in Sources */, - 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */, - 2A951CE423D1B92C00602824 /* DWBaseContactsModel.m in Sources */, 2A1F6415238FEEA900A9B505 /* DWAdvancedSecurityModel.m in Sources */, 47AE8BF828C1306000490F5E /* AtmDataProvider.swift in Sources */, 110C67952921147F006B580C /* GettingStartedViewController.swift in Sources */, @@ -6965,7 +8836,6 @@ 75E2F3CA2AA4D1B900C3B458 /* Topper.swift in Sources */, 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */, 47083B3B298948B70010AF71 /* CNCreateAccountTxDetailsViewController.swift in Sources */, - 2AB7303E24D0BC0400DCB420 /* UIColor+DWDashPay.m in Sources */, 1141E4C5291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift in Sources */, 47C6E6E329196D48003FEDF2 /* TerritoriesListCell.swift in Sources */, 2A4E531D22EA49FE00E5168A /* DWProgressView.m in Sources */, @@ -7017,6 +8887,776 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C9D2C6932A320AA000D15901 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C9D2C6942A320AA000D15901 /* DWReceiveModelStub.m in Sources */, + C9D2C6952A320AA000D15901 /* DWBaseAdvancedSecurityModel.m in Sources */, + C9D2C6962A320AA000D15901 /* DWBaseViewController.m in Sources */, + 755A22BD2B1385FD001F170D /* IconAttributedText.swift in Sources */, + C9D2C6972A320AA000D15901 /* DWBiometricAuthViewController.m in Sources */, + C9D2C6982A320AA000D15901 /* CrowdNodeWebService.swift in Sources */, + C943B4EE2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m in Sources */, + 75A8C1652AE5726B0042256E /* UsernameRequestsDAO.swift in Sources */, + C9D2C6992A320AA000D15901 /* DWStartViewController.m in Sources */, + C943B4C02A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m in Sources */, + C9D2C69A2A320AA000D15901 /* CrowdNodeAPI.swift in Sources */, + C9D2C69B2A320AA000D15901 /* DWStartModel.m in Sources */, + 754495DD2AE91B6300492817 /* GroupedRequestCell.swift in Sources */, + C9D2C69C2A320AA000D15901 /* DWAdvancedSecurityModelStub.m in Sources */, + C9D2C69D2A320AA000D15901 /* Foundation+Bitcoin.swift in Sources */, + C9D2C69E2A320AA000D15901 /* AtmDetailsView.swift in Sources */, + C9D2C69F2A320AA000D15901 /* DWPlaceholderFormTableViewCell.m in Sources */, + C9D2C6A02A320AA000D15901 /* DWTitleDetailCellView.m in Sources */, + 757118DC2B0F189D000AE391 /* VerifyIdenityViewController.swift in Sources */, + C9D2C6A12A320AA000D15901 /* AmountInputControl.swift in Sources */, + C9D2C6A22A320AA000D15901 /* DWSegmentSliderFormTableViewCell.m in Sources */, + C9D2C6A32A320AA000D15901 /* ApiCode.swift in Sources */, + C9D2C6A42A320AA000D15901 /* CoinbaseEntryPointModel.swift in Sources */, + C943B4F02A40A54600AF23C5 /* DWUserProfileNavigationTitleView.m in Sources */, + C9D2C6A52A320AA000D15901 /* SyncingAlertViewController.swift in Sources */, + C9D2C6A72A320AA000D15901 /* CrowdNodeResponse.swift in Sources */, + C9D2C6A82A320AA000D15901 /* FileManager+DashWallet.swift in Sources */, + C9D2C6A92A320AA000D15901 /* PointOfUseItemCell.swift in Sources */, + C956AF142A5B5949002FAB75 /* EnterAddressViewController.swift in Sources */, + C9D2C6AA2A320AA000D15901 /* DSTransaction+DashWallet.swift in Sources */, + C943B4C52A40A54600AF23C5 /* DWUserSearchModel.m in Sources */, + C9D2C6AC2A320AA000D15901 /* PayableViewController.swift in Sources */, + C9D2C6AD2A320AA000D15901 /* HairlineView.swift in Sources */, + C943B51B2A40A54600AF23C5 /* BaseInvitationViewController.swift in Sources */, + C9D2C6AE2A320AA000D15901 /* DWInitialViewController.m in Sources */, + C943B52D2A40A54600AF23C5 /* DWDashPayContactsUpdater.m in Sources */, + C9D2C6AF2A320AA000D15901 /* PortalViewController.swift in Sources */, + C9D2C6B02A320AA000D15901 /* DWSettingsMenuViewController.m in Sources */, + C9D2C6B12A320AA000D15901 /* AboutViewController.swift in Sources */, + 751B61C52ADFFD0700D1C2EF /* IntegrationViewController+Uphold.swift in Sources */, + C943B5022A40A54600AF23C5 /* DWDPGenericStatusItemView.m in Sources */, + C9D2C6B22A320AA000D15901 /* UISpringTimingParameters+DWInit.m in Sources */, + C9D2C6B42A320AA000D15901 /* DWToolsMenuModel.m in Sources */, + C9D2C6B62A320AA000D15901 /* NumberKeyboardButton.swift in Sources */, + C9D2C6B72A320AA000D15901 /* IsDefaultEmail.swift in Sources */, + C9D2C6B82A320AA000D15901 /* DWHomeViewController+DWSecureWalletDelegateImpl.m in Sources */, + C9D2C6BA2A320AA000D15901 /* DWUpholdAccountObject.m in Sources */, + C9D2C6BB2A320AA000D15901 /* DWFormTableViewController.m in Sources */, + 75C83B522B11B62400C33660 /* ConfirmRequestViewController.swift in Sources */, + C943B34D2A40A4C500AF23C5 /* DWInfoPopupViewController.m in Sources */, + 75F990822AFD1065006759AB /* UsernameRequestDetailsViewController.swift in Sources */, + C943B32A2A408CED00AF23C5 /* DWAvatarExternalSourceView.m in Sources */, + C9D2C6BC2A320AA000D15901 /* WalletKeysOverviewModel.swift in Sources */, + C9D2C6BD2A320AA000D15901 /* UIAssembly.swift in Sources */, + C943B4B32A40A54600AF23C5 /* DWContactsSearchDataSourceObject.m in Sources */, + C9D2C6BE2A320AA000D15901 /* DWLocationManager.swift in Sources */, + 7514E4EC2AF27E5900A0466F /* VotingHeaderView.swift in Sources */, + C943B3432A409F9E00AF23C5 /* UIImageView+DWDPAvatar.m in Sources */, + C943B5212A40A54600AF23C5 /* SuccessInvitationTopView.swift in Sources */, + C9D2C6BF2A320AA000D15901 /* FetchingNextPageCell.swift in Sources */, + C943B3172A408CED00AF23C5 /* DWErrorUpdatingUserProfileView.m in Sources */, + C943B4E32A40A54600AF23C5 /* DWPassthroughStackView.m in Sources */, + C943B32E2A408CED00AF23C5 /* DWAvatarGravatarViewController.m in Sources */, + C9D2C6C02A320AA000D15901 /* Transaction.swift in Sources */, + C943B3232A408CED00AF23C5 /* DWFaceDetector.m in Sources */, + C9D2C6C12A320AA000D15901 /* AllMerchantLocationsViewController.swift in Sources */, + C9D2C6C22A320AA000D15901 /* DWPaymentOutput.m in Sources */, + 753FDBEA2AEA422F0005EEC3 /* VotingPrefs.swift in Sources */, + C9D2C6C32A320AA000D15901 /* DWPayModelStub.m in Sources */, + C9D2C6C42A320AA000D15901 /* DWRecoverContentView.m in Sources */, + C9D2C6C52A320AA000D15901 /* DWSeedPhraseViewLayout.m in Sources */, + C943B5252A40A54600AF23C5 /* DWDPSmallContactView.m in Sources */, + C9D2C6C62A320AA000D15901 /* Coinbase+Error.swift in Sources */, + C9D2C6C72A320AA000D15901 /* DWPaymentOutput+DWView.m in Sources */, + C943B5092A40A54600AF23C5 /* UIFont+DWDPItem.m in Sources */, + C9D2C6C82A320AA000D15901 /* UIView+DWRecursiveSubview.m in Sources */, + C9D2C6C92A320AA000D15901 /* AddressStatus.swift in Sources */, + C9D2C6CA2A320AA000D15901 /* ExtendedPublicKeysModel.swift in Sources */, + C9D2C6CB2A320AA000D15901 /* OrderPreviewViewController.swift in Sources */, + C943B5342A40A54600AF23C5 /* DWListCollectionLayout.m in Sources */, + C9D2C6CC2A320AA000D15901 /* ActivePaymentMethodView.swift in Sources */, + C9D2C6CD2A320AA000D15901 /* BasicInfoController.swift in Sources */, + C9D2C6CE2A320AA000D15901 /* DWPreviewSeedPhraseModel.m in Sources */, + C943B5222A40A54600AF23C5 /* DWInvitationMessageView.m in Sources */, + C9D2C6CF2A320AA000D15901 /* DWModalPresentationAnimation.m in Sources */, + C9D2C6D02A320AA000D15901 /* UINavigationController+CrowdNode.swift in Sources */, + C9D2C6D12A320AA000D15901 /* DWReceiveModel.m in Sources */, + 751A57302B132FED00EF4925 /* RequestDetailsViewController.swift in Sources */, + C9D2C6D22A320AA000D15901 /* TransactionWrapper.swift in Sources */, + C9D2C6D32A320AA000D15901 /* Transactions.swift in Sources */, + C9D2C6D42A320AA000D15901 /* DWRecoverTextView.m in Sources */, + C943B5012A40A54600AF23C5 /* DWDPGenericItemView.m in Sources */, + C9D2C6D52A320AA000D15901 /* TxUserInfo.swift in Sources */, + C9D2C6D62A320AA000D15901 /* ExtendedPublicKeysViewController.swift in Sources */, + C9D2C6D82A320AA000D15901 /* AtmListViewController.swift in Sources */, + C9D2C6D92A320AA000D15901 /* TxDetailViewController.swift in Sources */, + C9D2C6DA2A320AA000D15901 /* NSAttributedString+Builder.swift in Sources */, + C943B4DE2A40A54600AF23C5 /* DWDPWelcomePageViewController.m in Sources */, + C9D2C6DB2A320AA000D15901 /* DWPreviewSeedPhraseContentView.m in Sources */, + C9D2C6DC2A320AA000D15901 /* DWPhoneWCSessionManager.m in Sources */, + C943B5232A40A54600AF23C5 /* DWNetworkUnavailableView.m in Sources */, + C943B3222A408CED00AF23C5 /* DWImgurInfoViewController.m in Sources */, + C9D2C6DD2A320AA000D15901 /* NumberKeyboard.swift in Sources */, + C9D2C6DE2A320AA000D15901 /* DWSeedPhraseTitledView.m in Sources */, + C9D2C6E02A320AA000D15901 /* CrowdNodeTopUpTx.swift in Sources */, + C943B3302A408CED00AF23C5 /* DWSaveAlertChildView.m in Sources */, + C9D2C6E12A320AA000D15901 /* BackupInfoItemView.swift in Sources */, + C9D2C6E32A320AA000D15901 /* AccountCreatingController.swift in Sources */, + C9D2C6E42A320AA000D15901 /* UIView+DWReuseHelper.m in Sources */, + C9D2C6E52A320AA000D15901 /* DWExtendedContainerViewController.m in Sources */, + C943B58B2A40ED6F00AF23C5 /* DWInputUsernameViewController.m in Sources */, + C9D2C6E62A320AA000D15901 /* CrowdNodeEndpoint.swift in Sources */, + C9D2C6E72A320AA000D15901 /* ServiceEntryPointModel.swift in Sources */, + C943B4B72A40A54600AF23C5 /* DWBaseContactsModel.m in Sources */, + C9D2C6E82A320AA000D15901 /* ExploreDash.swift in Sources */, + C9D2C6E92A320AA000D15901 /* DWToolsMenuViewController.m in Sources */, + C9D2C6EB2A320AA000D15901 /* UpholdAmountModel.swift in Sources */, + C943B4DF2A40A54600AF23C5 /* DWGetStartedContentViewController.m in Sources */, + C943B4F42A40A54600AF23C5 /* DWDPUserObject.m in Sources */, + C9D2C6EC2A320AA000D15901 /* DWModalInteractiveTransition.m in Sources */, + C943B31D2A408CED00AF23C5 /* DWUserProfileContainerView.m in Sources */, + C9D2C6F02A320AA000D15901 /* UIImage+Utils.m in Sources */, + C9D2C6F12A320AA000D15901 /* CNCreateAccountCell.swift in Sources */, + C943B4BE2A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m in Sources */, + C943B4C22A40A54600AF23C5 /* BaseCollectionReusableView.m in Sources */, + C9D2C6F22A320AA000D15901 /* DWSetupViewController.m in Sources */, + C9D2C6F32A320AA000D15901 /* ExploreDatabaseConnection.swift in Sources */, + C9D2C6F42A320AA000D15901 /* WithdrawalLimitsController.swift in Sources */, + C943B31B2A408CED00AF23C5 /* DWUpdatingUserProfileView.m in Sources */, + C9D2C6F52A320AA000D15901 /* CoinbaseTransactionResponse.swift in Sources */, + C943B52F2A40A54600AF23C5 /* DWNotificationsData.m in Sources */, + C9D2C6F72A320AA000D15901 /* TxDetailModel.swift in Sources */, + 757514E22B15DB510026AD8E /* ShadowView.swift in Sources */, + C9D2C6F82A320AA000D15901 /* NewAccountViewController.swift in Sources */, + C9D2C6F92A320AA000D15901 /* PointOfUseListModel.swift in Sources */, + C9D2C6FA2A320AA000D15901 /* NSPredicate+DWFullTextSearch.m in Sources */, + C9D2C6FB2A320AA000D15901 /* TxReclassifyTransactionsWhereToChangeViewController.swift in Sources */, + C9D2C6FC2A320AA000D15901 /* DWLocalCurrencyViewController.m in Sources */, + C9D2C6FD2A320AA000D15901 /* BadgeView.swift in Sources */, + C943B5162A40A54600AF23C5 /* DWCreateInvitationButton.m in Sources */, + C9D2C6FE2A320AA000D15901 /* HomeHeaderView.swift in Sources */, + C9D2C6FF2A320AA000D15901 /* ProgressView.swift in Sources */, + C9D2C7002A320AA000D15901 /* DWAmountInputValidator.m in Sources */, + 7513DA8A2AB17666005D55F6 /* SupportedTopperAssets.swift in Sources */, + C9D2C7012A320AA000D15901 /* ExplorePointOfUseListViewController.swift in Sources */, + C9D2C7022A320AA000D15901 /* CrowdNodeWebViewController.swift in Sources */, + C9D2C7032A320AA000D15901 /* UIViewController+DWDisplayError.m in Sources */, + C9D2C7042A320AA000D15901 /* BRAppleWatchData.m in Sources */, + C9D2C7052A320AA000D15901 /* DWRequestAmountContentView.m in Sources */, + C943B3312A408CED00AF23C5 /* DWProfileAboutCellModel.m in Sources */, + C943B4C42A40A54600AF23C5 /* DWSearchViewController.m in Sources */, + C943B58A2A40ED5F00AF23C5 /* DWUsernamePendingViewController.m in Sources */, + C9D2C7062A320AA000D15901 /* DWOnboardingModel.m in Sources */, + C9D2C7072A320AA000D15901 /* AmountInputTypeSwitcher.swift in Sources */, + C943B4FA2A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m in Sources */, + C9D2C7082A320AA000D15901 /* DWPlaceholderFormCellModel.m in Sources */, + C9D2C7092A320AA000D15901 /* DWOverlapControl.m in Sources */, + C9D2C70A2A320AA000D15901 /* CoinsToAddressTxFilter.swift in Sources */, + C9D2C95E2A386D7E00D15901 /* DWBasePressableControl.m in Sources */, + C943B4BF2A40A54600AF23C5 /* DWContactsSearchPlaceholderView.m in Sources */, + C9D2C70B2A320AA000D15901 /* DWDemoAppRootViewController.m in Sources */, + C9D2C70C2A320AA000D15901 /* DWUpholdLogoutTutorialViewController.m in Sources */, + 75A8C1672AE5734A0042256E /* UsernameRequest.swift in Sources */, + C9D2C70D2A320AA000D15901 /* CBAccount.swift in Sources */, + C9D2C70E2A320AA000D15901 /* Types.swift in Sources */, + C9D2C70F2A320AA000D15901 /* (null) in Sources */, + C943B33B2A408CED00AF23C5 /* DWUploadAvatarChildView.m in Sources */, + C9D2C7112A320AA000D15901 /* Coinbase.swift in Sources */, + C9D2C7122A320AA000D15901 /* SyncModel.swift in Sources */, + C9D2C7132A320AA000D15901 /* ReceiveContentView.swift in Sources */, + C943B4FB2A40A54600AF23C5 /* DWDPNewIncomingRequestNotificationObject.m in Sources */, + C956AF1B2A5C337F002FAB75 /* DWBorderedActionButton.m in Sources */, + C9D2C7142A320AA000D15901 /* AmountView.swift in Sources */, + C9D2C7152A320AA000D15901 /* DWBasePayViewController.m in Sources */, + C943B4AC2A40A54600AF23C5 /* DWContactsViewController.m in Sources */, + C9D2C7162A320AA000D15901 /* CrowdNodeTransferModel.swift in Sources */, + C9D2C7172A320AA000D15901 /* DWSetPinViewController.m in Sources */, + C943B3322A408CED00AF23C5 /* DWProfileDisplayNameCellModel.m in Sources */, + C9D2C7182A320AA000D15901 /* ConfirmOrderController.swift in Sources */, + C9D2C71B2A320AA000D15901 /* DWResetWalletInfoViewController.m in Sources */, + C9D2C71C2A320AA000D15901 /* DWLockScreenModel.m in Sources */, + C943B5182A40A54600AF23C5 /* DWInvitationPreviewViewController.m in Sources */, + C9D2C71D2A320AA000D15901 /* DWVerifySeedPhraseContentView.m in Sources */, + C9D2C71E2A320AA000D15901 /* Coinbase+Constants.swift in Sources */, + C9D2C71F2A320AA000D15901 /* PointOfUseListSearchCell.swift in Sources */, + C943B4FD2A40A54600AF23C5 /* DWDPRespondedIncomingRequestObject.m in Sources */, + C9D2C7202A320AA000D15901 /* ServiceDataProvider.swift in Sources */, + C9D2C7212A320AA000D15901 /* PaymentButton.swift in Sources */, + C9D2C7222A320AA000D15901 /* DWPreviewSeedPhraseViewController.m in Sources */, + 7573C2DF2B00C05900F4C347 /* CastVoteViewController.swift in Sources */, + C943B4B42A40A54600AF23C5 /* DWIncomingFetchedDataSource.m in Sources */, + C943B4B02A40A54600AF23C5 /* DWContactsContentViewController.m in Sources */, + C9D2C7242A320AA000D15901 /* WKWebView+CrowdNode.swift in Sources */, + C9D2C7252A320AA000D15901 /* SyncingActivityMonitor.swift in Sources */, + C9D2C7262A320AA000D15901 /* EmptyView.swift in Sources */, + C9D2C7272A320AA000D15901 /* (null) in Sources */, + C9D2C7282A320AA000D15901 /* DWQRScanModel.m in Sources */, + C9D2C7292A320AA000D15901 /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */, + C943B3292A408CED00AF23C5 /* DWExternalSourceViewController.m in Sources */, + C9D2C72A2A320AA000D15901 /* SyncView.swift in Sources */, + C9D2C72B2A320AA000D15901 /* SuccessfulOperationStatusViewController.swift in Sources */, + C943B5202A40A54600AF23C5 /* DWInvitationActionsView.m in Sources */, + C943B5172A40A54600AF23C5 /* DWHistoryHeaderView.m in Sources */, + C9D2C72C2A320AA000D15901 /* CustodialSwapsModel.swift in Sources */, + C9D2C72D2A320AA000D15901 /* DWLocalCurrencyTableViewCell.m in Sources */, + C9D2C72E2A320AA000D15901 /* DWRecoverModel.m in Sources */, + C9D2C72F2A320AA000D15901 /* DWCenteredTableView.m in Sources */, + C9D2C7302A320AA000D15901 /* DWOnboardingViewController.m in Sources */, + C9D2C7322A320AA000D15901 /* CrowdNode+UserDefaults.swift in Sources */, + C9D2C7342A320AA000D15901 /* DWPinView.m in Sources */, + C943B3242A408CED00AF23C5 /* DWRootEditProfileViewController.m in Sources */, + C9D2C7362A320AA000D15901 /* DWBaseReceiveModel.m in Sources */, + C943B52E2A40A54600AF23C5 /* DWNotificationsProvider.m in Sources */, + C943B4F12A40A54600AF23C5 /* DWUserProfileContactActionsCell.m in Sources */, + C9D2C7372A320AA000D15901 /* DWSegmentSlider.m in Sources */, + C943B4AE2A40A54600AF23C5 /* DWNoContactsViewController.m in Sources */, + C9D2C7382A320AA000D15901 /* CoinbasePlaceBuyOrderRequest.swift in Sources */, + C943B5262A40A54600AF23C5 /* DWDashPayAnimationView.m in Sources */, + C943B4EF2A40A54600AF23C5 /* DWUserProfileHeaderView.m in Sources */, + C9D2C7392A320AA000D15901 /* CoinbaseAmount.swift in Sources */, + C9D2C73A2A320AA000D15901 /* DWDPRegistrationErrorTableViewCell.m in Sources */, + C9D2C73B2A320AA000D15901 /* SendAmountModel.swift in Sources */, + 757514E52B1735370026AD8E /* DPWelcomeMenuView.swift in Sources */, + C9D2C73C2A320AA000D15901 /* DWDecimalInputValidator.m in Sources */, + C9D2C73D2A320AA000D15901 /* PaymentMethods.swift in Sources */, + C9D2C73E2A320AA000D15901 /* DWTitleDetailCellModel.m in Sources */, + 7514E4EA2AF2351F00A0466F /* VotingFiltersModel.swift in Sources */, + C943B4E22A40A54600AF23C5 /* DWPassthroughView.m in Sources */, + C943B5332A40A54600AF23C5 /* DWNotificationsModel.m in Sources */, + C9D2C73F2A320AA000D15901 /* BuyDashModel.swift in Sources */, + C9D2C7402A320AA000D15901 /* MerchantListViewController.swift in Sources */, + C9D2C7412A320AA000D15901 /* DWUpholdCardObject.m in Sources */, + C9D2C7422A320AA000D15901 /* DWIntrinsicCollectionView.m in Sources */, + C9D2C7432A320AA000D15901 /* DWRootModelStub.m in Sources */, + C943B3272A408CED00AF23C5 /* DWAvatarEditSelectorViewController.m in Sources */, + C9D2C7452A320AA000D15901 /* UIDevice+DashWallet.m in Sources */, + C930784B2A6AD56B00906E4B /* SheetViewController.swift in Sources */, + C9D2C7462A320AA000D15901 /* CBAccountManager.swift in Sources */, + C9D2C7472A320AA000D15901 /* FailedOperationStatusViewController.swift in Sources */, + C9D2C7482A320AA000D15901 /* UIPanGestureRecognizer+DWProjected.m in Sources */, + C956AF182A5C3306002FAB75 /* DWPressableButton.m in Sources */, + C943B50A2A40A54600AF23C5 /* DWDPContactsItemsFactory.m in Sources */, + C93078492A6AD4FC00906E4B /* UpholdConfirmViewController.swift in Sources */, + C9D2C7492A320AA000D15901 /* DWCurrencyObject.m in Sources */, + C943B52B2A40A54600AF23C5 /* DWDashPayContactsActions.m in Sources */, + C956AF102A5B592E002FAB75 /* UIView+Dash.swift in Sources */, + C943B50B2A40A54600AF23C5 /* DWDPSearchItemsFactory.m in Sources */, + C9D2C74A2A320AA000D15901 /* ShortcutsView.swift in Sources */, + C9D2C74B2A320AA000D15901 /* DWFormSectionModel.m in Sources */, + C9D2C74C2A320AA000D15901 /* (null) in Sources */, + C9D2C74D2A320AA000D15901 /* CoinbasePlaceBuyOrderResponse.swift in Sources */, + C9D2C74E2A320AA000D15901 /* ExploreMapView.swift in Sources */, + C943B32F2A408CED00AF23C5 /* DWSaveAlertViewController.m in Sources */, + C930784C2A6AD59700906E4B /* TitleValueCell.swift in Sources */, + C943B4AB2A40A54600AF23C5 /* DWContactsPlaceholderViewController.m in Sources */, + C9D2C74F2A320AA000D15901 /* DWSeedPhraseRow.m in Sources */, + C943B5132A40A54600AF23C5 /* DWHistoryFilterContentView.m in Sources */, + C943B4BC2A40A54600AF23C5 /* DWRootContactsViewController.m in Sources */, + C943B4C32A40A54600AF23C5 /* DWTitleActionHeaderView.m in Sources */, + C9D2C7502A320AA000D15901 /* ServiceOverviewViewController.swift in Sources */, + C9D2C7512A320AA000D15901 /* AccountListModel.swift in Sources */, + C9D2C7532A320AA000D15901 /* DWRecoverWalletCommand.m in Sources */, + C9D2C7542A320AA000D15901 /* DWSwitcherFormTableViewCell.m in Sources */, + C9D2C7552A320AA000D15901 /* DWPaymentInput.m in Sources */, + C9D2C7572A320AA000D15901 /* OnlineAccountDetailsController.swift in Sources */, + C9D2C7582A320AA000D15901 /* UIApplication+DashWallet.swift in Sources */, + C9D2C7592A320AA000D15901 /* OnlineAccountInfoController.swift in Sources */, + C9D2C75A2A320AA000D15901 /* PaymentController.swift in Sources */, + C9D2C75B2A320AA000D15901 /* CALayer+MBAnimationPersistence.m in Sources */, + C9D2C75C2A320AA000D15901 /* UIView+DWAnimations.m in Sources */, + C9D2C75D2A320AA000D15901 /* VerifiedSuccessfullyViewController.swift in Sources */, + C9D2C75E2A320AA000D15901 /* KeyboardHeader.swift in Sources */, + C9D2C75F2A320AA000D15901 /* DWUpholdOTPViewController.m in Sources */, + C9D2C7602A320AA000D15901 /* DWAppGroupOptions.m in Sources */, + C943B5352A40A54600AF23C5 /* DWNotificationsViewController.m in Sources */, + C9D2C7612A320AA000D15901 /* DWTransactionListDataItemObject.m in Sources */, + C943B3362A408CED00AF23C5 /* DWEditProfileBaseCell.m in Sources */, + C930784A2A6AD52400906E4B /* UpholdConfirmTransferModel.swift in Sources */, + C9D2C7622A320AA000D15901 /* DWUpholdAPIProvider.m in Sources */, + C943B5102A40A54600AF23C5 /* DWSendInviteFirstStepViewController.m in Sources */, + C943B4E72A40A54600AF23C5 /* DWUserProfileDataSourceObject.m in Sources */, + C943B50C2A40A54600AF23C5 /* DPAlertViewController+DWInvite.m in Sources */, + C943B3352A408CED00AF23C5 /* DWEditProfileTextViewCell.m in Sources */, + C9D2C7642A320AA000D15901 /* BasePageSheetViewController.swift in Sources */, + C943B4B92A40A54600AF23C5 /* DWRequestsContentViewController.m in Sources */, + C943B54E2A40B6B500AF23C5 /* DWColoredButton.m in Sources */, + C9D2C7662A320AA000D15901 /* CrowdNodeRequest.swift in Sources */, + C9D2C7672A320AA000D15901 /* CoinbaseExchangeRateResponse.swift in Sources */, + C9D2C7692A320AA000D15901 /* (null) in Sources */, + C9D2C76A2A320AA000D15901 /* CrowdNodePortalItem.swift in Sources */, + C943B4C82A40A54600AF23C5 /* DWSearchStateViewController.m in Sources */, + C9D2C76B2A320AA000D15901 /* BaseViewController.swift in Sources */, + C9D2C76C2A320AA000D15901 /* AccountListController.swift in Sources */, + C9D2C76D2A320AA000D15901 /* DWUpholdTransactionObject.m in Sources */, + C943B5052A40A54600AF23C5 /* DWDPIncomingRequestCell.m in Sources */, + C9D2C76E2A320AA000D15901 /* DWBaseSeedViewController.m in Sources */, + C943B51D2A40A54600AF23C5 /* InvitationBottomView.swift in Sources */, + C943B32D2A408CED00AF23C5 /* DWAvatarPublicURLViewController.m in Sources */, + C9D2C76F2A320AA000D15901 /* DWProgressAnimator.mm in Sources */, + C943B3192A408CED00AF23C5 /* DWDPUpdateProfileModel.m in Sources */, + C9D2C7702A320AA000D15901 /* CrowdNodeModel.swift in Sources */, + 75889B792AD2A04900C17F5D /* CoinJoinInfoViewController.swift in Sources */, + C9D2C7712A320AA000D15901 /* UIDevice+Compatibility.swift in Sources */, + C9D2C7722A320AA000D15901 /* DWSeedWordView.m in Sources */, + C9D2C7732A320AA000D15901 /* DWSecurityStatusView.m in Sources */, + C9D2C7752A320AA000D15901 /* DWAnimatedShapeLayer.m in Sources */, + C943B4BD2A40A54600AF23C5 /* DWGlobalMatchHeaderView.m in Sources */, + C9D2C7782A320AA000D15901 /* DWScreenshotWarningViewController.m in Sources */, + C943B4B82A40A54600AF23C5 /* DWContactsModel.m in Sources */, + C9D2C7792A320AA000D15901 /* ConvertCryptoOrderPreviewController.swift in Sources */, + C9D2C77A2A320AA000D15901 /* TransactionDataItem.swift in Sources */, + C9D2C77B2A320AA000D15901 /* DWSetPinModel.m in Sources */, + C9D2C77C2A320AA000D15901 /* DWVerifySeedPhraseModel.m in Sources */, + C9D2C77D2A320AA000D15901 /* ReceiveViewController.swift in Sources */, + C9D2C77E2A320AA000D15901 /* ConfirmationTransactionQRController.swift in Sources */, + C9D2C7812A320AA000D15901 /* Numbers+Dash.swift in Sources */, + C9D2C7822A320AA000D15901 /* PaymentMethodsController.swift in Sources */, + C9D2C7832A320AA000D15901 /* PointOfUseDetailsViewController.swift in Sources */, + C9D2C7842A320AA000D15901 /* PointOfUseLocationServicePopup.swift in Sources */, + C9D2C7852A320AA000D15901 /* BalanceModel.swift in Sources */, + C9D2C7862A320AA000D15901 /* TxReclassifyTransactionsInfoViewController.swift in Sources */, + C9D2C7872A320AA000D15901 /* DWTransactionListDataProvider.m in Sources */, + C943B5902A40ED6F00AF23C5 /* DWFirstUsernameSymbolValidationRule.m in Sources */, + C943B53E2A40A6BE00AF23C5 /* DPAlertViewController.m in Sources */, + 75C1F09E2AFF675400FE675E /* EnterVotingKeyViewController.swift in Sources */, + C956AF132A5B5949002FAB75 /* EnterAddressModel.swift in Sources */, + C9D2C9692A3875BA00D15901 /* DWCurrentUserProfileModel.m in Sources */, + C9D2C7882A320AA000D15901 /* DWModalPopupTransition.m in Sources */, + C9D2C7892A320AA000D15901 /* DWAdvancedSecurityViewController.m in Sources */, + 754495DF2AE91D3500492817 /* UsernameRequestCell.swift in Sources */, + C9D2C78B2A320AA000D15901 /* OrderPreviewModel.swift in Sources */, + C9D2C78D2A320AA000D15901 /* UIView+DWFindConstraints.m in Sources */, + C9D2C78E2A320AA000D15901 /* DWModalPopupPresentationController.m in Sources */, + C9D2C78F2A320AA000D15901 /* CrowdNodeBalance.swift in Sources */, + C9D2C7902A320AA000D15901 /* String+DashWallet.swift in Sources */, + C9D2C7932A320AA000D15901 /* DWBaseModalViewController.m in Sources */, + C9D2C7942A320AA000D15901 /* DWSecurityMenuModel.m in Sources */, + C943B32C2A408CED00AF23C5 /* DWAvatarExternalSourceConfig.m in Sources */, + C9D2C7952A320AA000D15901 /* KeysOverviewCell.swift in Sources */, + C93078482A6AD4F500906E4B /* ConfirmPaymentViewController.swift in Sources */, + C9D2C7962A320AA000D15901 /* UIViewController+DWShareReceiveInfo.m in Sources */, + C9D2C7972A320AA000D15901 /* OnlineAccountConfirmationController.swift in Sources */, + C943B4F52A40A54600AF23C5 /* DWDPIncomingRequestObject.m in Sources */, + C943B4BA2A40A54600AF23C5 /* DWRequestsModel.m in Sources */, + C9D2C7982A320AA000D15901 /* BaseResponse.swift in Sources */, + C9D2C7992A320AA000D15901 /* DWDemoAdvancedSecurityViewController.m in Sources */, + C943B3212A408CED00AF23C5 /* DWImgurItemView.m in Sources */, + C9D2C79A2A320AA000D15901 /* TxListTableViewCell.swift in Sources */, + C9D2C79C2A320AA000D15901 /* TxWithinTimePeriod.swift in Sources */, + C956AF1E2A5C3397002FAB75 /* DWBaseActionButton.m in Sources */, + 75B2F45D2B0B1EC1004C071A /* RequestUsernameViewController.swift in Sources */, + C9D2C79D2A320AA000D15901 /* CoinbaseSwapeTradeRequest.swift in Sources */, + C943B4DB2A40A54600AF23C5 /* DWDPWelcomeCollectionViewController.m in Sources */, + C9D2C79E2A320AA000D15901 /* UIFont+DWFont.m in Sources */, + C9D2C79F2A320AA000D15901 /* CustodialSwapsViewController.swift in Sources */, + C9D2C7A02A320AA000D15901 /* NSAttributedString+DWHighlightText.m in Sources */, + C9D2C7A12A320AA000D15901 /* CoinbaseInfoViewController.swift in Sources */, + C9D2C7A22A320AA000D15901 /* DWSelectorFormCellModel.m in Sources */, + C943B5142A40A54600AF23C5 /* DWHistoryFilterViewController.m in Sources */, + C9D2C7A32A320AA000D15901 /* DWVersionManager.m in Sources */, + C943B4AF2A40A54600AF23C5 /* DWInvitationSuggestionView.m in Sources */, + C9D2C7A52A320AA000D15901 /* DWModalPresentationController.m in Sources */, + C9D2C7A62A320AA000D15901 /* PointOfUseInfoViewController.swift in Sources */, + C9D2C7A72A320AA000D15901 /* ActionButtonViewController.swift in Sources */, + C9D2C7A82A320AA000D15901 /* PortalServiceItemCell.swift in Sources */, + C956AF122A5B5949002FAB75 /* PasteboardContentView.swift in Sources */, + C9D2C7AA2A320AA000D15901 /* (null) in Sources */, + C943B5002A40A54600AF23C5 /* DWDPTxItemView.m in Sources */, + C9D2C7AB2A320AA000D15901 /* DWBaseFormTableViewCell.m in Sources */, + C9D2C7AC2A320AA000D15901 /* AccountCell.swift in Sources */, + C9D2C7AD2A320AA000D15901 /* DWTransactionListDataProviderStub.m in Sources */, + C943B33A2A408CED00AF23C5 /* DWUploadAvatarModel.m in Sources */, + C943B3392A408CED00AF23C5 /* DWUploadAvatarViewController.m in Sources */, + C9D2C7B02A320AA000D15901 /* DWExploreHeaderView.m in Sources */, + C9D2C7B12A320AA000D15901 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */, + C9D2C7B22A320AA000D15901 /* (null) in Sources */, + C9D2C7B32A320AA000D15901 /* SpecifyAmountViewController.swift in Sources */, + C943B4EA2A40A54600AF23C5 /* DWUserProfileViewController.m in Sources */, + C943B5922A40ED7B00AF23C5 /* DWTextField.m in Sources */, + C9D2C7B42A320AA000D15901 /* DWUpholdTransactionObject+DWView.m in Sources */, + C9D2C7B52A320AA000D15901 /* DWBackupSeedPhraseViewController.m in Sources */, + C943B54A2A40B52F00AF23C5 /* NSLayoutConstraint+DWAutolayout.m in Sources */, + C943B5892A40ED5A00AF23C5 /* DWDashPaySetupFlowController.m in Sources */, + C9D2C7B62A320AA000D15901 /* CrowdNodeDepositTx.swift in Sources */, + C943B5962A40EDC400AF23C5 /* DWRegistrationCompletedViewController.m in Sources */, + C9D2C7B92A320AA000D15901 /* DWIntrinsicTableView.m in Sources */, + C9D2C7BA2A320AA000D15901 /* DWURLActions.m in Sources */, + C9D2C7BB2A320AA000D15901 /* KeysOverviewViewController.swift in Sources */, + C943B4FE2A40A54600AF23C5 /* DWDPTextStatusCell.m in Sources */, + C9D2C7BC2A320AA000D15901 /* AccountRepository.swift in Sources */, + C9D2C7BD2A320AA000D15901 /* DWSharedUIConstants.m in Sources */, + C9D2C7BE2A320AA000D15901 /* BRAppleWatchTransactionData.m in Sources */, + C956AF212A5C33E5002FAB75 /* DWButton.m in Sources */, + C9D2C7BF2A320AA000D15901 /* TerritoriesListViewController.swift in Sources */, + C9D2C7C02A320AA000D15901 /* HomeHeaderModel.swift in Sources */, + C943B5942A40ED7B00AF23C5 /* DWPlanetarySystemView.m in Sources */, + C9D2C7C12A320AA000D15901 /* TerritoryListModel.swift in Sources */, + C9D2C7C22A320AA000D15901 /* (null) in Sources */, + C9D2C7C32A320AA000D15901 /* DWDPRegistrationStatus.m in Sources */, + C9D2C7C42A320AA000D15901 /* CurrencyExchanger_Objc.m in Sources */, + 7573C2E12B01103900F4C347 /* VotingFilterItemSelectableCell.swift in Sources */, + C943B32B2A408CED00AF23C5 /* DWAvatarExternalLoadingView.m in Sources */, + C943B5972A40EDDA00AF23C5 /* DWConfirmUsernameViewController.m in Sources */, + C9D2C7C52A320AA000D15901 /* GiftCardInfoViewController.swift in Sources */, + C9D2C7C62A320AA000D15901 /* Tools.swift in Sources */, + C9D2C7C72A320AA000D15901 /* PortalModel.swift in Sources */, + C9D2C7C92A320AA000D15901 /* BuyDashViewController.swift in Sources */, + C956AF0D2A5B592E002FAB75 /* TappableLabel.swift in Sources */, + C9D2C7CA2A320AA000D15901 /* DWModalDismissalAnimation.m in Sources */, + C9D2C7CB2A320AA000D15901 /* (null) in Sources */, + C9D2C7CD2A320AA000D15901 /* UIViewController+DashWallet.swift in Sources */, + C9D2C7CE2A320AA000D15901 /* CrowdNodeCell.swift in Sources */, + 751B61C62ADFFD0A00D1C2EF /* IntegrationViewController+Coinbase.swift in Sources */, + C9D2C7CF2A320AA000D15901 /* MerchantListLocationOffCell.swift in Sources */, + C9D2C7D02A320AA000D15901 /* DWExploreTestnetContentsView.m in Sources */, + C9D2C7D12A320AA000D15901 /* DWMainMenuContentView.m in Sources */, + C9D2C7D32A320AA000D15901 /* CrowdNodeAPIConfirmationTx.swift in Sources */, + C9D2C7D42A320AA000D15901 /* UIViewController+DWEmbedding.m in Sources */, + C9D2C7D62A320AA000D15901 /* CALayer+DWShadow.m in Sources */, + C9D2C7D72A320AA000D15901 /* MerchantDAO.swift in Sources */, + C9D2C7D82A320AA000D15901 /* ExploreDatabaseSyncManager.swift in Sources */, + C943B5312A40A54600AF23C5 /* DWNoNotificationsCell.m in Sources */, + 751B61C42ADFF9D000D1C2EF /* CoinbaseDepositRequest.swift in Sources */, + C9D2C7D92A320AA000D15901 /* DWOnboardingCollectionViewCell.m in Sources */, + C943B4B22A40A54600AF23C5 /* DWContactsDataSourceObject.m in Sources */, + C9D2C7DA2A320AA000D15901 /* CrowdNodeErrorResponse.swift in Sources */, + C943B4F72A40A54600AF23C5 /* DWDPTxObject.m in Sources */, + C9D2C7DB2A320AA000D15901 /* DWHomeViewController+DWShortcuts.m in Sources */, + C9D2C7DC2A320AA000D15901 /* DWHomeModelStub.m in Sources */, + C9D2C7DD2A320AA000D15901 /* UISearchBar+DWAdditions.m in Sources */, + C943B5122A40A54600AF23C5 /* DWInvitationHistoryModel.m in Sources */, + C943B31A2A408CED00AF23C5 /* DWCurrentUserProfileView.m in Sources */, + 751B61C22ADFF99D00D1C2EF /* CoinbaseDepositResponse.swift in Sources */, + C9D2C7DE2A320AA000D15901 /* UIViewController+DWTxFilter.m in Sources */, + C943B4F32A40A54600AF23C5 /* DWDPEstablishedContactObject.m in Sources */, + C9D2C7E02A320AA000D15901 /* TransactionFilter.swift in Sources */, + C9D2C7E22A320AA000D15901 /* CrowdNodeWithdrawalReceivedTx.swift in Sources */, + C943B4B62A40A54600AF23C5 /* DWFetchedResultsDataSource.m in Sources */, + C9D2C7E32A320AA000D15901 /* PointOfUseListSegmentedCell.swift in Sources */, + 7513DA892AB17606005D55F6 /* Topper.swift in Sources */, + C943B33C2A408CED00AF23C5 /* DWHourGlassAnimationView.m in Sources */, + C956AF0E2A5B592E002FAB75 /* UIControl+Dash.swift in Sources */, + C9D2C7E42A320AA000D15901 /* DWURLRequestHandler.m in Sources */, + C9D2C7E52A320AA000D15901 /* CoinbaseAPIEndpoint.swift in Sources */, + C9D2C7E62A320AA000D15901 /* ConfirmOrderCells.swift in Sources */, + C9D2C7E72A320AA000D15901 /* CoinbaseUserAccountData.swift in Sources */, + C943B3202A408CED00AF23C5 /* DWImgurInfoChildView.m in Sources */, + C9D2C7E82A320AA000D15901 /* DWDPRegistrationDoneTableViewCell.m in Sources */, + C9D2C7E92A320AA000D15901 /* AtmDAO.swift in Sources */, + C9D2C7EA2A320AA000D15901 /* App.swift in Sources */, + 755E6DFE2A99E7A000A42870 /* DWInvitationSetupState.m in Sources */, + C9D2C7EB2A320AA000D15901 /* DWPaymentProcessor.m in Sources */, + C9D2C7ED2A320AA000D15901 /* SyncingHeaderView.swift in Sources */, + C9D2C7EE2A320AA000D15901 /* MinimumDepositBanner.swift in Sources */, + C943B4F92A40A54600AF23C5 /* DWDPAcceptedRequestNotificationObject.m in Sources */, + C9D2C7EF2A320AA000D15901 /* BalanceView.swift in Sources */, + C9D2C7F02A320AA000D15901 /* DWQRScanStatusView.m in Sources */, + C9D2C7F12A320AA000D15901 /* DWURLParser.m in Sources */, + C9D2C7F32A320AA000D15901 /* DWPaymentInputBuilder.m in Sources */, + C9D2C7F42A320AA000D15901 /* DWQRScanViewController.m in Sources */, + C9D2C7F52A320AA000D15901 /* DWSelectorFormTableViewCell.m in Sources */, + C9D2C7F82A320AA000D15901 /* UIViewController+AlertPresenting.swift in Sources */, + C9D2C7F92A320AA000D15901 /* DSWatchTransactionDataObject.m in Sources */, + C9D2C7FA2A320AA000D15901 /* HTTPClient.swift in Sources */, + C956AF0C2A5B591A002FAB75 /* DashInputField.swift in Sources */, + C9D2C7FB2A320AA000D15901 /* DWPasteboardAddressExtractor.m in Sources */, + C943B4F22A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m in Sources */, + C9D2C7FC2A320AA000D15901 /* ViewModel+Coinbase.swift in Sources */, + C943B52C2A40A54600AF23C5 /* DSBlockchainIdentity+DWDisplayName.m in Sources */, + C9D2C7FD2A320AA000D15901 /* CNCreateAccountTxDetailsModel.swift in Sources */, + C9D2C7FE2A320AA000D15901 /* CBUser.swift in Sources */, + C9D2C7FF2A320AA000D15901 /* CBSecureTokenService.swift in Sources */, + C9D2C8002A320AA000D15901 /* PayTableViewCell.swift in Sources */, + C9D2C8032A320AA000D15901 /* ServiceOverviewTableCell.swift in Sources */, + C9D2C8052A320AA000D15901 /* IntegrationViewController.swift in Sources */, + C9D2C8062A320AA000D15901 /* NSString+DWTextSize.m in Sources */, + C9D2C8072A320AA000D15901 /* PointOfUseListFiltersCell.swift in Sources */, + C9D2C8082A320AA000D15901 /* TransactionListDataSource.swift in Sources */, + 7565D5952B08B35F0092C9BA /* RequestUsernameViewModel.swift in Sources */, + C9D2C80A2A320AA000D15901 /* DWMainMenuViewController.m in Sources */, + C9D2C80B2A320AA000D15901 /* PointOfUseListFiltersViewController.swift in Sources */, + C9D2C80C2A320AA000D15901 /* AllMerchantLocationsDataProvider.swift in Sources */, + C9D2C80D2A320AA000D15901 /* MainTabbarController.swift in Sources */, + C9D2C80E2A320AA000D15901 /* NumberFormatter+DashWallet.swift in Sources */, + C9D2C8102A320AA000D15901 /* BaseAmountModel.swift in Sources */, + C943B3182A408CED00AF23C5 /* DSBlockchainIdentity+DWDisplayTitleSubtitle.m in Sources */, + C9D2C8122A320AA000D15901 /* SeedDB.swift in Sources */, + C9D2C8132A320AA000D15901 /* DWPinField.m in Sources */, + C943B3252A408CED00AF23C5 /* DWEditProfileViewController.m in Sources */, + C943B4DC2A40A54600AF23C5 /* DWInvitationFlowViewController.m in Sources */, + C943B59C2A40EE5300AF23C5 /* DWNetworkErrorViewController.m in Sources */, + C9D2C8142A320AA000D15901 /* DWCenteredScrollView.m in Sources */, + C9D2C8162A320AA000D15901 /* DWPhraseRepairViewController.m in Sources */, + C9D2C8172A320AA000D15901 /* DWBiometricAuthModel.m in Sources */, + C943B52A2A40A54600AF23C5 /* UIImageView+DWDPAvatar.m in Sources */, + C9D2C8182A320AA000D15901 /* DWNumberKeyboardInputViewAudioFeedback.m in Sources */, + C943B5042A40A54600AF23C5 /* DWDPImageStatusCell.m in Sources */, + C943B4AD2A40A54600AF23C5 /* DWBaseContactsContentViewController.m in Sources */, + C9D2C8192A320AA000D15901 /* CrowdNode+Constants.swift in Sources */, + C9D2C81A2A320AA000D15901 /* CurrencyExchanger.swift in Sources */, + C9D2C9622A386DA200D15901 /* DWDPWelcomeView.m in Sources */, + C943B55E2A40E6F200AF23C5 /* DWFilterHeaderView.m in Sources */, + C943B5072A40A54600AF23C5 /* DWDPBasicCell.m in Sources */, + C943B4EC2A40A54600AF23C5 /* DWUserProfileSendRequestCell.m in Sources */, + C9D2C81C2A320AA000D15901 /* DemoMainTabbarViewController.swift in Sources */, + C930784D2A6AD59A00906E4B /* TitleCell.swift in Sources */, + C943B4C62A40A54600AF23C5 /* DWUserSearchViewController.m in Sources */, + C943B4C72A40A54600AF23C5 /* DWUserSearchResultViewController.m in Sources */, + C9D2C81D2A320AA000D15901 /* MessageStatus.swift in Sources */, + 7514E4E82AF233CF00A0466F /* VotingFiltersViewController.swift in Sources */, + C9D2C81E2A320AA000D15901 /* DWGlobalOptions.m in Sources */, + C9D2C81F2A320AA000D15901 /* AppDelegate.m in Sources */, + C9D2C8202A320AA000D15901 /* SendReceivePageController.swift in Sources */, + C9D2C8212A320AA000D15901 /* DWSettingsMenuModel.m in Sources */, + C943B5242A40A54600AF23C5 /* UIColor+DWDashPay.m in Sources */, + C943B4E82A40A54600AF23C5 /* DWProfileTxsFetchedDataSource.m in Sources */, + C9D2C8232A320AA000D15901 /* BaseNavigationController.swift in Sources */, + C9D2C8242A320AA000D15901 /* UIViewController+Coinbase.swift in Sources */, + C9D2C8262A320AA000D15901 /* CSVBuilder.swift in Sources */, + C9D2C8272A320AA000D15901 /* DWDPRegistrationStatusTableViewCell.m in Sources */, + C9D2C8282A320AA000D15901 /* CoinbaseUserAuthInformation.swift in Sources */, + C943B5982A40EDEF00AF23C5 /* DWConfirmUsernameContentView.m in Sources */, + C943B58C2A40ED6F00AF23C5 /* DWUsernameValidationRule.m in Sources */, + C9D2C8292A320AA000D15901 /* DWTransactionStub.m in Sources */, + C9D2C82A2A320AA000D15901 /* OnlineAccountEmailController.swift in Sources */, + C9D2C82B2A320AA000D15901 /* DWBaseActionButtonViewController.m in Sources */, + C943B3402A408E5500AF23C5 /* DWMainMenuViewController+DashPay.m in Sources */, + C9D2C82C2A320AA000D15901 /* CoinbasePaymentMethodsResponse.swift in Sources */, + C9D2C82D2A320AA000D15901 /* UIView+DWEmbedding.m in Sources */, + C9D2C82E2A320AA000D15901 /* DWLockActionButton.m in Sources */, + C943B55B2A40DD4000AF23C5 /* NSArray+DWFlatten.m in Sources */, + C9D2C82F2A320AA000D15901 /* PointOfUseDAO.swift in Sources */, + C943B5292A40A54600AF23C5 /* DWDashPayConstants.m in Sources */, + C9D2C8302A320AA000D15901 /* ProvideAmountViewController.swift in Sources */, + C943B4E92A40A54600AF23C5 /* DWUserProfileModel.m in Sources */, + C9D2C8312A320AA000D15901 /* DWCheckbox.m in Sources */, + C9D2C8322A320AA000D15901 /* DWRequestAmountViewController.m in Sources */, + C9D2C8332A320AA000D15901 /* DerivationPathKeysModel.swift in Sources */, + C943B5932A40ED7B00AF23C5 /* DWUsernameHeaderView.m in Sources */, + C9D2C8342A320AA000D15901 /* DWSeedUIConstants.m in Sources */, + C9D2C8352A320AA000D15901 /* DWWindow.m in Sources */, + C9D2C8362A320AA000D15901 /* BalanceNotifier.swift in Sources */, + C9D2C8372A320AA000D15901 /* DWSeedWordModel.m in Sources */, + C9D2C8382A320AA000D15901 /* DWRootModel.m in Sources */, + C9D2C8392A320AA000D15901 /* BaseAmountViewController.swift in Sources */, + C9D2C83A2A320AA000D15901 /* SendingToView.swift in Sources */, + C9D2C83B2A320AA000D15901 /* TxUserInfoDAO.swift in Sources */, + C9D2C83C2A320AA000D15901 /* DWModalContentView.m in Sources */, + C9D2C83D2A320AA000D15901 /* DWUpholdConstants.m in Sources */, + C9D2C83F2A320AA000D15901 /* CoinbaseSwapeTradeResponse.swift in Sources */, + C943B4FF2A40A54600AF23C5 /* DWDPGenericContactRequestItemView.m in Sources */, + C9D2C8402A320AA000D15901 /* DWQRScanView.m in Sources */, + 75C1F0462AE26AC0006929CA /* CoinJoinViewModel.swift in Sources */, + C9D2C8412A320AA000D15901 /* ServiceItem.swift in Sources */, + C9D2C8422A320AA000D15901 /* ErrorPresentable.swift in Sources */, + C9D2C8432A320AA000D15901 /* DWPinInputStepView.m in Sources */, + C9D2C8452A320AA000D15901 /* DWRecoverViewController.m in Sources */, + C9D2C8462A320AA000D15901 /* DWDPAmountContactView.m in Sources */, + C9D2C8472A320AA000D15901 /* DWBaseTransactionListDataProvider.m in Sources */, + C9D2C8482A320AA000D15901 /* CoinbaseTransactionsRequest.swift in Sources */, + 75A664D82B09F1EA007EFD16 /* VotingInfoViewController.swift in Sources */, + C943B3372A408CED00AF23C5 /* DWEditProfileTextFieldCell.m in Sources */, + C9D2C8492A320AA000D15901 /* DWAppRootViewController.m in Sources */, + C9D2C84A2A320AA000D15901 /* (null) in Sources */, + 7513DA882AB175E0005D55F6 /* TopperViewModel.swift in Sources */, + C9D2C84B2A320AA000D15901 /* UITableView+DashWallet.swift in Sources */, + C9D2C84C2A320AA000D15901 /* TransferAmountViewController.swift in Sources */, + C9D2C84D2A320AA000D15901 /* ShortcutCell.swift in Sources */, + C943B4BB2A40A54600AF23C5 /* DWRequestsViewController.m in Sources */, + C9D2C84F2A320AA000D15901 /* UIColor+DWStyle.m in Sources */, + C9D2C8502A320AA000D15901 /* DWEnvironment.m in Sources */, + C9D2C8512A320AA000D15901 /* AtmItemCell.swift in Sources */, + C9D2C8522A320AA000D15901 /* CoinbaseService.swift in Sources */, + C943B4E02A40A54600AF23C5 /* DWGetStartedViewController.m in Sources */, + C9D2C8532A320AA000D15901 /* DWControllerCollectionView.m in Sources */, + C9D2C8542A320AA000D15901 /* SFSafariViewController+DashWallet.m in Sources */, + C943B4F82A40A54600AF23C5 /* DWDPPendingRequestObject.m in Sources */, + C9D2C8562A320AA000D15901 /* TransactionItemView.swift in Sources */, + C9D2C8572A320AA000D15901 /* UIView+Reuse.swift in Sources */, + C9D2C8582A320AA000D15901 /* DWUpholdClient.m in Sources */, + C9D2C8592A320AA000D15901 /* CrowdNodePortalViewController.swift in Sources */, + C9D2C85A2A320AA000D15901 /* ConfirmOrderModel.swift in Sources */, + C943B53F2A40A6BE00AF23C5 /* DPAlertChildContentsView.m in Sources */, + C9D2C85B2A320AA000D15901 /* PointOfUseListEmptyResultsView.swift in Sources */, + C9D2C85C2A320AA000D15901 /* ShortcutsModel.swift in Sources */, + C9D2C85D2A320AA000D15901 /* DWLockPinInputView.m in Sources */, + C9D2C85E2A320AA000D15901 /* UIView+DWHUD.m in Sources */, + C9D2C85F2A320AA000D15901 /* DWPayOptionModel.m in Sources */, + C9D2C8612A320AA000D15901 /* CoinbaseTokenResponse.swift in Sources */, + C9D2C8622A320AA000D15901 /* BackupInfoViewController.swift in Sources */, + C9D2C8642A320AA000D15901 /* AppliedFiltersView.swift in Sources */, + C9D2C8652A320AA000D15901 /* DWCaptureSessionManager.m in Sources */, + C9D2C8662A320AA000D15901 /* DWDataMigrationManager.m in Sources */, + 7502A4872AE401EF00ACDDD3 /* UsernameVotingViewController.swift in Sources */, + C9D2C86A2A320AA000D15901 /* (null) in Sources */, + C943B51F2A40A54600AF23C5 /* DWSuccessInvitationView.m in Sources */, + C9D2C86B2A320AA000D15901 /* AmountPreviewView.swift in Sources */, + C943B5322A40A54600AF23C5 /* DWNotificationsInvitationCell.m in Sources */, + C9D2C86C2A320AA000D15901 /* ModalNavigationController.swift in Sources */, + C943B5032A40A54600AF23C5 /* DWDPGenericImageItemView.m in Sources */, + C943B58F2A40ED6F00AF23C5 /* DWCheckExistenceUsernameValidationRule.m in Sources */, + C9D2C86E2A320AA000D15901 /* TransferAmountModel.swift in Sources */, + C9D2C86F2A320AA000D15901 /* NavigationBarAppearanceCustomizable.swift in Sources */, + C943B3462A409FFA00AF23C5 /* DWDPAvatarView.m in Sources */, + C9D2C8702A320AA000D15901 /* AmountObject.swift in Sources */, + C9D2C8712A320AA000D15901 /* DerivationPathKeysViewController.swift in Sources */, + C9D2C8722A320AA000D15901 /* DSTransaction+DashWallet.m in Sources */, + C9D2C8732A320AA000D15901 /* DWHomeViewController+DWJailbreakCheck.m in Sources */, + C943B58D2A40ED6F00AF23C5 /* DWCreateUsernameViewController.m in Sources */, + C943B58E2A40ED6F00AF23C5 /* DWAllowedCharactersUsernameValidationRule.m in Sources */, + C9D2C8742A320AA000D15901 /* DWLocalCurrencyModel.m in Sources */, + C9D2C8752A320AA000D15901 /* DWMainMenuModel.m in Sources */, + C9D2C8762A320AA000D15901 /* DWUpholdMainnetConstants.m in Sources */, + C9D2C8792A320AA000D15901 /* Style.swift in Sources */, + C9D2C87A2A320AA000D15901 /* PayViewController.swift in Sources */, + C9D2C87B2A320AA000D15901 /* DatabaseConnection.swift in Sources */, + C9D2C87C2A320AA000D15901 /* DWSwitcherFormCellModel.m in Sources */, + C9D2C87D2A320AA000D15901 /* DWIntrinsicTextView.m in Sources */, + C9D2C87E2A320AA000D15901 /* DWExploreTestnetViewController.m in Sources */, + C9D2C87F2A320AA000D15901 /* AddressUserInfoDAO.swift in Sources */, + 75D66D332B05E7AE00A8DDA6 /* QuickVoteViewController.swift in Sources */, + C943B5112A40A54600AF23C5 /* DWInvitationHistoryViewController.m in Sources */, + C9D2C9712A38778E00D15901 /* DWDashPaySetupModel.m in Sources */, + C9D2C8812A320AA000D15901 /* DWModalTransition.m in Sources */, + C943B4E12A40A54600AF23C5 /* DWGetStartedItemView.m in Sources */, + C9D2C8832A320AA000D15901 /* MerchantsDataProvider.swift in Sources */, + C9D2C8842A320AA000D15901 /* FullCrowdNodeSignUpTxSet.swift in Sources */, + C9D2C8852A320AA000D15901 /* DWSeedPhraseModel.m in Sources */, + C9D2C8862A320AA000D15901 /* Constants.swift in Sources */, + C9D2C8872A320AA000D15901 /* DWBaseFormCellModel.m in Sources */, + C9D2C8882A320AA000D15901 /* ExploreMapAnnotationView.swift in Sources */, + C9D2C8892A320AA000D15901 /* DWHomeViewController+DWBackupReminder.m in Sources */, + C943B51A2A40A54600AF23C5 /* DWInvitationLinkBuilder.m in Sources */, + C9D2C88A2A320AA000D15901 /* DWHomeModel.m in Sources */, + C9D2C88C2A320AA000D15901 /* DWHomeViewController.m in Sources */, + C9D2C88D2A320AA000D15901 /* IsAddressInUse.swift in Sources */, + 751B61C12ADFF98800D1C2EF /* BaseIntegrationModel.swift in Sources */, + C943B3342A408CED00AF23C5 /* DWTextViewFormCellModel.m in Sources */, + C9D2C88F2A320AA000D15901 /* DWSegmentedControl.m in Sources */, + C9D2C8902A320AA000D15901 /* MerchantItemCell.swift in Sources */, + C9D2C8912A320AA000D15901 /* PaymentMethodCell.swift in Sources */, + C9D2C8932A320AA000D15901 /* CBUserManager.swift in Sources */, + C943B5082A40A54600AF23C5 /* DWDPTxListCell.m in Sources */, + C9D2C8942A320AA000D15901 /* DerivationPathKeysHeaderView.swift in Sources */, + C9D2C8952A320AA000D15901 /* ConvertCryptoOrderPreviewModel.swift in Sources */, + C9D2C8972A320AA000D15901 /* RatesProvider.swift in Sources */, + C9D2C8982A320AA000D15901 /* CBAuth.swift in Sources */, + C943B51C2A40A54600AF23C5 /* SuccessInvitationViewController.swift in Sources */, + C9D2C8992A320AA000D15901 /* (null) in Sources */, + C9D2C89A2A320AA000D15901 /* CoinbaseCreateAddressesRequest.swift in Sources */, + C943B3382A408CED00AF23C5 /* DWEditProfileAvatarView.m in Sources */, + C943B5582A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m in Sources */, + C9D2C89B2A320AA000D15901 /* DWImportWalletInfoViewController.m in Sources */, + C9D2C89C2A320AA000D15901 /* TxListEmptyTableViewCell.swift in Sources */, + C9D2C89D2A320AA000D15901 /* SyncingAlertContentView.swift in Sources */, + C9D2C89E2A320AA000D15901 /* AddressUserInfo.swift in Sources */, + C9D2C89F2A320AA000D15901 /* MerchantInfoViewController.swift in Sources */, + C943B5062A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m in Sources */, + C9D2C8A02A320AA000D15901 /* SendCoinsService.swift in Sources */, + C9D2C8A12A320AA000D15901 /* ShortcutAction.swift in Sources */, + C956AF112A5B592E002FAB75 /* UIButton+Dash.swift in Sources */, + C9D2C8A22A320AA000D15901 /* DWModalChevronView.m in Sources */, + C956AF0F2A5B592E002FAB75 /* TappableTextView.swift in Sources */, + C9D2C8A32A320AA000D15901 /* DWBaseLegacyViewController.m in Sources */, + C9D2C8A52A320AA000D15901 /* HomeView.swift in Sources */, + C9D2C8A62A320AA000D15901 /* CoinbaseRatesProvider.swift in Sources */, + C943B5952A40EDAB00AF23C5 /* DWLengthUsernameValidationRule.m in Sources */, + C9D2C8A72A320AA000D15901 /* TaxReportGenerator.swift in Sources */, + C9D2C8A82A320AA000D15901 /* CrowdNodeError.swift in Sources */, + C9D2C8A92A320AA000D15901 /* WithdrawalLimit.swift in Sources */, + C943B4B12A40A54600AF23C5 /* DWBaseContactsViewController.m in Sources */, + C943B5302A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m in Sources */, + C9D2C8AA2A320AA000D15901 /* DWPayModel.m in Sources */, + C943B54B2A40B52F00AF23C5 /* UIView+DWAutolayout.m in Sources */, + C943B3332A408CED00AF23C5 /* DWTextFieldFormCellModel.m in Sources */, + C9D2C8AD2A320AA000D15901 /* PointOfUseDetailsView.swift in Sources */, + C9D2C8AE2A320AA000D15901 /* DSChain+DashWallet.m in Sources */, + C9D2C8AF2A320AA000D15901 /* FromLabel.swift in Sources */, + C9D2C8B02A320AA000D15901 /* DWPhraseRepairChildViewController.m in Sources */, + C9D2C8B12A320AA000D15901 /* SingleInputAddressSelector.swift in Sources */, + C943B5382A40A65B00AF23C5 /* DWScrollingViewController.m in Sources */, + C9D2C8B22A320AA000D15901 /* CoinbaseAccountAddress.swift in Sources */, + C9D2C8B32A320AA000D15901 /* DWMainMenuTableViewCell.m in Sources */, + C930784E2A6AD59E00906E4B /* ConfirmPaymentModel.swift in Sources */, + C9D2C8B42A320AA000D15901 /* CrowdNodeTransferViewController.swift in Sources */, + C9D2C8B62A320AA000D15901 /* CBAuthInterop.swift in Sources */, + C9D2C8B82A320AA000D15901 /* CoinbaseAmountViewController.swift in Sources */, + C9D2C8BA2A320AA000D15901 /* DWSegmentSliderFormCellModel.m in Sources */, + C943B5192A40A54600AF23C5 /* DWSendInviteFlowController.m in Sources */, + C9D2C8BB2A320AA000D15901 /* DWSeedPhraseView.m in Sources */, + C9D2C8BD2A320AA000D15901 /* UIStackView+DashWallet.swift in Sources */, + C943B34E2A40A4C500AF23C5 /* DWInfoPopupContentView.m in Sources */, + C9D2C8BF2A320AA000D15901 /* ExplorePointOfUse.swift in Sources */, + C9D2C8C12A320AA000D15901 /* DWDashPayModel.m in Sources */, + C943B5912A40ED7B00AF23C5 /* DWUsernameValidationView.m in Sources */, + C9D2C8C22A320AA000D15901 /* TransactionObserver.swift in Sources */, + C943B4EB2A40A54600AF23C5 /* DWModalUserProfileViewController.m in Sources */, + C9D2C8C32A320AA000D15901 /* DWInfoTextCell.m in Sources */, + C943B50D2A40A54600AF23C5 /* DWConfirmInvitationViewController.m in Sources */, + C943B4F62A40A54600AF23C5 /* DWDPContactObject.m in Sources */, + C9D2C8C42A320AA000D15901 /* ColorizedText.swift in Sources */, + 75EAFBB22B04C057005ABC6A /* CustomHUDView.swift in Sources */, + C9D2C8C72A320AA000D15901 /* PaymentsViewController.swift in Sources */, + C9D2C8C92A320AA000D15901 /* ServiceDataSource.swift in Sources */, + C9D2C8CA2A320AA000D15901 /* ConverterView.swift in Sources */, + C9D2C8CB2A320AA000D15901 /* DWModalBaseAnimation.m in Sources */, + C9D2C8CC2A320AA000D15901 /* SpendableTransaction.swift in Sources */, + C943B31F2A408CED00AF23C5 /* DWUserProfileModalQRViewController.m in Sources */, + C9D2C8CD2A320AA000D15901 /* StakingInfoDialogController.swift in Sources */, + C9D2C8CF2A320AA000D15901 /* TwoFactorAuthViewController.swift in Sources */, + C9D2C8D02A320AA000D15901 /* Taxes.swift in Sources */, + 75D6561C2B07935000D1A902 /* WelcomeToDashpayViewController.swift in Sources */, + C9D2C8D12A320AA000D15901 /* DWSeedWordModel+DWLayoutSupport.m in Sources */, + C9D2C8D22A320AA000D15901 /* CoinbaseAPIClient.swift in Sources */, + C943B4ED2A40A54600AF23C5 /* DWPendingContactInfoView.m in Sources */, + C9D2C8D32A320AA000D15901 /* SendAmountViewController.swift in Sources */, + 757514E02B15D8DE0026AD8E /* VotingConstants.swift in Sources */, + C9D2C8D42A320AA000D15901 /* DWAboutViewController.m in Sources */, + C943B51E2A40A54600AF23C5 /* InvitationTopView.swift in Sources */, + C9D2C8D52A320AA000D15901 /* AccountService.swift in Sources */, + C9D2C8D62A320AA000D15901 /* ListHandlerView.swift in Sources */, + C943B5152A40A54600AF23C5 /* DWInvitationTableViewCell.m in Sources */, + C9D2C8D72A320AA000D15901 /* DWSecurityMenuViewController.m in Sources */, + C9D2C8D82A320AA000D15901 /* CrowdNode.swift in Sources */, + 755B4B232B0C903500B844F0 /* DWDateFormatter.swift in Sources */, + C9D2C8D92A320AA000D15901 /* SQLite+ExloreDash.swift in Sources */, + C9D2C8DC2A320AA000D15901 /* DWAdvancedSecurityModel.m in Sources */, + C9D2C8DD2A320AA000D15901 /* AtmDataProvider.swift in Sources */, + C943B50E2A40A54600AF23C5 /* DWConfirmInvitationContentView.m in Sources */, + C9D2C8DE2A320AA000D15901 /* GettingStartedViewController.swift in Sources */, + C9D2C8DF2A320AA000D15901 /* NetworkUnavailableView.swift in Sources */, + C9D2C8E02A320AA000D15901 /* (null) in Sources */, + 751B61C32ADFF9AE00D1C2EF /* UpholdPortalModel.swift in Sources */, + C943B4FC2A40A54600AF23C5 /* DWDPEstablishedContactNotificationObject.m in Sources */, + C9D2C8E12A320AA000D15901 /* DWLockScreenViewController.m in Sources */, + C9D2C8E22A320AA000D15901 /* UpholdTransferViewController.swift in Sources */, + C943B31E2A408CED00AF23C5 /* DWUserProfileModalQRContentView.m in Sources */, + C9D2C8E32A320AA000D15901 /* DWVerifySeedPhraseViewController.m in Sources */, + C9D2C8E42A320AA000D15901 /* DerivationPathKeysCell.swift in Sources */, + C9D2C8E52A320AA000D15901 /* Cells.swift in Sources */, + 751B61C92AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift in Sources */, + C9D2C8E62A320AA000D15901 /* DWContainerViewController.m in Sources */, + C9D2C8E72A320AA000D15901 /* DashTextAttachment.swift in Sources */, + C943B5432A40AFD100AF23C5 /* DWTxDetailPopupViewController.m in Sources */, + C9D2C8E82A320AA000D15901 /* HomeBalanceView.swift in Sources */, + C9D2C8E92A320AA000D15901 /* PointOfUseListFiltersModel.swift in Sources */, + C943B3262A408CED00AF23C5 /* DWCropAvatarViewController.m in Sources */, + 7573C2E32B01105F00F4C347 /* MasternodeIPCell.swift in Sources */, + C9D2C8EA2A320AA000D15901 /* ConvertCryptoOrderPreviewViews.swift in Sources */, + C9D2C8EB2A320AA000D15901 /* DWAboutModel.m in Sources */, + C943B4B52A40A54600AF23C5 /* DWContactsFetchedDataSource.m in Sources */, + C9D2C8EC2A320AA000D15901 /* CNCreateAccountTxDetailsViewController.swift in Sources */, + C9D2C8EE2A320AA000D15901 /* WelcomeToCrowdNodeViewController.swift in Sources */, + C943B3282A408CED00AF23C5 /* DWAvatarEditSelectorContentView.m in Sources */, + C943B4DD2A40A54600AF23C5 /* DWDPWelcomeViewController.m in Sources */, + C9D2C8EF2A320AA000D15901 /* TerritoriesListCell.swift in Sources */, + 7573C2E52B01120B00F4C347 /* MasternodeKey.swift in Sources */, + C9D2C8F02A320AA000D15901 /* DWProgressView.m in Sources */, + C9D2C8F12A320AA000D15901 /* TxDetailCells.swift in Sources */, + C9D2C8F22A320AA000D15901 /* BaseViewController+NetworkReachability.swift in Sources */, + C9D2C8F32A320AA000D15901 /* main.m in Sources */, + C9D2C8F42A320AA000D15901 /* DWQuickReceiveViewController.m in Sources */, + 75A8C1692AE6A1AC0042256E /* VotingViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -7096,6 +9736,14 @@ name = Localizable.strings; sourceTree = ""; }; + 75889B812AD2D7F800C17F5D /* CoinJoin.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 75889B802AD2D7F800C17F5D /* Base */, + ); + name = CoinJoin.storyboard; + sourceTree = ""; + }; BA913BE01BD57E4D005A7C0E /* Interface.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -7149,7 +9797,11 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = DashWalletScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.DashWalletScreenshotsUITests; @@ -7182,7 +9834,11 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = DashWalletScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.DashWalletScreenshotsUITests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -7214,7 +9870,11 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = DashWalletScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.DashWalletScreenshotsUITests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -7246,7 +9906,11 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = DashWalletScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.DashWalletScreenshotsUITests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -7320,7 +9984,7 @@ "OTHER_SWIFT_FLAGS[arch=*]" = "-DDebug"; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; WATCHOS_DEPLOYMENT_TARGET = 2.0; ZERO_AR_DATE = 1; }; @@ -7378,8 +10042,9 @@ "-Wno-gnu", ); SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 2.0; ZERO_AR_DATE = 1; @@ -7419,8 +10084,90 @@ INFOPLIST_FILE = DashWallet/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Dash; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 8.0.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -7475,8 +10222,90 @@ INFOPLIST_FILE = DashWallet/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Dash; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 8.0.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; @@ -7511,7 +10340,11 @@ ); INFOPLIST_FILE = DashWalletTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWalletTests/DashWalletTests-Bridging-Header.h"; @@ -7542,7 +10375,11 @@ ); INFOPLIST_FILE = DashWalletTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWalletTests/DashWalletTests-Bridging-Header.h"; @@ -7557,11 +10394,12 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 44RJ69WHFF; EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 7.1.0; + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -7579,11 +10417,12 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 44RJ69WHFF; EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 7.1.0; + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -7603,8 +10442,12 @@ ENABLE_BITCODE = NO; EXCLUDED_ARCHS = ""; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -7626,8 +10469,12 @@ ENABLE_BITCODE = NO; EXCLUDED_ARCHS = ""; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -7654,8 +10501,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -7679,8 +10530,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -7690,6 +10545,566 @@ }; name = Release; }; + C9D2C94F2A320AA000D15901 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1EBB53DD8E53B4B63E5A885E /* Pods-dashpay.debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CLIENT_ID = 0c38beb67db0c68191326be347d7ec0abd7d77adb02a79db1abeba343f16a0f7; + CLIENT_SECRET = cc980185754f905e24250f877792817c03540b3d0e0959721df291c816797e59; + CODE_SIGN_ENTITLEMENTS = dashwallet/dashwallet.entitlements; + CURRENT_PROJECT_VERSION = 162; + DEVELOPMENT_TEAM = 44RJ69WHFF; + EXCLUDED_ARCHS = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DashWallet/DashWallet-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + "DASHPAY=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/secp256k1", + "$(SRCROOT)", + ); + INFOPLIST_FILE = "DashPay/dashpay-info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = DashPay; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 6.1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TOCropViewController\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + "-ld64", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLiteMigrationManager.swift/SQLiteMigrationManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/FBLPromises/PromisesObjC.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/SSZipArchive/SSZipArchive.modulemap\" -DDASHPAY"; + PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dashpaytnt; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "dashwallet-Swift.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + C9D2C9502A320AA000D15901 /* Testnet */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C4C041DE4CD73FF445090FA3 /* Pods-dashpay.testnet.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CLIENT_ID = 0c38beb67db0c68191326be347d7ec0abd7d77adb02a79db1abeba343f16a0f7; + CLIENT_SECRET = cc980185754f905e24250f877792817c03540b3d0e0959721df291c816797e59; + CODE_SIGN_ENTITLEMENTS = dashwallet/dashwallet.entitlements; + CURRENT_PROJECT_VERSION = 162; + DEVELOPMENT_TEAM = 44RJ69WHFF; + EXCLUDED_ARCHS = ""; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DashWallet/DashWallet-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + "DASHPAY=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/secp256k1", + "$(SRCROOT)", + ); + INFOPLIST_FILE = "DashPay/dashpay-info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = DashPay; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 6.1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TOCropViewController\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + "-ld64", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLiteMigrationManager.swift/SQLiteMigrationManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/FBLPromises/PromisesObjC.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/SSZipArchive/SSZipArchive.modulemap\""; + "OTHER_SWIFT_FLAGS[arch=*]" = "-DDebug -DDASH_TESTNET -DDASHPAY"; + PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dashpaytnt; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "dashwallet-Swift.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Testnet; + }; + C9D2C9512A320AA000D15901 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EBB5D208A38257AF3DA73A99 /* Pods-dashpay.release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CLIENT_ID = 0c38beb67db0c68191326be347d7ec0abd7d77adb02a79db1abeba343f16a0f7; + CLIENT_SECRET = cc980185754f905e24250f877792817c03540b3d0e0959721df291c816797e59; + CODE_SIGN_ENTITLEMENTS = dashwallet/dashwallet.entitlements; + CURRENT_PROJECT_VERSION = 162; + DEVELOPMENT_TEAM = 44RJ69WHFF; + EXCLUDED_ARCHS = ""; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DashWallet/DashWallet-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + "DASHPAY=1", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + "DASHPAY=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/secp256k1", + "$(SRCROOT)", + ); + INFOPLIST_FILE = "DashPay/dashpay-info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = DashPay; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 6.1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TOCropViewController\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + "-ld64", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLiteMigrationManager.swift/SQLiteMigrationManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/FBLPromises/PromisesObjC.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/SSZipArchive/SSZipArchive.modulemap\" -DDASHPAY"; + PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dashpaytnt; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "dashwallet-Swift.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = ""; + VALID_ARCHS = "arm64 arm64e"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + C9D2C9522A320AA000D15901 /* Testflight */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3BF640216ECD5FBFC17B85D3 /* Pods-dashpay.testflight.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CLIENT_ID = 0c38beb67db0c68191326be347d7ec0abd7d77adb02a79db1abeba343f16a0f7; + CLIENT_SECRET = cc980185754f905e24250f877792817c03540b3d0e0959721df291c816797e59; + CODE_SIGN_ENTITLEMENTS = dashwallet/dashwallet.entitlements; + CURRENT_PROJECT_VERSION = 162; + DEVELOPMENT_TEAM = 44RJ69WHFF; + EXCLUDED_ARCHS = ""; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DashWallet/DashWallet-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ( + "$(inherited)", + "COCOAPODS=1", + "$(inherited)", + "GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1", + "$(inherited)", + "PB_FIELD_32BIT=1", + "PB_NO_PACKED_STRUCTS=1", + "PB_ENABLE_MALLOC=1", + "DASHPAY=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/secp256k1", + "$(SRCROOT)", + ); + INFOPLIST_FILE = "DashPay/dashpay-info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = DashPay; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 6.1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TOCropViewController\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + "-ld64", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap\" -Xcc -fmodule-map-file=\"${PODS_CONFIGURATION_BUILD_DIR}/SQLiteMigrationManager.swift/SQLiteMigrationManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/FBLPromises/PromisesObjC.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/SSZipArchive/SSZipArchive.modulemap\""; + PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dashpaytnt; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "dashwallet-Swift.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = ""; + VALID_ARCHS = "arm64 arm64e"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Testflight; + }; CEE253D21E26A9BC00A25B15 /* Testflight */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7744,8 +11159,9 @@ ); OTHER_SWIFT_FLAGS = "-DTestflight"; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 2.0; ZERO_AR_DATE = 1; @@ -7794,8 +11210,90 @@ INFOPLIST_FILE = DashWallet/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Dash; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 8.0.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; @@ -7822,8 +11320,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -7856,7 +11358,11 @@ ); INFOPLIST_FILE = DashWalletTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWalletTests/DashWalletTests-Bridging-Header.h"; @@ -7875,7 +11381,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 7.1.0; + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -7895,8 +11401,12 @@ ENABLE_BITCODE = NO; EXCLUDED_ARCHS = ""; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -7971,7 +11481,7 @@ "OTHER_SWIFT_FLAGS[arch=*]" = "-DDebug -DDASH_TESTNET"; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; WATCHOS_DEPLOYMENT_TARGET = 2.0; ZERO_AR_DATE = 1; }; @@ -8009,8 +11519,90 @@ INFOPLIST_FILE = DashWallet/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Dash; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 8.0.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-l\"Alamofire\"", + "-l\"BlueCryptor\"", + "-l\"BlueECC\"", + "-l\"BlueRSA\"", + "-l\"BoringSSL-GRPC\"", + "-l\"CloudInAppMessaging\"", + "-l\"CocoaImageHashing\"", + "-l\"CocoaLumberjack\"", + "-l\"DAPI-GRPC\"", + "-l\"DSDynamicOptions-iOS14.0\"", + "-l\"DWAlertController\"", + "-l\"DashSync\"", + "-l\"FirebaseCore\"", + "-l\"FirebaseCoreDiagnostics\"", + "-l\"FirebaseDynamicLinks\"", + "-l\"FirebaseStorage\"", + "-l\"GTMSessionFetcher\"", + "-l\"GoogleDataTransport\"", + "-l\"GoogleUtilities\"", + "-l\"KVO-MVVM\"", + "-l\"KituraContracts\"", + "-l\"LoggerAPI\"", + "-l\"Logging\"", + "-l\"MBProgressHUD\"", + "-l\"MMSegmentSlider\"", + "-l\"Moya\"", + "-l\"PromisesObjC\"", + "-l\"Protobuf\"", + "-l\"SDWebImage\"", + "-l\"SQLite.swift\"", + "-l\"SQLiteMigrationManager.swift\"", + "-l\"SSZipArchive\"", + "-l\"SwiftJWT\"", + "-l\"TinyCborObjc\"", + "-l\"UIViewController-KeyboardAdditions\"", + "-l\"abseil\"", + "-l\"bz2\"", + "-l\"c++\"", + "-l\"dash_shared_core_ios\"", + "-l\"gRPC\"", + "-l\"gRPC-Core\"", + "-l\"gRPC-ProtoRPC\"", + "-l\"gRPC-RxLibrary\"", + "-l\"iconv\"", + "-l\"nanopb\"", + "-l\"resolv\"", + "-l\"sqlite3\"", + "-l\"tinycbor\"", + "-l\"z\"", + "-framework", + "\"BackgroundTasks\"", + "-framework", + "\"CFNetwork\"", + "-framework", + "\"CloudKit\"", + "-framework", + "\"CoreData\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreTelephony\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"ImageIO\"", + "-framework", + "\"QuartzCore\"", + "-framework", + "\"Security\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-weak_framework", + "\"WebKit\"", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h"; @@ -8036,8 +11628,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -8069,7 +11665,11 @@ ); INFOPLIST_FILE = DashWalletTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "DashWalletTests/DashWalletTests-Bridging-Header.h"; @@ -8088,7 +11688,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 7.1.0; + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -8108,8 +11708,12 @@ ENABLE_BITCODE = NO; EXCLUDED_ARCHS = ""; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 7.1.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 8.0.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -8202,6 +11806,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C9D2C94E2A320AA000D15901 /* Build configuration list for PBXNativeTarget "dashpay" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9D2C94F2A320AA000D15901 /* Debug */, + C9D2C9502A320AA000D15901 /* Testnet */, + C9D2C9512A320AA000D15901 /* Release */, + C9D2C9522A320AA000D15901 /* Testflight */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 75D5F3B6191EC270004AB296 /* Project object */; diff --git a/DashWallet.xcodeproj/xcshareddata/xcschemes/dashpay.xcscheme b/DashWallet.xcodeproj/xcshareddata/xcschemes/dashpay.xcscheme new file mode 100644 index 000000000..e1c9872fb --- /dev/null +++ b/DashWallet.xcodeproj/xcshareddata/xcschemes/dashpay.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/AppDelegate.m b/DashWallet/AppDelegate.m index 501448223..f923db737 100644 --- a/DashWallet/AppDelegate.m +++ b/DashWallet/AppDelegate.m @@ -55,6 +55,9 @@ #error "Debug flag FRESH_INSTALL is active during Release build. Comment this out to continue." #endif /* (FRESH_INSTALL && !DEBUG) */ +#if DASHPAY +//NSNotificationName const DWDashPayAvailabilityStatusUpdatedNotification = @"DWDashPayAvailabilityStatusUpdatedNotification"; // TODO: check if needed +#endif NS_ASSUME_NONNULL_BEGIN @interface AppDelegate () @@ -91,6 +94,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( } #endif /* FRESH_INSTALL */ +#if DASHPAY + [DWGlobalOptions sharedInstance].dpInvitationFlowEnabled = YES; +#endif + [DSLogger sharedInstance]; [FIRApp configure]; [ExploreDashObjcWrapper configure]; @@ -176,6 +183,28 @@ - (void)application:(UIApplication *)application [[DashSync sharedSyncController] performFetchWithCompletionHandler:completionHandler]; } +#if DASHPAY +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> *_Nullable))restorationHandler { + __weak typeof(self) weakSelf = self; + BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL + completion:^(FIRDynamicLink * _Nullable dynamicLink, + NSError * _Nullable error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (dynamicLink.url) { + DWInitialViewController *controller = (DWInitialViewController *)strongSelf.window.rootViewController; + if ([controller isKindOfClass:DWInitialViewController.class]) { + [controller handleDeeplink:dynamicLink.url]; + } + } + }]; + return handled; +} +#endif + - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { @@ -185,6 +214,21 @@ - (BOOL)application:(UIApplication *)application return NO; } +#if DASHPAY + FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; + if (dynamicLink) { + if (dynamicLink.url) { + DWInitialViewController *controller = (DWInitialViewController *)self.window.rootViewController; + if ([controller isKindOfClass:DWInitialViewController.class]) { + [controller handleDeeplink:dynamicLink.url]; + } + } + return YES; + } + + // Handle URL Scheme instead +#endif + if (![DWURLParser allowsURLHandling]) { return NO; } diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/Contents.json similarity index 54% rename from DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/Contents.json index 5ff9bbde6..7ece8ca8b 100644 --- a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { + "filename" : "battery.png", "idiom" : "universal", - "filename" : "tabbar_contacts_icon.png", "scale" : "1x" }, { + "filename" : "battery@2x.png", "idiom" : "universal", - "filename" : "tabbar_contacts_icon@2x.png", "scale" : "2x" }, { + "filename" : "battery@3x.png", "idiom" : "universal", - "filename" : "tabbar_contacts_icon@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery.png new file mode 100644 index 000000000..073a8dce0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@2x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@2x.png new file mode 100644 index 000000000..c3b654035 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@3x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@3x.png new file mode 100644 index 000000000..32928661c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.battery.imageset/battery@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/Contents.json new file mode 100644 index 000000000..ee2d606a0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "coinjoin.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "coinjoin@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "coinjoin@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin.png new file mode 100644 index 000000000..933660244 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@2x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@2x.png new file mode 100644 index 000000000..135eca16f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@3x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@3x.png new file mode 100644 index 000000000..d9b883ea3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.coinjoin.imageset/coinjoin@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/Contents.json new file mode 100644 index 000000000..f03e824fd --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lock.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lock@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lock@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock.png new file mode 100644 index 000000000..5ff814e4c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@2x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@2x.png new file mode 100644 index 000000000..2e489caf3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@3x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@3x.png new file mode 100644 index 000000000..29b6c4b07 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.dash.lock.imageset/lock@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/Contents.json new file mode 100644 index 000000000..b95b2ca24 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "􀙨.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "􀙨@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "􀙨@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250.png" new file mode 100644 index 000000000..8d177c6d6 Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250.png" differ diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@2x.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@2x.png" new file mode 100644 index 000000000..9714088fa Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@2x.png" differ diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@3x.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@3x.png" new file mode 100644 index 000000000..78f140eae Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.locked.imageset/\364\200\231\250@3x.png" differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/Contents.json new file mode 100644 index 000000000..c140e9b6b --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "􁃘.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "􁃘@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "􁃘@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230.png" new file mode 100644 index 000000000..fb5ae825e Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230.png" differ diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@2x.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@2x.png" new file mode 100644 index 000000000..f8bfde608 Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@2x.png" differ diff --git "a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@3x.png" "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@3x.png" new file mode 100644 index 000000000..c46118444 Binary files /dev/null and "b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.protected.imageset/\364\201\203\230@3x.png" differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/Contents.json new file mode 100644 index 000000000..9e501c38b --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "shuffle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "shuffle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "shuffle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle.png new file mode 100644 index 000000000..9ef1a4242 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@2x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@2x.png new file mode 100644 index 000000000..3e7a95667 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@3x.png b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@3x.png new file mode 100644 index 000000000..a39f5ea2d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/CoinJoin/image.shuffle.imageset/shuffle@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Contents.json index 5ac8b9ceb..cb1abb12b 100644 --- a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "dp_user_generic.png", + "filename" : "Menu items.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "dp_user_generic@2x.png", + "filename" : "Menu items@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "dp_user_generic@3x.png", + "filename" : "Menu items@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items.png new file mode 100644 index 000000000..50be3d108 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@2x.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@2x.png new file mode 100644 index 000000000..5481e7c51 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@3x.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@3x.png new file mode 100644 index 000000000..a48c47b36 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/Menu items@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic.png deleted file mode 100644 index 8bfd77b2c..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@2x.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@2x.png deleted file mode 100644 index 791ecf14a..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@3x.png b/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@3x.png deleted file mode 100644 index aab753393..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/DashPay Users/dp_user_generic.imageset/dp_user_generic@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/Contents.json new file mode 100644 index 000000000..db3cb4fb6 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hourglass_1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hourglass_1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hourglass_1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1.png new file mode 100644 index 000000000..8e0f0e97d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@2x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@2x.png new file mode 100644 index 000000000..dd100d890 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@3x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@3x.png new file mode 100644 index 000000000..4f4f3ec05 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_1.imageset/hourglass_1@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/Contents.json new file mode 100644 index 000000000..7cfabe604 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hourglass_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hourglass_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hourglass_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2.png new file mode 100644 index 000000000..ba4a13127 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@2x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@2x.png new file mode 100644 index 000000000..16ece6f82 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@3x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@3x.png new file mode 100644 index 000000000..667ce4311 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_2.imageset/hourglass_2@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/Contents.json new file mode 100644 index 000000000..9a2490f66 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hourglass_3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hourglass_3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hourglass_3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3.png new file mode 100644 index 000000000..3afa1a7eb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@2x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@2x.png new file mode 100644 index 000000000..0c2429f26 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@3x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@3x.png new file mode 100644 index 000000000..05528f0de Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_3.imageset/hourglass_3@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/Contents.json new file mode 100644 index 000000000..b72ebfb5f --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hourglass_4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hourglass_4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hourglass_4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4.png new file mode 100644 index 000000000..53a9bae7d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@2x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@2x.png new file mode 100644 index 000000000..aec2988c4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@3x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@3x.png new file mode 100644 index 000000000..e7b7acfaf Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_4.imageset/hourglass_4@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/Contents.json new file mode 100644 index 000000000..c6dc222ee --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "hourglass_5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "hourglass_5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "hourglass_5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5.png new file mode 100644 index 000000000..280219c31 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@2x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@2x.png new file mode 100644 index 000000000..746c559a3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@3x.png b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@3x.png new file mode 100644 index 000000000..88da94965 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Hourglass Animation/hourglass_5.imageset/hourglass_5@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Menu/Contents.json index da4a164c9..73c00596a 100644 --- a/DashWallet/Resources/AppAssets.xcassets/Menu/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/Menu/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/Contents.json new file mode 100644 index 000000000..6de16f401 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "menu_invite.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "menu_invite@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "menu_invite@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite.png new file mode 100644 index 000000000..3c7c7b500 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@2x.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@2x.png new file mode 100644 index 000000000..aac7b599c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@3x.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@3x.png new file mode 100644 index 000000000..903d66e1d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_invite.imageset/menu_invite@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/Contents.json new file mode 100644 index 000000000..d2b361849 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "voting.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "voting@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "voting@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting.png new file mode 100644 index 000000000..8643b172f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@2x.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@2x.png new file mode 100644 index 000000000..b97828362 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@3x.png b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@3x.png new file mode 100644 index 000000000..7cdac6d4f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Menu/menu_voting.imageset/voting@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/Contents.json new file mode 100644 index 000000000..c76c2adf6 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "contacts.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "contacts@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "contacts@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts.png new file mode 100644 index 000000000..6215f1965 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@2x.png new file mode 100644 index 000000000..ea0ec17ab Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@3x.png new file mode 100644 index 000000000..afb49816f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_icon.imageset/contacts@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/Contents.json new file mode 100644 index 000000000..202293298 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "contacts_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "contacts_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "contacts_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected.png new file mode 100644 index 000000000..33027e935 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@2x.png new file mode 100644 index 000000000..7fe15d9b5 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@3x.png new file mode 100644 index 000000000..a0528390f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_contacts_selected.imageset/contacts_selected@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/Contents.json new file mode 100644 index 000000000..7c12f28d0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "explore.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "explore@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "explore@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore.png new file mode 100644 index 000000000..3338d069d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@2x.png new file mode 100644 index 000000000..77dd65441 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@3x.png new file mode 100644 index 000000000..26b4e1da3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_icon.imageset/explore@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/Contents.json new file mode 100644 index 000000000..1922e66de --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "explore_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "explore_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "explore_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected.png new file mode 100644 index 000000000..f57878f3e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@2x.png new file mode 100644 index 000000000..292e2c428 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@3x.png new file mode 100644 index 000000000..0c465396d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_discover_selected.imageset/explore_selected@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/Contents.json similarity index 62% rename from DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/Contents.json index f2541409b..32df53895 100644 --- a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/Contents.json @@ -1,26 +1,26 @@ { "images" : [ { + "filename" : "home.png", "idiom" : "universal", - "filename" : "tabbar_home_icon.png", "scale" : "1x" }, { + "filename" : "home@2x.png", "idiom" : "universal", - "filename" : "tabbar_home_icon@2x.png", "scale" : "2x" }, { + "filename" : "home@3x.png", "idiom" : "universal", - "filename" : "tabbar_home_icon@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "template-rendering-intent" : "template" } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home.png new file mode 100644 index 000000000..1bd6d42d3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@2x.png new file mode 100644 index 000000000..3d6dd9d84 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@3x.png new file mode 100644 index 000000000..e39d70477 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_icon.imageset/home@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/Contents.json new file mode 100644 index 000000000..3fb4ead1e --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "home_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "home_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "home_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected.png new file mode 100644 index 000000000..12716a211 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@2x.png new file mode 100644 index 000000000..a68c51ec9 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@3x.png new file mode 100644 index 000000000..fb7a7cb94 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_home_selected.imageset/home_selected@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/Contents.json similarity index 62% rename from DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/Contents.json index 73d4d814a..0f4b88c64 100644 --- a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/Contents.json @@ -1,26 +1,26 @@ { "images" : [ { + "filename" : "more.png", "idiom" : "universal", - "filename" : "tabbar_other_icon.png", "scale" : "1x" }, { + "filename" : "more@2x.png", "idiom" : "universal", - "filename" : "tabbar_other_icon@2x.png", "scale" : "2x" }, { + "filename" : "more@3x.png", "idiom" : "universal", - "filename" : "tabbar_other_icon@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "template-rendering-intent" : "template" } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more.png new file mode 100644 index 000000000..ecdd8c383 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@2x.png new file mode 100644 index 000000000..4b6a9b90d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@3x.png new file mode 100644 index 000000000..4a420c95f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_icon.imageset/more@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/Contents.json new file mode 100644 index 000000000..c9a1c6adf --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "more_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "more_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "more_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected.png new file mode 100644 index 000000000..351719bfd Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@2x.png new file mode 100644 index 000000000..5eae9214e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@3x.png new file mode 100644 index 000000000..4f6fae105 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_other_selected.imageset/more_selected@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/Contents.json new file mode 100644 index 000000000..162acd856 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "receive.sent.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "receive.sent@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "receive.sent@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent.png new file mode 100644 index 000000000..594a9e9f8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@2x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@2x.png new file mode 100644 index 000000000..8864715f8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@3x.png b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@3x.png new file mode 100644 index 000000000..df84f49a4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/TabBar/tabbar_pay_button.imageset/receive.sent@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Contents.json new file mode 100644 index 000000000..a7e677576 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon.png new file mode 100644 index 000000000..b6a5573bf Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@2x.png new file mode 100644 index 000000000..dfd64f9c6 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@3x.png new file mode 100644 index 000000000..0fce958bb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/dashpay.welcome.imageset/Icon@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Contents.json new file mode 100644 index 000000000..a7e677576 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon.png new file mode 100644 index 000000000..919ae6505 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@2x.png new file mode 100644 index 000000000..cda6f8f72 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@3x.png new file mode 100644 index 000000000..b6e30aa97 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/friends.add.imageset/Icon@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/Contents.json new file mode 100644 index 000000000..f1ae6d1f5 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "clock.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "clock@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "clock@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock.png new file mode 100644 index 000000000..ea78fc439 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@2x.png new file mode 100644 index 000000000..f7898808a Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@3x.png new file mode 100644 index 000000000..c55ee5f2a Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.clock.imageset/clock@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/Contents.json new file mode 100644 index 000000000..dbf1aa660 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "passphrase.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "passphrase@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "passphrase@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase.png new file mode 100644 index 000000000..2f658a546 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@2x.png new file mode 100644 index 000000000..36148afc5 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@3x.png new file mode 100644 index 000000000..afce2277c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.passphrase.imageset/passphrase@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/Contents.json new file mode 100644 index 000000000..d2b361849 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "voting.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "voting@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "voting@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting.png new file mode 100644 index 000000000..922cac8f3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@2x.png new file mode 100644 index 000000000..b25d30c40 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@3x.png new file mode 100644 index 000000000..02ebcc9d0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/icon.voting.imageset/voting@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/Contents.json new file mode 100644 index 000000000..b5bd90541 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "link.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "link@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "link@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link.png new file mode 100644 index 000000000..de79865db Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@2x.png new file mode 100644 index 000000000..ff5384000 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@3x.png new file mode 100644 index 000000000..4ad03f4cf Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/link.badge.imageset/link@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/Contents.json new file mode 100644 index 000000000..1172deb87 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "not_approved.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "not_approved@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "not_approved@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved.png new file mode 100644 index 000000000..e5dda77db Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@2x.png new file mode 100644 index 000000000..bd37a01ea Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@3x.png new file mode 100644 index 000000000..7e5ed5c61 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/not.approved.imageset/not_approved@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/Contents.json new file mode 100644 index 000000000..a550affe0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profile.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profile@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profile@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile.png new file mode 100644 index 000000000..06b3ca805 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@2x.png new file mode 100644 index 000000000..3d498b654 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@3x.png new file mode 100644 index 000000000..59827b5a3 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/profile.personalized.imageset/profile@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Contents.json new file mode 100644 index 000000000..aaf0e6f53 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Option.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Option@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Option@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option.png new file mode 100644 index 000000000..515c82e7f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@2x.png new file mode 100644 index 000000000..bfba7b698 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@3x.png new file mode 100644 index 000000000..eccda2a10 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.checked.imageset/Option@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Contents.json new file mode 100644 index 000000000..f8da934b2 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Oval.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Oval@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Oval@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval.png new file mode 100644 index 000000000..20b5f36cf Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@2x.png new file mode 100644 index 000000000..c0cd9263f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@3x.png new file mode 100644 index 000000000..1f5e03b26 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/radio.button.unchecked.imageset/Oval@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/Contents.json new file mode 100644 index 000000000..a783511b4 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "create.username.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "create.username@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "create.username@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username.png new file mode 100644 index 000000000..ffc34b83d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@2x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@2x.png new file mode 100644 index 000000000..561b96580 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@3x.png b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@3x.png new file mode 100644 index 000000000..ca46dcdb0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Usernames/username.create.imageset/create.username@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/Contents.json new file mode 100644 index 000000000..35d4642e3 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "checkmark.circle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "checkmark.circle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "checkmark.circle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle.png b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle.png new file mode 100644 index 000000000..7e7fe510f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@2x.png b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@2x.png new file mode 100644 index 000000000..31dc3711d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@3x.png b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@3x.png new file mode 100644 index 000000000..dc16c6359 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/checkmark.circle.white.imageset/checkmark.circle@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/Contents.json new file mode 100644 index 000000000..337868b2b --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "plus.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "plus@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "plus@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus.png b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus.png new file mode 100644 index 000000000..841e161ca Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@2x.png b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@2x.png new file mode 100644 index 000000000..ce2ca77d4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@3x.png b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@3x.png new file mode 100644 index 000000000..72fa2ee32 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Voting/plus.rounded.imageset/plus@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/Contents.json new file mode 100644 index 000000000..d3acdab25 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_avatar_edit.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_avatar_edit@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_avatar_edit@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit.png new file mode 100644 index 000000000..4cc18681c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@2x.png new file mode 100644 index 000000000..beaf5f097 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@3x.png new file mode 100644 index 000000000..58ca403ca Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_edit.imageset/dp_avatar_edit@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/Contents.json new file mode 100644 index 000000000..a37f72c5d --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_avatar_gallery.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_avatar_gallery@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_avatar_gallery@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery.png new file mode 100644 index 000000000..d8533e5b9 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@2x.png new file mode 100644 index 000000000..74dc99a11 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@3x.png new file mode 100644 index 000000000..0b53499ee Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gallery.imageset/dp_avatar_gallery@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/Contents.json new file mode 100644 index 000000000..62d54f367 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_avatar_gravatar.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_avatar_gravatar@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_avatar_gravatar@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar.png new file mode 100644 index 000000000..dd157093c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@2x.png new file mode 100644 index 000000000..2fb2a2bc0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@3x.png new file mode 100644 index 000000000..34e22028c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_gravatar.imageset/dp_avatar_gravatar@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/Contents.json new file mode 100644 index 000000000..797cbbaed --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_avatar_photo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_avatar_photo@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_avatar_photo@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo.png new file mode 100644 index 000000000..e73ecc80b Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@2x.png new file mode 100644 index 000000000..8a69e643e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@3x.png new file mode 100644 index 000000000..1b63781e4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_photo.imageset/dp_avatar_photo@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/Contents.json new file mode 100644 index 000000000..c2cc61258 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_avatar_url.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_avatar_url@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_avatar_url@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url.png new file mode 100644 index 000000000..3428790e6 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@2x.png new file mode 100644 index 000000000..0293a2f8e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@3x.png new file mode 100644 index 000000000..0d912e309 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_avatar_url.imageset/dp_avatar_url@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/Contents.json new file mode 100644 index 000000000..eaf5e448a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_current_user_placeholder.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_current_user_placeholder@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_current_user_placeholder@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder.png b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder.png new file mode 100644 index 000000000..9d9813a87 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@2x.png new file mode 100644 index 000000000..07869ce4a Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@3x.png new file mode 100644 index 000000000..9b33f7c9e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_current_user_placeholder.imageset/dp_current_user_placeholder@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/Contents.json new file mode 100644 index 000000000..82ced8c15 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_show_qr.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_show_qr@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_show_qr@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr.png b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr.png new file mode 100644 index 000000000..c49b3f77e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@2x.png new file mode 100644 index 000000000..08754e2c8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@3x.png new file mode 100644 index 000000000..28cc4f025 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_show_qr.imageset/dp_show_qr@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/Contents.json new file mode 100644 index 000000000..f940dfbfb --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "dp_username_confirmation.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "dp_username_confirmation@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "dp_username_confirmation@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation.png b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation.png new file mode 100644 index 000000000..aad17e887 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@2x.png b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@2x.png new file mode 100644 index 000000000..9c6c6b385 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@3x.png b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@3x.png new file mode 100644 index 000000000..a90da61ee Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/dp_username_confirmation.imageset/dp_username_confirmation@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/Contents.json index 6a3fcb699..0013cdeb6 100644 --- a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "icon_bell.png", + "filename" : "bell.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "icon_bell@2x.png", + "filename" : "bell@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "icon_bell@3x.png", + "filename" : "bell@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell.png new file mode 100644 index 000000000..09ab64673 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@2x.png new file mode 100644 index 000000000..04a179c39 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@3x.png new file mode 100644 index 000000000..870048eb9 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/bell@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell.png deleted file mode 100644 index 33dea5157..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@2x.png deleted file mode 100644 index ad586c84a..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@3x.png deleted file mode 100644 index c80cdf01e..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_bell.imageset/icon_bell@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/Contents.json new file mode 100644 index 000000000..0013cdeb6 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "bell.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "bell@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bell@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell.png new file mode 100644 index 000000000..dec1782d1 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@2x.png new file mode 100644 index 000000000..51672154f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@3x.png new file mode 100644 index 000000000..538df8d65 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_bell_active.imageset/bell@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/Contents.json new file mode 100644 index 000000000..26a39cd78 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_create_invitation.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_create_invitation@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_create_invitation@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation.png b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation.png new file mode 100644 index 000000000..5abbcc782 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@2x.png new file mode 100644 index 000000000..dacd865d4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@3x.png new file mode 100644 index 000000000..2bb31c007 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_create_invitation.imageset/icon_create_invitation@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/Contents.json new file mode 100644 index 000000000..bd44fe04b --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "filters.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "filters@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "filters@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters.png b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters.png new file mode 100644 index 000000000..d4b1b7892 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@2x.png new file mode 100644 index 000000000..d54b9ef57 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@3x.png new file mode 100644 index 000000000..bc3036f4f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_filter_horizontal.imageset/filters@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/Contents.json new file mode 100644 index 000000000..961497e2a --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_invitation_error.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_invitation_error@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_invitation_error@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error.png new file mode 100644 index 000000000..e65cb4094 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@2x.png new file mode 100644 index 000000000..ac664a4aa Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@3x.png new file mode 100644 index 000000000..61b735dca Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_error.imageset/icon_invitation_error@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/Contents.json new file mode 100644 index 000000000..662fbd3ad --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_invitation_read.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_invitation_read@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_invitation_read@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read.png new file mode 100644 index 000000000..b3ab21c88 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@2x.png new file mode 100644 index 000000000..fe32f83de Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@3x.png new file mode 100644 index 000000000..187ced8a2 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read.imageset/icon_invitation_read@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/Contents.json new file mode 100644 index 000000000..d15e726b9 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_invitation_read_big.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_invitation_read_big@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_invitation_read_big@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big.png new file mode 100644 index 000000000..2fe2f9b7c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@2x.png new file mode 100644 index 000000000..27b797d41 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@3x.png new file mode 100644 index 000000000..e1e9892d2 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_read_big.imageset/icon_invitation_read_big@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/Contents.json new file mode 100644 index 000000000..cdd7d5ee0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_invitation_unread.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_invitation_unread@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_invitation_unread@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread.png new file mode 100644 index 000000000..d87f877d7 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@2x.png new file mode 100644 index 000000000..bf8d93df9 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@3x.png new file mode 100644 index 000000000..6872d5798 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread.imageset/icon_invitation_unread@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/Contents.json new file mode 100644 index 000000000..fefa25209 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_invitation_unread_big.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_invitation_unread_big@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_invitation_unread_big@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big.png new file mode 100644 index 000000000..5a170f123 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@2x.png new file mode 100644 index 000000000..d5c6e60d5 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@3x.png new file mode 100644 index 000000000..1de71ecab Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_invitation_unread_big.imageset/icon_invitation_unread_big@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/Contents.json new file mode 100644 index 000000000..1f8603835 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_options.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_options@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_options@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options.png b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options.png new file mode 100644 index 000000000..23b891380 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@2x.png new file mode 100644 index 000000000..57a4a7a73 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@3x.png new file mode 100644 index 000000000..54f146e0b Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/icon_options.imageset/icon_options@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/Contents.json new file mode 100644 index 000000000..6356793ca --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "invite_logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "invite_logo@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "invite_logo@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo.png b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo.png new file mode 100644 index 000000000..471649c6e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@2x.png b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@2x.png new file mode 100644 index 000000000..6d0b903d7 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@3x.png b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@3x.png new file mode 100644 index 000000000..6428ea2cb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/invite_logo.imageset/invite_logo@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/Contents.json new file mode 100644 index 000000000..27282deff --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "no_contacts_placeholder.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "no_contacts_placeholder@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "no_contacts_placeholder@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder.png b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder.png new file mode 100644 index 000000000..5be713daf Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@2x.png b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@2x.png new file mode 100644 index 000000000..fdb388b8a Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@3x.png b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@3x.png new file mode 100644 index 000000000..2ef1bdc7c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/no_contacts_placeholder.imageset/no_contacts_placeholder@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar.png b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar.png new file mode 100644 index 000000000..437000278 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@2x.png b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@2x.png new file mode 100644 index 000000000..1f72e931c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@3x.png b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@3x.png new file mode 100644 index 000000000..b6f8a1d89 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Avatar@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Contents.json new file mode 100644 index 000000000..a44678047 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/pay_to_contact.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Avatar.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Avatar@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Avatar@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon.png deleted file mode 100644 index 626da0262..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@2x.png deleted file mode 100644 index 25f5721a8..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@3x.png deleted file mode 100644 index 83c2b4578..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_contacts_icon.imageset/tabbar_contacts_icon@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon.png deleted file mode 100644 index ada25817c..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@2x.png deleted file mode 100644 index ceefdc0e6..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@3x.png deleted file mode 100644 index 62cfc1739..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_discover_icon.imageset/tabbar_discover_icon@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon.png deleted file mode 100644 index 590c28113..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@2x.png deleted file mode 100644 index 72476ca15..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@3x.png deleted file mode 100644 index ec2ff4e3c..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_home_icon.imageset/tabbar_home_icon@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon.png deleted file mode 100644 index 02c2d018b..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@2x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@2x.png deleted file mode 100644 index 868543eee..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@3x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@3x.png deleted file mode 100644 index 82fc66ea5..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_other_icon.imageset/tabbar_other_icon@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button.png deleted file mode 100644 index ae41b49b3..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@2x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@2x.png deleted file mode 100644 index 2303b3879..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@3x.png b/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@3x.png deleted file mode 100644 index 53ec968d0..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/tabbar_pay_button.imageset/tabbar_pay_button@3x.png and /dev/null differ diff --git a/DashWallet/Sources/Application/App.swift b/DashWallet/Sources/Application/App.swift index 76bb49a56..3bf47ba93 100644 --- a/DashWallet/Sources/Application/App.swift +++ b/DashWallet/Sources/Application/App.swift @@ -91,6 +91,9 @@ final class App { func cleanUp() { TxUserInfoDAOImpl.shared.deleteAll() AddressUserInfoDAOImpl.shared.deleteAll() + #if DASHPAY + UsernameRequestsDAOImpl.shared.deleteAll() + #endif Coinbase.shared.reset() } } diff --git a/DashWallet/Sources/Categories/DSChain+DashWallet.m b/DashWallet/Sources/Categories/DSChain+DashWallet.m index 1a624e167..6dc6f7bac 100644 --- a/DashWallet/Sources/Categories/DSChain+DashWallet.m +++ b/DashWallet/Sources/Categories/DSChain+DashWallet.m @@ -174,6 +174,14 @@ - (uint64_t)calculateMasternodePaymentWithHeight:(uint64_t)height blockReward:(u // Activated but we have to wait for the next cycle to start realocation, nothing to do return ret; } + + if ([self isCore20ActiveAtHeight:height]) { + // Once MNRewardReallocated activates, block reward is 80% of block subsidy (+ tx fees) since treasury is 20% + // Since the MN reward needs to be equal to 60% of the block subsidy (according to the proposal), MN reward is set to 75% of the block reward. + // Previous reallocation periods are dropped. + return blockReward * 3 / 4; + } + NSUInteger reallocCycle = superblockCycle * 3; NSUInteger nCurrentPeriod = MIN((height - reallocStart) / reallocCycle, periodsCount - 1); return (blockReward * periods[nCurrentPeriod]) / 1000; @@ -311,7 +319,6 @@ - (uint64_t)budgetPaymentsStartBlock { } } - @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/Categories/DSTransaction+DashWallet.swift b/DashWallet/Sources/Categories/DSTransaction+DashWallet.swift index d14af1384..d2e89e29f 100644 --- a/DashWallet/Sources/Categories/DSTransaction+DashWallet.swift +++ b/DashWallet/Sources/Categories/DSTransaction+DashWallet.swift @@ -129,15 +129,15 @@ extension DSTransaction { @objc extension DSTransaction { var formattedShortTxDate: String { - DWDateFormatter.sharedInstance().shortString(from: date) + DWDateFormatter.sharedInstance.shortString(from: date) } var formattedLongTxDate: String { - DWDateFormatter.sharedInstance().longString(from: date) + DWDateFormatter.sharedInstance.longString(from: date) } var formattedISO8601TxDate: String { - DWDateFormatter.sharedInstance().iso8601String(from: date) + DWDateFormatter.sharedInstance.iso8601String(from: date) } var formattedDashAmountWithDirectionalSymbol: String { diff --git a/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20231023152234_add_username_requests.sql b/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20231023152234_add_username_requests.sql new file mode 100644 index 000000000..2fdca2486 --- /dev/null +++ b/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20231023152234_add_username_requests.sql @@ -0,0 +1,9 @@ +CREATE TABLE username_requests ( + requestId TEXT PRIMARY KEY, + username TEXT NOT NULL, + createdAt INTEGER NOT NULL, + identity TEXT NOT NULL, + link TEXT, + votes INTEGER NOT NULL, + isApproved INTEGER NOT NULL +); diff --git a/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift b/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift index 76fb19bb9..679bee6bc 100644 --- a/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift +++ b/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift @@ -3,7 +3,7 @@ import SQLite import SQLiteMigrationManager struct SeedDB: Migration { - var version: Int64 = 20220713105051 + var version: Int64 = 20231023152234 func migrateDatabase(_ db: Connection) throws { } } diff --git a/DashWallet/Sources/Infrastructure/Networking/HTTPClient.swift b/DashWallet/Sources/Infrastructure/Networking/HTTPClient.swift index 605ba50dd..38a9e2e2e 100644 --- a/DashWallet/Sources/Infrastructure/Networking/HTTPClient.swift +++ b/DashWallet/Sources/Infrastructure/Networking/HTTPClient.swift @@ -34,12 +34,13 @@ private func JSONResponseDataFormatter(_ data: Data) -> String { // MARK: - HTTPClientError -enum HTTPClientError: Error { +enum HTTPClientError: LocalizedError { case statusCode(Moya.Response) case mapping(Moya.Response) case moya(MoyaError) + case decoder(DecodingError) - var localizedDescription: String { + var errorDescription: String? { switch self { case .statusCode(let response): return "\(response.debugDescription)\nError: \(response.errorDescription ?? "")" @@ -47,6 +48,16 @@ enum HTTPClientError: Error { return "\(response.debugDescription)" case .moya(let error): return "\(String(describing: error.errorDescription))" + case .decoder(let error): + switch error { + case .typeMismatch(_, let context), + .valueNotFound(_, let context), + .keyNotFound(_, let context), + .dataCorrupted(let context): + return context.debugDescription + @unknown default: + return error.localizedDescription + } } } } @@ -216,9 +227,12 @@ extension Swift.Result where Success: Moya.Response, Failure: Error { do { let result = try jsonDecoder.decode(T.self, from: r.data) return result + } catch let error as DecodingError { + throw HTTPClientError.decoder(error) } catch { throw HTTPClientError.mapping(r) } + case .failure(let error): throw error } diff --git a/DashWallet/Sources/Models/Coinbase/Accounts/Account/CBAccount.swift b/DashWallet/Sources/Models/Coinbase/Accounts/Account/CBAccount.swift index 4acea3a98..f1c2fbe6f 100644 --- a/DashWallet/Sources/Models/Coinbase/Accounts/Account/CBAccount.swift +++ b/DashWallet/Sources/Models/Coinbase/Accounts/Account/CBAccount.swift @@ -132,7 +132,7 @@ extension CBAccount { let result: BaseDataResponse = try await httpClient .request(.sendCoinsToWallet(accountId: accountId, verificationCode: verificationCode, dto: dto)) - try? await refreshAccount() // Ignore if fails + let _ = try? await refreshAccount() // Ignore if fails return result.data } catch HTTPClientError.statusCode(let r) where r.statusCode == 402 { @@ -164,46 +164,30 @@ extension CBAccount { // MARK: Buy extension CBAccount { - public func placeCoinbaseBuyOrder(amount: UInt64, paymentMethod: CoinbasePaymentMethod) async throws -> CoinbasePlaceBuyOrder { - let fiatCurrency = Coinbase.sendLimitCurrency - if let localNumber = try? Coinbase.shared.currencyExchanger.convertDash(amount: amount.dashAmount, to: fiatCurrency) { - if localNumber < kMinUSDAmountOrder { - let min = NSDecimalNumber(decimal: kMinUSDAmountOrder) - let localFormatter = NumberFormatter.fiatFormatter(currencyCode: fiatCurrency) - let str = localFormatter.string(from: min) ?? "$1.99" - throw Coinbase.Error.transactionFailed(.enteredAmountTooLow(minimumAmount: str)) - } else if localNumber > Coinbase.shared.sendLimit { - throw Coinbase.Error.transactionFailed(.limitExceded) - } + public func placeCoinbaseBuyOrder(amount: UInt64) async throws -> CoinbasePlaceBuyOrder { + let fiatCurrency = Coinbase.defaultFiat + + guard let localNumber = try? Coinbase.shared.currencyExchanger.convertDash(amount: amount.dashAmount, to: fiatCurrency) else { + throw Coinbase.Error.general(.rateNotFound) } - - // NOTE: Make sure we format the amount back into coinbase format (en_US) - let amount = amount.formattedDashAmountWithoutCurrencySymbol.coinbaseAmount() - - let request = CoinbasePlaceBuyOrderRequest(amount: amount, currency: kDashCurrency, paymentMethod: paymentMethod.id, commit: false, quote: nil) - - do { - try await authInterop.refreshTokenIfNeeded() - let result: BaseDataResponse = try await httpClient.request(.placeBuyOrder(accountId, request)) - return result.data - } catch HTTPClientError.statusCode(let r) { - if let error = r.error?.errors.first { - throw Coinbase.Error.transactionFailed(.message(error.message)) - } - - throw Coinbase.Error.unknownError - } catch { - throw error + + if localNumber < kMinUSDAmountOrder { + let min = NSDecimalNumber(decimal: kMinUSDAmountOrder) + let localFormatter = NumberFormatter.fiatFormatter(currencyCode: fiatCurrency) + let str = localFormatter.string(from: min) ?? "$1.99" + throw Coinbase.Error.transactionFailed(.enteredAmountTooLow(minimumAmount: str)) + } else if localNumber > Coinbase.shared.sendLimit { + throw Coinbase.Error.transactionFailed(.limitExceded) } - } - public func commitCoinbaseBuyOrder(orderID: String) async throws -> CoinbasePlaceBuyOrder { + let formatter = NumberFormatter.decimalFormatter + formatter.maximumFractionDigits = 2 + let amountStr = formatter.string(from: NSDecimalNumber(decimal: localNumber))!.coinbaseAmount() + let request = CoinbasePlaceBuyOrderRequest(clientOrderId: UUID(), productId: Coinbase.dashUSDPair, side: Coinbase.transactionTypeBuy, orderConfiguration: OrderConfiguration(marketMarketIoc: MarketMarketIoc(quoteSize: amountStr))) + do { try await authInterop.refreshTokenIfNeeded() - let result: BaseDataResponse = try await httpClient.request(.commitBuyOrder(accountId, orderID)) - try? await refreshAccount() // Ignore if fails - - return result.data + return try await httpClient.request(.placeBuyOrder(request)) } catch HTTPClientError.statusCode(let r) { if let error = r.error?.errors.first { throw Coinbase.Error.transactionFailed(.message(error.message)) @@ -265,7 +249,7 @@ extension CBAccount { do { try await authInterop.refreshTokenIfNeeded() let result: BaseDataResponse = try await httpClient.request(.swapTradeCommit(orderID)) - try? await refreshAccount() // Ignore if fails + let _ = try? await refreshAccount() // Ignore if fails return result.data } catch HTTPClientError.statusCode(let r) { @@ -280,6 +264,25 @@ extension CBAccount { } } +// MARK: Deposit + +extension CBAccount { + public func deposit(from paymentMethodId: String, amount: UInt64) async throws -> CoinbaseDepositResponse { + guard let localNumber = try? Coinbase.shared.currencyExchanger.convertDash(amount: amount.dashAmount, to: Coinbase.defaultFiat) else { + throw Coinbase.Error.general(.rateNotFound) + } + + let formatter = NumberFormatter.decimalFormatter + formatter.maximumFractionDigits = 2 + let amountStr = formatter.string(from: NSDecimalNumber(decimal: localNumber))!.coinbaseAmount() + try await authInterop.refreshTokenIfNeeded() + let request = CoinbaseDepositRequest(amount: amountStr, currency: Coinbase.defaultFiat, paymentMethod: paymentMethodId) + let result: BaseDataResponse = try await httpClient.request(.deposit(accountId: info.id, dto: request)) + + return result.data + } +} + // MARK: SourceViewDataProvider extension CBAccount: SourceViewDataProvider { diff --git a/DashWallet/Sources/Models/Coinbase/Accounts/AccountRepository.swift b/DashWallet/Sources/Models/Coinbase/Accounts/AccountRepository.swift index 870222794..f24592b54 100644 --- a/DashWallet/Sources/Models/Coinbase/Accounts/AccountRepository.swift +++ b/DashWallet/Sources/Models/Coinbase/Accounts/AccountRepository.swift @@ -26,6 +26,10 @@ class AccountRepository { var dashAccount: CBAccount? { cachedAccounts[kDashAccount] } + + var usdAccount: CBAccount? { + cachedAccounts[Coinbase.dashUSDPair] + } init(authInterop: CBAuthInterop) { self.authInterop = authInterop @@ -72,7 +76,7 @@ class AccountRepository { .filter { $0.currency.type == .crypto && $0.balance.amount.decimal()! > 0 } .map { .init(info: $0, authInterop: authInterop) } - if let nextUri = response.pagination.nextURI { + if let nextUri = response.pagination.nextURI, !nextUri.isEmpty { endpoint = .path(nextUri) } else { endpoint = nil diff --git a/DashWallet/Sources/Models/Coinbase/Accounts/AccountService.swift b/DashWallet/Sources/Models/Coinbase/Accounts/AccountService.swift index a3a4b310b..25c90332a 100644 --- a/DashWallet/Sources/Models/Coinbase/Accounts/AccountService.swift +++ b/DashWallet/Sources/Models/Coinbase/Accounts/AccountService.swift @@ -58,16 +58,18 @@ class AccountService { return tx } - public func placeBuyOrder(for accountName: String, amount: UInt64, paymentMethod: CoinbasePaymentMethod) async throws -> CoinbasePlaceBuyOrder { + public func placeBuyOrder(for accountName: String, amount: UInt64) async throws -> CoinbasePlaceBuyOrder { let account = try await account(by: accountName) - return try await account.placeCoinbaseBuyOrder(amount: amount, paymentMethod: paymentMethod) + return try await account.placeCoinbaseBuyOrder(amount: amount) } - - public func commitBuyOrder(accountName: String, orderID: String) async throws -> CoinbasePlaceBuyOrder { + + public func deposit(to accountName: String, from paymentMethodId: String, amount: UInt64) async throws { let account = try await account(by: accountName) - - let order = try await account.commitCoinbaseBuyOrder(orderID: orderID) - return order + let result = try await account.deposit(from: paymentMethodId, amount: amount) + + if result.status != "created" { + throw Coinbase.Error.general(.depositFailed) + } } func placeTradeOrder(from origin: CBAccount, to destination: CBAccount, amount: String) async throws -> CoinbaseSwapeTrade { diff --git a/DashWallet/Sources/Models/Coinbase/Auth/CBAuth.swift b/DashWallet/Sources/Models/Coinbase/Auth/CBAuth.swift index 29b7c8081..4562a17f1 100644 --- a/DashWallet/Sources/Models/Coinbase/Auth/CBAuth.swift +++ b/DashWallet/Sources/Models/Coinbase/Auth/CBAuth.swift @@ -19,7 +19,6 @@ import AuthenticationServices import Foundation // MARK: - CBAuth - extension Notification.Name { static let userDidChangeNotification: Notification.Name = .init(rawValue: "userDidChangeNotification") } @@ -151,9 +150,7 @@ extension CBAuth { URLQueryItem(name: "account", value: Coinbase.account), ] - if let clientID = Coinbase.clientID as? String { - queryItems.append(URLQueryItem(name: "client_id", value: clientID)) - } + queryItems.append(URLQueryItem(name: "client_id", value: Coinbase.clientID)) var urlComponents = URLComponents() urlComponents.scheme = "https" diff --git a/DashWallet/Sources/Models/Coinbase/Coinbase+Constants.swift b/DashWallet/Sources/Models/Coinbase/Coinbase+Constants.swift index 18853fc68..01e870182 100644 --- a/DashWallet/Sources/Models/Coinbase/Coinbase+Constants.swift +++ b/DashWallet/Sources/Models/Coinbase/Coinbase+Constants.swift @@ -24,11 +24,15 @@ extension Coinbase { static let grantType = "authorization_code" static let responseType = "code" static let scope = - "wallet:accounts:read,wallet:user:read,wallet:payment-methods:read,wallet:buys:read,wallet:buys:create,wallet:transactions:transfer,wallet:transactions:request,wallet:transactions:read,wallet:supported-assets:read,wallet:sells:create,wallet:sells:read,wallet:transactions:send,wallet:addresses:read,wallet:addresses:create,wallet:trades:create,wallet:accounts:create" - static let sendLimitCurrency = "USD" + "wallet:accounts:read,wallet:user:read,wallet:payment-methods:read,wallet:buys:read,wallet:buys:create,wallet:transactions:transfer,wallet:transactions:request,wallet:transactions:read,wallet:supported-assets:read,wallet:sells:create,wallet:sells:read,wallet:transactions:send,wallet:addresses:read,wallet:addresses:create,wallet:trades:create,wallet:accounts:create,wallet:deposits:create" + static let defaultFiat = "USD" + static let sendLimitCurrency = defaultFiat static let sendLimitAmount: Decimal = 1.0 static let sendLimitPeriod = "month" static let account = "all" + static let buyFee = 0.006 + static let dashUSDPair = "DASH-USD" + static let transactionTypeBuy = "BUY" static let clientSecret: String = { if let path = Bundle.main.path(forResource: "Coinbase-Info", ofType: "plist"), diff --git a/DashWallet/Sources/Models/Coinbase/Coinbase+Error.swift b/DashWallet/Sources/Models/Coinbase/Coinbase+Error.swift index 611232a77..11a8f3603 100644 --- a/DashWallet/Sources/Models/Coinbase/Coinbase+Error.swift +++ b/DashWallet/Sources/Models/Coinbase/Coinbase+Error.swift @@ -27,6 +27,9 @@ extension Coinbase { case noActiveUser case revokedToken case noPaymentMethods + case noCashAccount + case rateNotFound + case depositFailed var errorDescription: String? { switch self { @@ -36,6 +39,12 @@ extension Coinbase { return NSLocalizedString("For your security, you have been signed out.", comment: "Coinbase") case .noPaymentMethods: return NSLocalizedString("Please add a payment method on Coinbase", comment: "Coinbase/Buy Dash") + case .noCashAccount: + return NSLocalizedString("No cash account found", comment: "Coinbase") + case .rateNotFound: + return NSLocalizedString("Could not find exchange rate.", comment: "") + case .depositFailed: + return NSLocalizedString("We couldn’t make a deposit to your CrowdNode account.", comment: "Coinbase") } } diff --git a/DashWallet/Sources/Models/Coinbase/Coinbase.swift b/DashWallet/Sources/Models/Coinbase/Coinbase.swift index 953c66ded..1a698249a 100644 --- a/DashWallet/Sources/Models/Coinbase/Coinbase.swift +++ b/DashWallet/Sources/Models/Coinbase/Coinbase.swift @@ -109,6 +109,14 @@ extension Coinbase { var dashAccount: CBAccount? { accountService.dashAccount } + + public func getUsdAccount() async -> CBAccount? { + do { + return try await accountService.account(by: Coinbase.defaultFiat) + } catch { + return nil + } + } } extension Coinbase { @@ -168,35 +176,29 @@ extension Coinbase { /// /// - Throws: Coinbase.Error /// - func placeCoinbaseBuyOrder(amount: UInt64, - paymentMethod: CoinbasePaymentMethod) async throws -> CoinbasePlaceBuyOrder { + func placeCoinbaseBuyOrder(amount: UInt64) async throws -> CoinbasePlaceBuyOrder { do { - return try await accountService.placeBuyOrder(for: kDashAccount, amount: amount, paymentMethod: paymentMethod) + return try await accountService.placeBuyOrder(for: kDashAccount, amount: amount) } catch Coinbase.Error.userSessionRevoked { try await auth.signOut() throw Coinbase.Error.userSessionRevoked - } catch { - throw error } } - - /// Commit Buy Order + + /// Deposit to the fiat account /// /// - Parameters: - /// - orderID: Order id from `CoinbasePlaceBuyOrder` you receive by calling `placeCoinbaseBuyOrder` - /// - /// - Returns: CoinbasePlaceBuyOrder + /// - paymentMethodId: Id of the payment method with which to make the deposit + /// - amount: Plain amount in Dash /// /// - Throws: Coinbase.Error /// - func commitCoinbaseBuyOrder(orderID: String) async throws -> CoinbasePlaceBuyOrder { + func depositToFiatAccount(from paymentMethodId: String, amount: UInt64) async throws { do { - return try await accountService.commitBuyOrder(accountName: kDashAccount, orderID: orderID) + try await accountService.deposit(to: Coinbase.defaultFiat, from: paymentMethodId, amount: amount) } catch Coinbase.Error.userSessionRevoked { try await auth.signOut() throw Coinbase.Error.userSessionRevoked - } catch { - throw error } } diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/CoinbaseAPIEndpoint.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/CoinbaseAPIEndpoint.swift index e096baf6d..c8c3811f0 100644 --- a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/CoinbaseAPIEndpoint.swift +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/CoinbaseAPIEndpoint.swift @@ -133,11 +133,11 @@ struct CoinbaseAPIError: Decodable { public enum CoinbaseEndpoint { case account(String) case accounts + case deposit(accountId: String, dto: CoinbaseDepositRequest) case userAuthInformation case exchangeRates(String) case activePaymentMethods - case placeBuyOrder(String, CoinbasePlaceBuyOrderRequest) - case commitBuyOrder(String, String) + case placeBuyOrder(CoinbasePlaceBuyOrderRequest) case sendCoinsToWallet(accountId: String, verificationCode: String?, dto: CoinbaseTransactionsRequest) case getBaseIdForUSDModel(String) case swapTrade(CoinbaseSwapeTradeRequest) @@ -177,11 +177,11 @@ extension CoinbaseEndpoint: TargetType, AccessTokenAuthorizable { switch self { case .account(let name): return "/v2/accounts/\(name)" case .accounts: return "/v2/accounts" + case .deposit(let accountId, _): return "v2/accounts/\(accountId)/deposits" case .userAuthInformation: return "/v2/user/auth" case .exchangeRates: return "/v2/exchange-rates" case .activePaymentMethods: return "/v2/payment-methods" - case .placeBuyOrder(let accountId, _): return "/v2/accounts/\(accountId)/buys" - case .commitBuyOrder(let accountId, let orderID): return "/v2/accounts/\(accountId)/buys/\(orderID)/commit" + case .placeBuyOrder: return "api/v3/brokerage/orders" case .sendCoinsToWallet(let accountId, _, _): return "/v2/accounts/\(accountId)/transactions" case .getBaseIdForUSDModel: return "/v2/assets/prices" case .swapTrade: return "/v2/trades" @@ -198,7 +198,7 @@ extension CoinbaseEndpoint: TargetType, AccessTokenAuthorizable { public var method: Moya.Method { switch self { - case .getToken, .commitBuyOrder, .placeBuyOrder, .sendCoinsToWallet, .swapTrade, .swapTradeCommit, .createCoinbaseAccountAddress, .refreshToken, .revokeToken: + case .getToken, .placeBuyOrder, .sendCoinsToWallet, .swapTrade, .swapTradeCommit, .createCoinbaseAccountAddress, .refreshToken, .revokeToken, .deposit: return .post default: return .get @@ -215,13 +215,9 @@ extension CoinbaseEndpoint: TargetType, AccessTokenAuthorizable { "account": Coinbase.account, ] - if let value = Coinbase.clientID as? String { - queryItems["client_id"] = value - } - - if let value = Coinbase.clientSecret as? String { - queryItems["client_secret"] = value - } + queryItems["client_id"] = Coinbase.clientID + queryItems["client_secret"] = Coinbase.clientSecret + return .requestParameters(parameters: queryItems, encoding: JSONEncoding.default) case .refreshToken(let refreshToken): var queryItems: [String: Any] = [ @@ -229,13 +225,9 @@ extension CoinbaseEndpoint: TargetType, AccessTokenAuthorizable { "grant_type": "refresh_token", ] - if let value = Coinbase.clientID as? String { - queryItems["client_id"] = value - } - - if let value = Coinbase.clientSecret as? String { - queryItems["client_secret"] = value - } + queryItems["client_id"] = Coinbase.clientID + queryItems["client_secret"] = Coinbase.clientSecret + return .requestParameters(parameters: queryItems, encoding: JSONEncoding.default) case .revokeToken(let token): return .requestParameters(parameters: ["token": token], encoding: JSONEncoding.default) @@ -243,7 +235,9 @@ extension CoinbaseEndpoint: TargetType, AccessTokenAuthorizable { return .requestJSONEncodable(dto) case .swapTrade(let dto): return .requestJSONEncodable(dto) - case .placeBuyOrder(_, let dto): + case .placeBuyOrder(let dto): + return .requestJSONEncodable(dto) + case .deposit(_, let dto): return .requestJSONEncodable(dto) case .accounts: return .requestParameters(parameters: ["limit": 300, "order": "asc"], encoding: URLEncoding.default) diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositRequest.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositRequest.swift new file mode 100644 index 000000000..2711f92e6 --- /dev/null +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositRequest.swift @@ -0,0 +1,30 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +public struct CoinbaseDepositRequest: Codable { + let amount: String + let currency: String + let paymentMethod: String + + enum CodingKeys: String, CodingKey { + case amount + case currency + case paymentMethod = "payment_method" + } +} diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositResponse.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositResponse.swift new file mode 100644 index 000000000..46e6eac01 --- /dev/null +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Deposit/CoinbaseDepositResponse.swift @@ -0,0 +1,37 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +struct CoinbaseDepositResponse: Codable { + let id: String + let status: String + let createdAt: String + let updatedAt: String + let resource: String + let resourcePath: String + let committed: Bool + let payoutAt: String + + enum CodingKeys: String, CodingKey { + case id, status, resource, committed + case createdAt = "created_at" + case updatedAt = "updated_at" + case resourcePath = "resource_path" + case payoutAt = "payout_at" + } +} diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Payment Methods/CoinbasePaymentMethodsResponse.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Payment Methods/CoinbasePaymentMethodsResponse.swift index e14649ec8..68ebf292a 100644 --- a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Payment Methods/CoinbasePaymentMethodsResponse.swift +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Payment Methods/CoinbasePaymentMethodsResponse.swift @@ -133,3 +133,16 @@ public enum PaymentMethodType: String, Codable { } } } + +extension PaymentMethodType { + var isBankAccount: Bool { + get { + switch self { + case .achBankAccount, .sepaBankAccount, .idealBankAccount, .eftBankAccount: + return true + default: + return false + } + } + } +} diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderRequest.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderRequest.swift index 54b102c08..145d9d51b 100644 --- a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderRequest.swift +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderRequest.swift @@ -7,18 +7,34 @@ import Foundation -// MARK: - CoinBasePlaceBuyOrderRequest +// MARK: - CoinbasePlaceOrderParams + public struct CoinbasePlaceBuyOrderRequest: Codable { - let amount: String - let currency: String - let paymentMethod: String - let commit: Bool? - let quote: Bool? + var clientOrderId: UUID + var productId: String + var side: String + var orderConfiguration: OrderConfiguration + + enum CodingKeys: String, CodingKey { + case clientOrderId = "client_order_id" + case productId = "product_id" + case side + case orderConfiguration = "order_configuration" + } +} + +public struct OrderConfiguration: Codable { + var marketMarketIoc: MarketMarketIoc + + enum CodingKeys: String, CodingKey { + case marketMarketIoc = "market_market_ioc" + } +} +public struct MarketMarketIoc: Codable { + var quoteSize: String + enum CodingKeys: String, CodingKey { - case amount - case currency - case paymentMethod = "payment_method" - case commit, quote + case quoteSize = "quote_size" } } diff --git a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderResponse.swift b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderResponse.swift index b7dec8e17..13f8a8243 100644 --- a/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderResponse.swift +++ b/DashWallet/Sources/Models/Coinbase/Infrastructure/API/DTOs/Place Buy Order/CoinbasePlaceBuyOrderResponse.swift @@ -10,59 +10,47 @@ import Foundation // MARK: - CoinbasePlaceBuyOrder struct CoinbasePlaceBuyOrder: Codable { - let id: String? // TODO: Use just String and handle error - let status: String? - let userReference, transaction, createdAt, updatedAt: String? - let resource: String? - let resourcePath: String? - let paymentMethod: PaymentMethod? - let holdUntil: String? - let holdDays: Int? - let isFirstBuy: Bool? - let fee: Amount - let amount: Amount - let total: Amount - let subtotal: Amount - let unitPrice: UnitPrice? - let requiresCompletionStep: Bool? - let committed: Bool? - + let success: Bool + let failureReason: String + let orderId: String + let errorResponse: ErrorResponse? + let successResponse: SuccessResponse? + let orderConfiguration: OrderConfiguration? + enum CodingKeys: String, CodingKey { - case id - case fee - case status - case userReference = "user_reference" - case transaction - case createdAt = "created_at" - case updatedAt = "updated_at" - case resource - case resourcePath = "resource_path" - case paymentMethod = "payment_method" - case holdUntil = "hold_until" - case holdDays = "hold_days" - case isFirstBuy = "is_first_buy" - case amount, total, subtotal - case unitPrice = "unit_price" - case requiresCompletionStep = "requires_completion_step" - case committed + case success + case failureReason = "failure_reason" + case orderId = "order_id" + case errorResponse = "error_response" + case successResponse = "success_response" + case orderConfiguration = "order_configuration" } } -// MARK: - PaymentMethod - -struct PaymentMethod: Codable { - let id, resource, resourcePath: String? - +struct SuccessResponse: Codable { + let orderId: String + let productId: String + let side: String + let clientOrderId: String + enum CodingKeys: String, CodingKey { - case id - case resource - case resourcePath = "resource_path" + case orderId = "order_id" + case productId = "product_id" + case side + case clientOrderId = "client_order_id" } } -// MARK: - UnitPrice - -struct UnitPrice: Codable { - let amount, currency: String? - let scale: Int? +struct ErrorResponse: Codable { + let error: String + let message: String + let errorDetails: String + let previewFailureReason: String + + enum CodingKeys: String, CodingKey { + case error + case message + case errorDetails = "error_details" + case previewFailureReason = "preview_failure_reason" + } } diff --git a/DashWallet/Sources/Models/CrowdNode/API/CrowdNodeEndpoint.swift b/DashWallet/Sources/Models/CrowdNode/API/CrowdNodeEndpoint.swift index fc1ce5012..6eb001742 100644 --- a/DashWallet/Sources/Models/CrowdNode/API/CrowdNodeEndpoint.swift +++ b/DashWallet/Sources/Models/CrowdNode/API/CrowdNodeEndpoint.swift @@ -17,6 +17,10 @@ import Moya +public enum MessageType: Int { + case registerEmail = 1 + case withdrawal = 4 +} // MARK: - CrowdNodeEndpoint @@ -27,7 +31,7 @@ public enum CrowdNodeEndpoint { case isAddressInUse(String) case addressStatus(String) case hasDefaultEmail(String) - case sendSignedMessage(address: String, message: String, signature: String) + case sendSignedMessage(address: String, message: String, signature: String, messagetype: MessageType) case getMessages(String) } @@ -47,8 +51,7 @@ extension CrowdNodeEndpoint: TargetType { case .isAddressInUse(let address): return "odata/apiaddresses/IsApiAddressInUse(address='\(address)')" case .addressStatus(let address): return "odata/apiaddresses/AddressStatus(address='\(address)')" case .hasDefaultEmail(let address): return "odata/apiaddresses/UsingDefaultApiEmail(address='\(address)')" - case .sendSignedMessage(let address, let message, - let signature): return "odata/apimessages/SendMessage(address='\(address)',message='\(message)',signature='\(signature)',messagetype=1)" + case .sendSignedMessage(let address, let message, let signature, let messagetype): return "odata/apimessages/SendMessage(address='\(address)',message='\(message)',signature='\(signature)',messagetype=\(messagetype.rawValue))" case .getMessages(let address): return "odata/apimessages/GetMessages(address='\(address)')" } } diff --git a/DashWallet/Sources/Models/CrowdNode/API/DTOs/WithdrawalLimit.swift b/DashWallet/Sources/Models/CrowdNode/API/DTOs/WithdrawalLimit.swift index 6e3c905f3..e9790b2cf 100644 --- a/DashWallet/Sources/Models/CrowdNode/API/DTOs/WithdrawalLimit.swift +++ b/DashWallet/Sources/Models/CrowdNode/API/DTOs/WithdrawalLimit.swift @@ -37,4 +37,5 @@ enum WithdrawalLimitPeriod: Int { case perTransaction = 0 case perHour = 1 case perDay = 2 + case perBlock = 3 } diff --git a/DashWallet/Sources/Models/CrowdNode/CrowdNode+UserDefaults.swift b/DashWallet/Sources/Models/CrowdNode/CrowdNode+UserDefaults.swift index 4e8e4043e..46c6dfc9c 100644 --- a/DashWallet/Sources/Models/CrowdNode/CrowdNode+UserDefaults.swift +++ b/DashWallet/Sources/Models/CrowdNode/CrowdNode+UserDefaults.swift @@ -31,6 +31,7 @@ private let kConfirmationDialogShown = "crowdNodeConfirmationDialogShownKey" private let kOnlineInfoShown = "crowdNodeOnlineInfoShownKey" private let kSignedEmailMessageId = "crowdNodeSignedEmailMessageId" private let kShouldShowConfirmedNotification = "shouldShowConfirmedNotification" +private let kLastWithdrawalBlock = "lastWithdrawalBlockKey" // MARK: - CrowdNodeDefaults @@ -153,6 +154,15 @@ class CrowdNodeDefaults { UserDefaults.standard.set(value, forKey: kSignedEmailMessageId) } } + + private var _lastWithdrawalBlock: UInt32? = nil + var lastWithdrawalBlock: UInt32 { + get { _lastWithdrawalBlock ?? UserDefaults.standard.value(forKey: kLastWithdrawalBlock) as? UInt32 ?? 0 } + set(value) { + _lastWithdrawalBlock = value + UserDefaults.standard.set(value, forKey: kLastWithdrawalBlock) + } + } func resetUserDefaults() { @@ -165,5 +175,6 @@ class CrowdNodeDefaults { confirmationDialogShown = false onlineInfoShown = false signedEmailMessageId = -1 + lastWithdrawalBlock = 0 } } diff --git a/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift b/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift index 06236087c..8803b9f62 100644 --- a/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift +++ b/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift @@ -418,52 +418,37 @@ extension CrowdNode { } } - func withdraw(amount: UInt64) async throws { + func withdraw(amount: UInt64, signature: String) async throws { guard !accountAddress.isEmpty else { return } guard amount <= balance else { return } try checkWithdrawalLimits(amount) - let requestPermil = calculateWithdrawalPermil(forAmount: amount) - let requestValue = CrowdNode.apiOffset + UInt64(requestPermil) - let requiredTopUp = requestValue + TX_FEE_PER_INPUT - let account = DWEnvironment.sharedInstance().currentAccount - let finalTopUp = min(account.maxOutputAmount, requiredTopUp) - - let topUpTx = try await topUpAccount(accountAddress, finalTopUp) - DSLogger.log("CrowdNode withdraw topup tx hash: \(topUpTx.txHashHexString)") - - let withdrawTx = try await sendCoinsService.sendCoins(address: CrowdNode.crowdNodeAddress, - amount: requestValue, - inputSelector: SingleInputAddressSelector(candidates: [topUpTx], - address: accountAddress)) - DSLogger.log("CrowdNode withdraw tx hash: \(withdrawTx.txHashHexString)") + DSLogger.log("CrowdNode: request withdrawal") + let result = try await webService.requestWithdrawal(address: accountAddress, amount: amount, signature: signature) - Task { - let receivedWithdrawalTx = CrowdNodeWithdrawalReceivedTx() - let errorResponse = CrowdNodeErrorResponse(errorValue: requestValue, - accountAddress: accountAddress) - let withdrawalDeniedResponse = CrowdNodeResponse(responseCode: ApiCode.withdrawalDenied, - accountAddress: accountAddress) - - let responseTx = await txObserver.first(filters: errorResponse, withdrawalDeniedResponse, receivedWithdrawalTx) - DSLogger.log("CrowdNode withdraw response tx hash: \(responseTx.txHashHexString)") - - if errorResponse.matches(tx: responseTx) || withdrawalDeniedResponse.matches(tx: responseTx) { - handleError(error: CrowdNode.Error.withdraw) + if result.messageStatus.lowercased() == kMessageReceivedStatus { + DSLogger.log("CrowdNode: withdrawal request sent successfully") + refreshBalance(afterWithdrawal: true) + updateLastWithdrawalBlock() + } else { + DSLogger.log("CrowdNode: sendMessage not received, status: \(String(describing: result.messageStatus)). Result: \(String(describing: result.result))") + + if let msg = result.result { + handleError(error: CrowdNode.Error.messageStatus(error: msg)) } else { - refreshBalance(afterWithdrawal: true) + handleError(error: CrowdNode.Error.withdraw) } } } func calculateWithdrawalPermil(forAmount: UInt64) -> UInt64 { let maxPermil = ApiCode.withdrawAll.rawValue - + if balance == 0 { return maxPermil } - + let permil = UInt64(round(Double(forAmount * maxPermil) / Double(balance))) let requestPermil = min(permil, maxPermil) @@ -481,6 +466,12 @@ extension CrowdNode { } private func checkWithdrawalLimits(_ amount: UInt64) throws { + let lastSyncBlockHeight = DWEnvironment.sharedInstance().currentChain.lastSyncBlockHeight + + if lastSyncBlockHeight <= prefs.lastWithdrawalBlock { + throw CrowdNode.Error.withdrawLimit(amount: 0, period: .perBlock) + } + let perTransactionLimit = getWithdrawalLimit(.perTransaction) if amount > perTransactionLimit { @@ -514,6 +505,11 @@ extension CrowdNode { return withdrawals.compactMap { tx in chain.amountReceived(from: tx) }.reduce(0, +) } + + private func updateLastWithdrawalBlock() { + let lastSyncBlockHeight = DWEnvironment.sharedInstance().currentChain.lastSyncBlockHeight + prefs.lastWithdrawalBlock = lastSyncBlockHeight + } } // MARK: Balance @@ -613,6 +609,8 @@ extension CrowdNode { return prefs.crowdNodeWithdrawalLimitPerHour case .perDay: return prefs.crowdNodeWithdrawalLimitPerDay + case .perBlock: + return 0 } } } @@ -644,7 +642,7 @@ extension CrowdNode { guard !accountAddress.isEmpty else { return } DSLogger.log("CrowdNode: sending signed email message") - let result = try await webService.sendSignedMessage(address: accountAddress, message: email, signature: signature) + let result = try await webService.registerEmail(address: accountAddress, email: email, signature: signature) if result.messageStatus.lowercased() == kMessageReceivedStatus { DSLogger.log("CrowdNode: signed email sent successfully") diff --git a/DashWallet/Sources/Models/CrowdNode/Services/CrowdNodeWebService.swift b/DashWallet/Sources/Models/CrowdNode/Services/CrowdNodeWebService.swift index f2b6be567..d837d476e 100644 --- a/DashWallet/Sources/Models/CrowdNode/Services/CrowdNodeWebService.swift +++ b/DashWallet/Sources/Models/CrowdNode/Services/CrowdNodeWebService.swift @@ -67,9 +67,14 @@ extension CrowdNodeService { } } - func sendSignedMessage(address: String, message: String, signature: String) async throws -> MessageStatus { + func registerEmail(address: String, email: String, signature: String) async throws -> MessageStatus { let encodedSignature = signature.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) - return try await httpClient.request(.sendSignedMessage(address: address, message: message, signature: encodedSignature!)) + return try await httpClient.request(.sendSignedMessage(address: address, message: email, signature: encodedSignature!, messagetype: MessageType.registerEmail)) + } + + func requestWithdrawal(address: String, amount: UInt64, signature: String) async throws -> MessageStatus { + let encodedSignature = signature.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) + return try await httpClient.request(.sendSignedMessage(address: address, message: amount.value, signature: encodedSignature!, messagetype: MessageType.withdrawal)) } func isDefaultEmail(address: String) async -> Bool { diff --git a/DashWallet/Sources/Models/DWDateFormatter.m b/DashWallet/Sources/Models/DWDateFormatter.m deleted file mode 100644 index 3ab6dcf48..000000000 --- a/DashWallet/Sources/Models/DWDateFormatter.m +++ /dev/null @@ -1,82 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2020 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWDateFormatter.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWDateFormatter () - -@property (readonly, nonatomic, strong) NSDateFormatter *shortDateFormatter; -@property (readonly, nonatomic, strong) NSDateFormatter *longDateFormatter; -@property (readonly, nonatomic, strong) NSDateFormatter *iso8601DateFormatter; - -@end - -NS_ASSUME_NONNULL_END - -@implementation DWDateFormatter - -+ (instancetype)sharedInstance { - static DWDateFormatter *_sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - NSLocale *locale = [NSLocale currentLocale]; - _shortDateFormatter = [[NSDateFormatter alloc] init]; - _shortDateFormatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMMdjmma" - options:0 - locale:locale]; - _longDateFormatter = [[NSDateFormatter alloc] init]; - _longDateFormatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"yyyyMMMdjmma" - options:0 - locale:locale]; - - _iso8601DateFormatter = [[NSDateFormatter alloc] init]; - NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; - [_iso8601DateFormatter setLocale:enUSPOSIXLocale]; - [_iso8601DateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; - [_iso8601DateFormatter setCalendar:[NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]]; - } - return self; -} - -- (NSString *)shortStringFromDate:(NSDate *)date { - NSCalendar *calendar = [NSCalendar currentCalendar]; - NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]]; - NSInteger dateYear = [calendar component:NSCalendarUnitYear fromDate:date]; - - NSDateFormatter *desiredFormatter = (nowYear == dateYear) ? self.shortDateFormatter : self.longDateFormatter; - return [desiredFormatter stringFromDate:date]; -} - -- (NSString *)longStringFromDate:(NSDate *)date { - return [self.longDateFormatter stringFromDate:date]; -} - -- (NSString *)iso8601StringFromDate:(NSDate *)date { - return [self.iso8601DateFormatter stringFromDate:date]; -} - -@end diff --git a/DashWallet/Sources/Models/DWDateFormatter.swift b/DashWallet/Sources/Models/DWDateFormatter.swift new file mode 100644 index 000000000..32e17c5e0 --- /dev/null +++ b/DashWallet/Sources/Models/DWDateFormatter.swift @@ -0,0 +1,73 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +@objc +class DWDateFormatter: NSObject { + @objc + static let sharedInstance = DWDateFormatter() + + private let shortDateFormatter: DateFormatter + private let longDateFormatter: DateFormatter + private let iso8601DateFormatter: DateFormatter + private let dateOnlyFormatter: DateFormatter + + private override init() { + let locale = Locale.current + + shortDateFormatter = DateFormatter() + shortDateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMMdjmma", options: 0, locale: locale) + + longDateFormatter = DateFormatter() + longDateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "yyyyMMMdjmma", options: 0, locale: locale) + + iso8601DateFormatter = DateFormatter() + let enUSPOSIXLocale = Locale(identifier: "en_US_POSIX") + iso8601DateFormatter.locale = enUSPOSIXLocale + iso8601DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + iso8601DateFormatter.calendar = Calendar(identifier: .gregorian) + + dateOnlyFormatter = DateFormatter() + shortDateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMMd", options: 0, locale: locale) + } + + func shortString(from date: Date) -> String { + let calendar = Calendar.current + let nowYear = calendar.component(.year, from: Date()) + let dateYear = calendar.component(.year, from: date) + + let desiredFormatter = (nowYear == dateYear) ? shortDateFormatter : longDateFormatter + return desiredFormatter.string(from: date) + } + + func longString(from date: Date) -> String { + return longDateFormatter.string(from: date) + } + + func dateOnly(from date: Date) -> String { + return shortDateFormatter.string(from: date) + } + + func iso8601String(from date: Date) -> String { + return iso8601DateFormatter.string(from: date) + } +} + +@objc extension DWDateFormatter { + @objc func shortStringFromDate(_ date: Date) -> String { + return shortString(from: date) + } +} diff --git a/DashWallet/Sources/Models/DWGlobalOptions.h b/DashWallet/Sources/Models/DWGlobalOptions.h index 4ffc11e46..46f9aa651 100644 --- a/DashWallet/Sources/Models/DWGlobalOptions.h +++ b/DashWallet/Sources/Models/DWGlobalOptions.h @@ -51,18 +51,22 @@ NS_ASSUME_NONNULL_BEGIN @property (nullable, nonatomic, strong) NSDate *dateReclassifyYourTransactionsFlowActivated; @property (nullable, nonatomic, strong) NSDate *dateHistoricalRatesActivated; @property (nonatomic, assign) NSInteger paymentsScreenCurrentTab; - -@property (nullable, nonatomic, copy) NSString *dashpayUsername; -@property (nonatomic, assign) BOOL dashpayRegistrationCompleted; -@property (nullable, nonatomic, strong) NSDate *mostRecentViewedNotificationDate; - @property (nonatomic, assign, getter=isResyncingWallet) BOOL resyncingWallet; @property (nonatomic, assign) DWPaymentCurrency selectedPaymentCurrency; @property (nonatomic, assign) BOOL exploreDashMerchantsInfoShown; - @property (nonatomic, assign) BOOL coinbaseInfoShown; + +#ifdef DASHPAY +@property (nonatomic, assign) BOOL dashPayRegistrationOpenedOnce; +@property (nonatomic, assign) BOOL dashpayRegistrationCompleted; +@property (nonatomic, assign) BOOL dpInvitationFlowEnabled; +@property (nonatomic, assign) BOOL shouldShowInvitationsBadge; +@property (nonatomic, assign) BOOL confirmationAcceptContactRequestIsOn; +@property (nullable, nonatomic, copy) NSString *dashpayUsername; +@property (nullable, nonatomic, strong) NSDate *mostRecentViewedNotificationDate; +#endif // Non-dynamic - (BOOL)lockScreenDisabled; diff --git a/DashWallet/Sources/Models/DWGlobalOptions.m b/DashWallet/Sources/Models/DWGlobalOptions.m index 5ca10cec5..efd1fe864 100644 --- a/DashWallet/Sources/Models/DWGlobalOptions.m +++ b/DashWallet/Sources/Models/DWGlobalOptions.m @@ -37,9 +37,6 @@ @implementation DWGlobalOptions @dynamic balanceHidden; @dynamic shouldDisplayOnboarding; @dynamic paymentsScreenCurrentTab; -@dynamic dashpayUsername; -@dynamic dashpayRegistrationCompleted; -@dynamic mostRecentViewedNotificationDate; @dynamic resyncingWallet; @dynamic selectedPaymentCurrency; @dynamic shouldDisplayReclassifyYourTransactionsFlow; @@ -48,6 +45,16 @@ @implementation DWGlobalOptions @dynamic exploreDashMerchantsInfoShown; @dynamic coinbaseInfoShown; +#ifdef DASHPAY +@dynamic dashpayUsername; +@dynamic dashpayRegistrationCompleted; +@dynamic mostRecentViewedNotificationDate; +@dynamic shouldShowInvitationsBadge; +@dynamic dashPayRegistrationOpenedOnce; +@dynamic dpInvitationFlowEnabled; +@dynamic confirmationAcceptContactRequestIsOn; +#endif + #pragma mark - Init - (instancetype)init { @@ -60,6 +67,9 @@ - (instancetype)init { DW_KEYPATH(self, shouldDisplayOnboarding) : @YES, DW_KEYPATH(self, shouldDisplayReclassifyYourTransactionsFlow) : @YES, DW_KEYPATH(self, coinbaseInfoShown) : @NO, +#if DASHPAY + DW_KEYPATH(self, confirmationAcceptContactRequestIsOn) : @YES, +#endif }; self = [super initWithUserDefaults:nil defaults:defaults]; @@ -137,9 +147,6 @@ - (void)restoreToDefaults { self.shortcuts = nil; self.localNotificationsEnabled = YES; self.balanceHidden = NO; - self.dashpayUsername = nil; - self.dashpayRegistrationCompleted = NO; - self.mostRecentViewedNotificationDate = nil; self.resyncingWallet = NO; self.selectedPaymentCurrency = DWPaymentCurrencyDash; self.shouldDisplayReclassifyYourTransactionsFlow = YES; @@ -147,6 +154,14 @@ - (void)restoreToDefaults { self.dateHistoricalRatesActivated = nil; self.exploreDashMerchantsInfoShown = NO; self.coinbaseInfoShown = NO; + +#ifdef DASHPAY + self.dashpayUsername = nil; + self.dashpayRegistrationCompleted = NO; + self.mostRecentViewedNotificationDate = nil; + self.dashPayRegistrationOpenedOnce = NO; + self.confirmationAcceptContactRequestIsOn = YES; +#endif } @end diff --git a/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift b/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift index 7ad839945..23987bc2d 100644 --- a/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift +++ b/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift @@ -73,6 +73,4 @@ class ExploreDatabaseConnection { func execute(query: String) throws -> [Item] { try db.prepare(query).prepareRowIterator().map { Item(row: $0) } } - } - diff --git a/DashWallet/Sources/Models/Voting/DAO/UsernameRequestsDAO.swift b/DashWallet/Sources/Models/Voting/DAO/UsernameRequestsDAO.swift new file mode 100644 index 000000000..0ac618046 --- /dev/null +++ b/DashWallet/Sources/Models/Voting/DAO/UsernameRequestsDAO.swift @@ -0,0 +1,243 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite + +// MARK: - UsernameRequestsDAO + +protocol UsernameRequestsDAO { + func create(dto: UsernameRequest) async + func all(onlyWithLinks: Bool) async -> [UsernameRequest] + func duplicates(onlyWithLinks: Bool) async -> [UsernameRequest] + func get(byRequestId id: String) async -> UsernameRequest? + func get(byUsername name: String) async -> UsernameRequest? + func update(dto: UsernameRequest) async + func delete(by requestId: String) async + func vote(for requestIds: [String], voteIncrement: Int) async + func deleteAll() +} + +// MARK: - UsernameRequestsDAOImpl + +class UsernameRequestsDAOImpl: NSObject, UsernameRequestsDAO { + private var db: Connection { DatabaseConnection.shared.db } + private var cache: [String: UsernameRequest] = [:] + + func create(dto: UsernameRequest) async { + + do { + let usernameRequest = UsernameRequest.table.insert(or: .replace, + UsernameRequest.requestId <- dto.requestId, + UsernameRequest.username <- dto.username, + UsernameRequest.createdAt <- dto.createdAt, + UsernameRequest.identity <- dto.identity, + UsernameRequest.link <- dto.link, + UsernameRequest.votes <- dto.votes, + UsernameRequest.isApproved <- dto.isApproved) + try await execute(usernameRequest) + self.cache[dto.requestId] = dto + } catch { + print(error) + } + } + + func get(byRequestId id: String) async -> UsernameRequest? { + let statement = UsernameRequest.table.filter(UsernameRequest.requestId == id) + + do { + let results: [UsernameRequest] = try await prepare(statement) + self.cache[id] = results.first + return results.first + } catch { + print(error) + } + + return nil + } + + func get(byUsername name: String) async -> UsernameRequest? { + let statement = UsernameRequest.table.filter(UsernameRequest.username == name) + + do { + let results: [UsernameRequest] = try await prepare(statement) + + if let request = results.first { + self.cache[request.requestId] = request + } + + return results.first + } catch { + print(error) + } + + return nil + } + + func update(dto: UsernameRequest) async { + await create(dto: dto) + } + + func deleteAll() { + do { + try db.run(UsernameRequest.table.delete()) + } catch { + print(error) + } + } + + static let shared = UsernameRequestsDAOImpl() +} + +// MARK: - Queries + +extension UsernameRequestsDAOImpl { + func all(onlyWithLinks: Bool) async -> [UsernameRequest] { + let linksParam = onlyWithLinks ? 1 : 0 + let query = """ + SELECT * FROM username_requests + WHERE (\(linksParam) = 0) OR (\(linksParam) = 1 AND link IS NOT NULL) + ORDER BY username + COLLATE NOCASE ASC + """ + + do { + return try await self.execute(query: query) + } catch { + print(error) + } + + return [] + } + + func duplicates(onlyWithLinks: Bool) async -> [UsernameRequest] { + let linksParam = onlyWithLinks ? 1 : 0 + let query = """ + SELECT * FROM username_requests + WHERE username IN + (SELECT username FROM username_requests GROUP BY username HAVING COUNT(username) > 1) + AND ((\(linksParam) = 0) OR (\(linksParam) = 1 AND link IS NOT NULL)) + ORDER BY username + COLLATE NOCASE ASC + """ + + do { + return try await self.execute(query: query) + } catch { + print(error) + } + + return [] + } + + func vote(for requestIds: [String], voteIncrement: Int) async { + let idsPlaceholder = requestIds.map { _ in "?" }.joined(separator: ", ") + let query = """ + UPDATE username_requests + SET isApproved = 1, votes = votes + ? + WHERE requestId IN (\(idsPlaceholder)) + """ + + do { + let binding: [Binding?] = [voteIncrement] + requestIds + let _: [UsernameRequest] = try await self.execute(query: query, bindings: binding) + } catch { + print(error) + } + } + + func delete(by requestId: String) async { + self.cache[requestId] = nil + + do { + let deleteQuery = UsernameRequest.table.filter(UsernameRequest.requestId == requestId).delete() + try await self.execute(deleteQuery) + } catch { + print(error) + } + } +} + +// MARK: - async / await + +extension UsernameRequestsDAOImpl { + private func execute(query: String, bindings: [Binding?] = []) async throws -> [Item] { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume(returning: []) } + + do { + let results = try self.db.prepare(query, bindings).prepareRowIterator().map { Item(row: $0) } + continuation.resume(returning: results) + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func execute(_ query: Insert) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func execute(_ query: Delete) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func prepare(_ statement: QueryType) async throws -> [T] { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume(returning: []) } + + var result: [T] = [] + + do { + for row in try db.prepare(statement) { + let rowItem = T(row: row) + result.append(rowItem) + } + + continuation.resume(returning: result) + } catch { + continuation.resume(throwing: error) + } + } + } + } +} diff --git a/DashWallet/Sources/Models/Voting/MasternodeKey.swift b/DashWallet/Sources/Models/Voting/MasternodeKey.swift new file mode 100644 index 000000000..a0185135b --- /dev/null +++ b/DashWallet/Sources/Models/Voting/MasternodeKey.swift @@ -0,0 +1,23 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +struct MasternodeKey: Hashable { + var key: String + var ip: String +} diff --git a/DashWallet/Sources/Models/Voting/UsernameRequest.swift b/DashWallet/Sources/Models/Voting/UsernameRequest.swift new file mode 100644 index 000000000..5824f51c6 --- /dev/null +++ b/DashWallet/Sources/Models/Voting/UsernameRequest.swift @@ -0,0 +1,70 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite + +// MARK: - GroupedUsernames + +struct GroupedUsernames: Hashable { + var username: String + var requests: [UsernameRequest] +} + +// MARK: - UsernameRequest + +struct UsernameRequest: RowDecodable, Hashable { + var requestId: String + var username: String + var createdAt: Int64 + var identity: String + var link: String? + var votes: Int + var isApproved: Bool + + init(requestId: String, username: String, createdAt: Int64, identity: String, link: String?, votes: Int, isApproved: Bool) { + self.requestId = requestId + self.username = username + self.createdAt = createdAt + self.identity = identity + self.link = link + self.votes = votes + self.isApproved = isApproved + } + + init(row: Row) { + self.requestId = row[UsernameRequest.requestId] + self.username = row[UsernameRequest.username] + self.createdAt = row[UsernameRequest.createdAt] + self.identity = row[UsernameRequest.identity] + self.link = row[UsernameRequest.link] + self.votes = row[UsernameRequest.votes] + self.isApproved = row[UsernameRequest.isApproved] + } +} + +extension UsernameRequest { + static var table: Table { Table("username_requests") } + + static var requestId: Expression { Expression("requestId") } + static var username: Expression { Expression("username") } + static var createdAt: Expression { Expression("createdAt") } + static var identity: Expression { Expression("identity") } + static var votes: Expression { Expression("votes") } + static var isApproved: Expression { Expression("isApproved") } + static var link: Expression { .init("link") } +} diff --git a/DashWallet/Sources/Models/Voting/VotingConstants.swift b/DashWallet/Sources/Models/Voting/VotingConstants.swift new file mode 100644 index 000000000..6ec501fb0 --- /dev/null +++ b/DashWallet/Sources/Models/Voting/VotingConstants.swift @@ -0,0 +1,22 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +class VotingConstants { + // TODO: replace + static let votingStartTime = TimeInterval(1696091858) + static let votingEndTime = TimeInterval(1700391858) +} diff --git a/DashWallet/Sources/Models/Voting/VotingFiltersModel.swift b/DashWallet/Sources/Models/Voting/VotingFiltersModel.swift new file mode 100644 index 000000000..84110136c --- /dev/null +++ b/DashWallet/Sources/Models/Voting/VotingFiltersModel.swift @@ -0,0 +1,290 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +// MARK: - VotingFilters + +struct VotingFilters: Equatable { + + enum SortBy { + case dateAsc + case datesDesc + case votesDesc + case votesAsc + + var localizedString: String { + switch self { + case .dateAsc: + return NSLocalizedString("Old to new", comment: "Voting") + case .datesDesc: + return NSLocalizedString("New to old", comment: "Voting") + case .votesDesc: + return NSLocalizedString("High to low", comment: "Voting") + case .votesAsc: + return NSLocalizedString("Low to high", comment: "Voting") + } + } + } + + enum FilterBy { + case all + case approved + case notApproved + + var localizedString: String { + switch self { + case .all: + return NSLocalizedString("All", comment: "Voting") + case .approved: + return NSLocalizedString("I have approved", comment: "Voting") + case .notApproved: + return NSLocalizedString("I have not approved", comment: "Voting") + } + } + } + + var sortBy: SortBy? + var filterBy: FilterBy? + var onlyDuplicates: Bool? + var onlyWithLinks: Bool? + + static let defaultFilters = VotingFilters(sortBy: .datesDesc, filterBy: .notApproved, onlyDuplicates: true, onlyWithLinks: false) + + var localizedDescription: String? { + var string: [String] = [] + + if let value = sortBy { + string.append(value.localizedString) + } + + if onlyDuplicates == true { + string.append(NSLocalizedString("Only duplicates", comment: "Voting")) + } + + if onlyWithLinks == true { + string.append(NSLocalizedString("Only with links", comment: "Voting")) + } + + return string.isEmpty ? nil : string.joined(separator: ", ") + } +} + +extension VotingFilters { + var items: Set { + var set: Set = [] + + if let value = sortBy { + switch value { + case .dateAsc: + set.insert(.dateAsc) + case .datesDesc: + set.insert(.dateDesc) + case .votesDesc: + set.insert(.votesDesc) + case .votesAsc: + set.insert(.votesAsc) + } + } + + if let value = filterBy { + switch value { + case .all: + set.insert(.typeAll) + case .approved: + set.insert(.typeApproved) + case .notApproved: + set.insert(.typeNotApproved) + } + } + + if onlyDuplicates == true { + set.insert(.onlyDuplicates) + } + + if onlyWithLinks == true { + set.insert(.onlyRequestsWithLinks) + } + + return set + } +} + +// MARK: - VotingFilterItem + +enum VotingFilterItem: String { + case dateAsc + case dateDesc + case votesAsc + case votesDesc + case typeAll + case typeApproved + case typeNotApproved + case onlyDuplicates + case onlyRequestsWithLinks + case reset + + var itemsToUnselect: [VotingFilterItem] { + switch self { + case .dateAsc: + return [.dateDesc, .votesAsc, .votesDesc] + case .dateDesc: + return [.dateAsc, .votesAsc, .votesDesc] + case .votesAsc: + return [.dateDesc, .dateAsc, .votesDesc] + case .votesDesc: + return [.dateAsc, .dateDesc, .votesAsc] + case .typeAll: + return [.typeApproved, .typeNotApproved] + case .typeApproved: + return [.typeAll, .typeNotApproved] + case .typeNotApproved: + return [.typeApproved, .typeAll] + default: + return [] + } + } + + var cellIdentifier: String { + switch self { + case .reset: + return "FilterItemResetCell" + case .onlyRequestsWithLinks, .onlyDuplicates: + return "VotingFilterItemCheckmarkCell" + default: + return "VotingFilterItemSelectableCell" + } + } + + var title: String { + switch self { + case .dateAsc: + return NSLocalizedString("Date: Old to new", comment: "Voting") + case .dateDesc: + return NSLocalizedString("Date: New to old", comment: "Voting") + case .votesAsc: + return NSLocalizedString("Votes: Low to high", comment: "Voting") + case .votesDesc: + return NSLocalizedString("Votes: High to low", comment: "Voting") + case .typeAll: + return NSLocalizedString("All", comment: "Voting") + case .typeApproved: + return NSLocalizedString("I have approved", comment: "Voting") + case .typeNotApproved: + return NSLocalizedString("I have not approved", comment: "Voting") + case .reset: + return NSLocalizedString("Reset Filters", comment: "") + case .onlyDuplicates: + return NSLocalizedString("Only duplicates", comment: "") + case .onlyRequestsWithLinks: + return NSLocalizedString("Only requests with links", comment: "") + } + } +} + +// MARK: - VotingFiltersModel + +final class VotingFiltersModel { + var selected: Set = [] + var initialFilters: Set! + + var canApply: Bool { + selected != initialFilters + } + + var canReset: Bool { + selected != VotingFilters.defaultFilters.items || canApply + } + + func isFilterSelected(_ filter: VotingFilterItem) -> Bool { + selected.contains(filter) + } + + func onlySelf(_ filter: VotingFilterItem) -> Bool { + filter == .onlyDuplicates || filter == .onlyRequestsWithLinks + } + + func toggle(filter: VotingFilterItem) -> Bool { + if isFilterSelected(filter) { + if onlySelf(filter) || !filter.itemsToUnselect.filter({ isFilterSelected($0) }).isEmpty { + selected.remove(filter) + return true + } + } else { + unselect(filters: filter.itemsToUnselect) + selected.insert(filter) + return true + } + + return false + } + + func unselect(filters: [VotingFilterItem]) { + for item in filters { + selected.remove(item) + } + } + + func resetFilters() { + selected = VotingFilters.defaultFilters.items + } +} + +// MARK: VotingFiltersModel +extension VotingFiltersModel { + var appliedFilters: VotingFilters { + var filters = VotingFilters() + + if selected.contains(.dateAsc) { + filters.sortBy = .dateAsc + } + + if selected.contains(.dateDesc) { + filters.sortBy = .datesDesc + } + + if selected.contains(.votesAsc) { + filters.sortBy = .votesAsc + } + + if selected.contains(.votesDesc) { + filters.sortBy = .votesDesc + } + + if selected.contains(.typeAll) { + filters.filterBy = .all + } + + if selected.contains(.typeApproved) { + filters.filterBy = .approved + } + + if selected.contains(.typeNotApproved) { + filters.filterBy = .notApproved + } + + if selected.contains(.onlyDuplicates) { + filters.onlyDuplicates = true + } + + if selected.contains(.onlyRequestsWithLinks) { + filters.onlyWithLinks = true + } + + return filters + } +} diff --git a/DashWallet/Sources/Models/Voting/VotingPrefs.swift b/DashWallet/Sources/Models/Voting/VotingPrefs.swift new file mode 100644 index 000000000..eb405674a --- /dev/null +++ b/DashWallet/Sources/Models/Voting/VotingPrefs.swift @@ -0,0 +1,75 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +private let kIsVotingInfoShown = "votingInfoShownKey" +private let kIsRequestInfoShown = "requestUsernameInfoShownKey" +private let kRequestedUsernameId = "requestedUsernameIdKey" +private let kRequestedUsername = "requestedUsernameKey" +private let kAlreadyPaid = "alreadyPaidForUsernameKey" + +// MARK: - VotingPrefs + +class VotingPrefs { + public static let shared: VotingPrefs = .init() + + private var _votingInfoShown: Bool? = nil + var votingInfoShown: Bool { + get { _votingInfoShown ?? UserDefaults.standard.bool(forKey: kIsVotingInfoShown) } + set(value) { + _votingInfoShown = value + UserDefaults.standard.set(value, forKey: kIsVotingInfoShown) + } + } + + private var _requestInfoShown: Bool? = nil + var requestInfoShown: Bool { + get { _requestInfoShown ?? UserDefaults.standard.bool(forKey: kIsRequestInfoShown) } + set(value) { + _requestInfoShown = value + UserDefaults.standard.set(value, forKey: kIsRequestInfoShown) + } + } + + private var _requestedUsernameId: String? = nil + var requestedUsernameId: String? { + get { _requestedUsernameId ?? UserDefaults.standard.string(forKey: kRequestedUsernameId) } + set(value) { + _requestedUsernameId = value + UserDefaults.standard.set(value, forKey: kRequestedUsernameId) + } + } + + private var _requestedUsername: String? = nil + var requestedUsername: String? { + get { _requestedUsername ?? UserDefaults.standard.string(forKey: kRequestedUsername) } + set(value) { + _requestedUsername = value + UserDefaults.standard.set(value, forKey: kRequestedUsername) + } + } + + private var _alreadyPaid: Bool? = nil + var alreadyPaid: Bool { + get { _alreadyPaid ?? UserDefaults.standard.bool(forKey: kAlreadyPaid) } + set(value) { + _alreadyPaid = value + UserDefaults.standard.set(value, forKey: kAlreadyPaid) + } + } +} diff --git a/DashWallet/Sources/UI/Coinbase/Base/UIViewController+Coinbase.swift b/DashWallet/Sources/UI/Coinbase/Base/UIViewController+Coinbase.swift index ed6e11559..4ede0b2f7 100644 --- a/DashWallet/Sources/UI/Coinbase/Base/UIViewController+Coinbase.swift +++ b/DashWallet/Sources/UI/Coinbase/Base/UIViewController+Coinbase.swift @@ -92,7 +92,7 @@ extension CoinbaseCodeConfirmationPreviewing where Self: BaseViewController { protocol CoinbaseTransactionHandling: CoinbaseCodeConfirmationPreviewing, CoinbaseTransactionDelegate, ErrorPresentable { } extension CoinbaseTransactionHandling where Self: BaseViewController { - func transferFromCoinbaseToWalletDidFail(with error: Coinbase.Error) { + func transferFromCoinbaseToWalletDidFail(with error: Error) { if case Coinbase.Error.transactionFailed(let r) = error { switch r { case .twoFactorRequired: diff --git a/DashWallet/Sources/UI/Coinbase/Base/ViewModel+Coinbase.swift b/DashWallet/Sources/UI/Coinbase/Base/ViewModel+Coinbase.swift index c45b7ed35..ba9e9e9be 100644 --- a/DashWallet/Sources/UI/Coinbase/Base/ViewModel+Coinbase.swift +++ b/DashWallet/Sources/UI/Coinbase/Base/ViewModel+Coinbase.swift @@ -21,7 +21,7 @@ import Foundation protocol CoinbaseTransactionDelegate: AnyObject { func transferFromCoinbaseToWalletDidSucceed() - func transferFromCoinbaseToWalletDidFail(with error: Coinbase.Error) + func transferFromCoinbaseToWalletDidFail(with error: Error) func transferFromCoinbaseToWalletDidCancel() } diff --git a/DashWallet/Sources/UI/Coinbase/Buy Dash/BuyDashViewController.swift b/DashWallet/Sources/UI/Coinbase/Buy Dash/BuyDashViewController.swift index 1fd0aa2ef..da1793af4 100644 --- a/DashWallet/Sources/UI/Coinbase/Buy Dash/BuyDashViewController.swift +++ b/DashWallet/Sources/UI/Coinbase/Buy Dash/BuyDashViewController.swift @@ -29,7 +29,6 @@ final class BuyDashViewController: CoinbaseAmountViewController { model as! BuyDashModel } - private var activePaymentMethodView: ActivePaymentMethodView! internal var cancellables = Set() override var isMaxButtonHidden: Bool { true } @@ -45,31 +44,7 @@ final class BuyDashViewController: CoinbaseAmountViewController { // MARK: Actions override func actionButtonAction(sender: UIView) { - showActivityIndicator() - buyDashModel.buy() - } - - @objc - func payWithTapGestureRecognizerAction() { - let vc = PaymentMethodsController.controller() - vc.paymentMethods = buyDashModel.paymentMethods - vc.selectedPaymentMethod = buyDashModel.activePaymentMethod - vc.selectPaymentMethodAction = { [weak self] method in - self?.buyDashModel.select(paymentMethod: method) - self?.activePaymentMethodView.update(with: method) - } - present(vc, animated: true) - } - - // MARK: Life cycle - override func configureModel() { - super.configureModel() - - buyDashModel.delegate = self - - buyDashModel.$paymentMethods.sink { [weak self] items in - self?.activePaymentMethodView?.update(with: items.first) - }.store(in: &cancellables) + handleBuy(retryWithDeposit: false) } override func configureHierarchy() { @@ -98,29 +73,15 @@ final class BuyDashViewController: CoinbaseAmountViewController { amountView.removeFromSuperview() contentView.addSubview(amountView) - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(payWithTapGestureRecognizerAction)) - - activePaymentMethodView = ActivePaymentMethodView(frame: .zero) - activePaymentMethodView.update(with: buyDashModel.activePaymentMethod) - activePaymentMethodView.setChevronButtonHidden(buyDashModel.paymentMethods.count <= 1) - activePaymentMethodView.translatesAutoresizingMaskIntoConstraints = false - activePaymentMethodView.addGestureRecognizer(tapGestureRecognizer) - contentView.addSubview(activePaymentMethodView) - let sendingToView = SendingToView(frame: .zero) sendingToView.translatesAutoresizingMaskIntoConstraints = false topKeyboardView = sendingToView NSLayoutConstraint.activate([ - activePaymentMethodView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15), - activePaymentMethodView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), - activePaymentMethodView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15), - activePaymentMethodView.heightAnchor.constraint(equalToConstant: 46), - amountView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), amountView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), - amountView.topAnchor.constraint(equalTo: activePaymentMethodView.bottomAnchor, constant: 30), + NSLayoutConstraint(item: amountView!, attribute: .top, relatedBy: .equal, toItem: contentView, attribute: .centerY, multiplier: 0.35, constant: 0), ]) } @@ -134,22 +95,25 @@ final class BuyDashViewController: CoinbaseAmountViewController { } } -// MARK: BuyDashModelDelegate - -extension BuyDashViewController: BuyDashModelDelegate { - func buyDashModelDidPlace(order: CoinbasePlaceBuyOrder) { - guard let paymentMethod = buyDashModel.activePaymentMethod else { return } - - let vc = ConfirmOrderController(order: order, paymentMethod: paymentMethod, plainAmount: UInt64(buyDashModel.amount.plainAmount)) - vc.hidesBottomBarWhenPushed = true - navigationController?.pushViewController(vc, animated: true) - hideActivityIndicator() - } - - func buyDashModelFailedToPlaceOrder(with error: Coinbase.Error) { - hideActivityIndicator() - - showAlert(with: "Error", message: error.localizedDescription) +extension BuyDashViewController { + private func handleBuy(retryWithDeposit: Bool) { + showActivityIndicator() + + Task { + let error = await buyDashModel.validateBuyDash(retryWithDeposit: retryWithDeposit) + hideActivityIndicator() + + switch error { + case .unknownError: + guard let paymentMethod = buyDashModel.activePaymentMethod else { return } + + let vc = ConfirmOrderController(paymentMethod: paymentMethod, plainAmount: UInt64(buyDashModel.amount.plainAmount)) + vc.hidesBottomBarWhenPushed = true + navigationController?.pushViewController(vc, animated: true) + default: + showError(error) + } + } } } @@ -169,3 +133,42 @@ extension BuyDashViewController { } } +extension BuyDashViewController { + private func showError(_ error: Coinbase.Error) { + let title: String + let message: String + let action: UIAlertAction? + + switch error { + case .general(.noCashAccount), .general(.noPaymentMethods): + title = error.failureReason ?? NSLocalizedString("Error", comment: "") + message = error.localizedDescription + action = UIAlertAction(title: NSLocalizedString("Add", comment: "Coinbase"), style: .default) { [weak self] _ in + self?.addPaymentMethod() + } + case .transactionFailed(.notEnoughFunds): + title = NSLocalizedString("You don’t have enough balance", comment: "Coinbase") + message = NSLocalizedString("Would you like to make a deposit for your purchase using a linked bank account?", comment: "Coinbase") + action = UIAlertAction(title: NSLocalizedString("Confirm", comment: "Coinbase"), style: .default) { [weak self] _ in + self?.handleBuy(retryWithDeposit: true) + } + default: + title = error.failureReason ?? NSLocalizedString("Error", comment: "") + message = error.localizedDescription + action = nil + } + + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + if let action = action { + alert.addAction(action) + } + + let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) + alert.addAction(cancelAction) + present(alert, animated: true) + } + + private func addPaymentMethod() { + UIApplication.shared.open(kCoinbaseAddPaymentMethodsURL) + } +} diff --git a/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/ConfirmOrderController.swift b/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/ConfirmOrderController.swift index cff3d9ec3..338be8c74 100644 --- a/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/ConfirmOrderController.swift +++ b/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/ConfirmOrderController.swift @@ -96,10 +96,10 @@ final class ConfirmOrderController: OrderPreviewViewController { model as! ConfirmOrderModel } - init(order: CoinbasePlaceBuyOrder, paymentMethod: CoinbasePaymentMethod, plainAmount: UInt64) { + init(paymentMethod: CoinbasePaymentMethod, plainAmount: UInt64) { super.init(nibName: nil, bundle: nil) - model = ConfirmOrderModel(order: order, paymentMethod: paymentMethod, plainAmount: plainAmount) + model = ConfirmOrderModel(paymentMethod: paymentMethod, plainAmount: plainAmount) model.transactionDelegate = self configureModel() } diff --git a/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/Model/ConfirmOrderModel.swift b/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/Model/ConfirmOrderModel.swift index 468055b50..853646e46 100644 --- a/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/Model/ConfirmOrderModel.swift +++ b/DashWallet/Sources/UI/Coinbase/Buy Dash/Confirm Transaction Controller/Model/ConfirmOrderModel.swift @@ -32,66 +32,64 @@ final class ConfirmOrderModel: OrderPreviewModel { var completionHandle: (() -> Void)? var failureHandle: ((ConfirmOrderError) -> Void)? var orderChangeHandle: (() -> Void)? + var showCountdown: Bool = false - var order: CoinbasePlaceBuyOrder +// var order: CoinbasePlaceBuyOrder let paymentMethod: CoinbasePaymentMethod /// Plain amount in Dash let amountToTransfer: UInt64 + private let fiatAmount: Decimal? + private let feeAmount: Decimal? - init(order: CoinbasePlaceBuyOrder, paymentMethod: CoinbasePaymentMethod, plainAmount: UInt64) { - self.order = order + init(paymentMethod: CoinbasePaymentMethod, plainAmount: UInt64) { self.paymentMethod = paymentMethod amountToTransfer = plainAmount + + let fee = UInt64(Double(amountToTransfer) * Coinbase.buyFee) + fiatAmount = try? Coinbase.shared.currencyExchanger.convertDash(amount: amountToTransfer.dashAmount, to: Coinbase.defaultFiat) + feeAmount = try? Coinbase.shared.currencyExchanger.convertDash(amount: fee.dashAmount, to: Coinbase.defaultFiat) } - - func placeOrder() { - guard let orderId = order.id else { - failureHandle?(.error) - return + + func placeOrder() async throws { + if paymentMethod.type.isBankAccount { + try await Coinbase.shared.depositToFiatAccount(from: paymentMethod.id, amount: amountToTransfer) } - - let amount = amountToTransfer - - Task { [weak self] in - do { - let _ = try await Coinbase.shared.commitCoinbaseBuyOrder(orderID: orderId) - try await self?.transferFromCoinbase(amount: amount, with: nil) - } catch { - await MainActor.run { [weak self] in - self?.failureHandle?(.error) - } - } + + let result = try await Coinbase.shared.placeCoinbaseBuyOrder(amount: amountToTransfer) + + if !result.success { + throw Coinbase.Error.transactionFailed(.message(result.errorResponse?.message ?? result.failureReason)) } + + try await transferFromCoinbase(amount: amountToTransfer, with: nil) } - func retry() { - Task { [weak self] in - let order = try await Coinbase.shared.placeCoinbaseBuyOrder(amount: amountToTransfer, paymentMethod: paymentMethod) - self?.order = order - - await MainActor.run { [weak self] in - self?.orderChangeHandle?() - } - } - } + func retry() { } } extension ConfirmOrderModel { func formattedValue(for item: ConfirmOrderItem) -> String { - let value: String + var value: String = "" switch item { case .paymentMethod: value = paymentMethod.name case .purchaseAmount: - value = order.subtotal.formattedFiatAmount + if let amount = fiatAmount { + value = amount.formattedFiatAmount + } case .feeAmount: - value = order.fee.formattedFiatAmount + if let fee = feeAmount { + value = fee.formattedFiatAmount + } case .totalAmount: - value = order.total.formattedFiatAmount + if let amount = fiatAmount, let fee = feeAmount { + let total = amount + fee + value = total.formattedFiatAmount + } case .amountInDash: - value = order.amount.formattedDashAmount + value = amountToTransfer.formattedDashAmount } return value diff --git a/DashWallet/Sources/UI/Coinbase/Buy Dash/Model/BuyDashModel.swift b/DashWallet/Sources/UI/Coinbase/Buy Dash/Model/BuyDashModel.swift index 38c3d8ecb..1b261fa4b 100644 --- a/DashWallet/Sources/UI/Coinbase/Buy Dash/Model/BuyDashModel.swift +++ b/DashWallet/Sources/UI/Coinbase/Buy Dash/Model/BuyDashModel.swift @@ -17,13 +17,6 @@ import Foundation -// MARK: - BuyDashModelDelegate - -protocol BuyDashModelDelegate: AnyObject { - func buyDashModelDidPlace(order: CoinbasePlaceBuyOrder) - func buyDashModelFailedToPlaceOrder(with error: Coinbase.Error) -} - // MARK: - BuyDashFailureReason enum BuyDashFailureReason { @@ -34,8 +27,7 @@ enum BuyDashFailureReason { // MARK: - BuyDashModel final class BuyDashModel: CoinbaseAmountModel { - weak var delegate: BuyDashModelDelegate? - + @Published var paymentMethods: [CoinbasePaymentMethod] = [] var activePaymentMethod: CoinbasePaymentMethod? { @@ -77,24 +69,37 @@ final class BuyDashModel: CoinbaseAmountModel { selectedPaymentMethod = paymentMethod } - public func buy() { - guard let paymentMethod = activePaymentMethod else { - return + public func validateBuyDash(retryWithDeposit: Bool) async -> Coinbase.Error { + guard let account = await Coinbase.shared.getUsdAccount() else { + return Coinbase.Error.general(.noCashAccount) } - + let amount = amount.plainAmount - Task { - do { - let order = try await Coinbase.shared.placeCoinbaseBuyOrder(amount: amount, paymentMethod: paymentMethod) - await MainActor.run { [weak self] in - self?.delegate?.buyDashModelDidPlace(order: order) - } - } catch { - await MainActor.run { [weak self] in - self?.error = error - } + let cashBalanceInDash = account.info.plainAmountInDash + + if cashBalanceInDash >= amount { + let fiatMethod = paymentMethods.first { method in + method.type == .fiatAccount && method.currency == Coinbase.defaultFiat + } + + guard let method = fiatMethod else { + return Coinbase.Error.general(.noCashAccount) + } + + select(paymentMethod: method) + } else if retryWithDeposit { + let bankAccountMethod = paymentMethods.first { $0.type.isBankAccount } + + guard let method = bankAccountMethod else { + return Coinbase.Error.general(.noPaymentMethods) } + + select(paymentMethod: method) + } else { + return Coinbase.Error.transactionFailed(.notEnoughFunds) } + + return Coinbase.Error.unknownError } } diff --git a/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/CoinbaseEntryPointModel.swift b/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/CoinbaseEntryPointModel.swift index 189828e09..8774721e9 100644 --- a/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/CoinbaseEntryPointModel.swift +++ b/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/CoinbaseEntryPointModel.swift @@ -21,7 +21,7 @@ import Foundation struct CoinbaseEntryPointItem: IntegrationEntryPointItem { let type: IntegrationItemType - static let supportedCases = [.buyDash, .convertCrypto, .transferDash].map { CoinbaseEntryPointItem(type: $0) } + static let supportedCases = [.buyDash, /*.convertCrypto,*/ .transferDash].map { CoinbaseEntryPointItem(type: $0) } var title: String { type.title } var icon: String { type.icon } @@ -34,8 +34,8 @@ struct CoinbaseEntryPointItem: IntegrationEntryPointItem { return NSLocalizedString("Receive directly into Dash Wallet", comment: "Coinbase Entry Point") case .sellDash: return NSLocalizedString("Receive directly into Coinbase", comment: "Coinbase Entry Point") - case .convertCrypto: - return NSLocalizedString("Between Dash Wallet and Coinbase", comment: "Coinbase Entry Point") +// case .convertCrypto: +// return NSLocalizedString("Between Dash Wallet and Coinbase", comment: "Coinbase Entry Point") case .transferDash: return NSLocalizedString("Between Dash Wallet and Coinbase", comment: "Coinbase Entry Point") } diff --git a/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/IntegrationViewController+Coinbase.swift b/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/IntegrationViewController+Coinbase.swift index 9756216dc..b07f79e4a 100644 --- a/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/IntegrationViewController+Coinbase.swift +++ b/DashWallet/Sources/UI/Coinbase/CoinbaseEntryPoint/IntegrationViewController+Coinbase.swift @@ -24,8 +24,8 @@ extension IntegrationViewController { return BuyDashViewController() case .sellDash: return BuyDashViewController() - case .convertCrypto: - return CustodialSwapsViewController() +// case .convertCrypto: +// return CustodialSwapsViewController() case .transferDash: return TransferAmountViewController() } diff --git a/DashWallet/Sources/UI/Coinbase/Custodial Swaps/Order Preview/Model/ConvertCryptoOrderPreviewModel.swift b/DashWallet/Sources/UI/Coinbase/Custodial Swaps/Order Preview/Model/ConvertCryptoOrderPreviewModel.swift index 9bb918814..c50bd540c 100644 --- a/DashWallet/Sources/UI/Coinbase/Custodial Swaps/Order Preview/Model/ConvertCryptoOrderPreviewModel.swift +++ b/DashWallet/Sources/UI/Coinbase/Custodial Swaps/Order Preview/Model/ConvertCryptoOrderPreviewModel.swift @@ -27,6 +27,7 @@ final class ConvertCryptoOrderPreviewModel: OrderPreviewModel { var completionHandle: (() -> Void)? var failureHandle: ((ConfirmOrderError) -> Void)? var orderChangeHandle: (() -> Void)? + var showCountdown: Bool = true /// Selected account, origin let selectedAccount: CBAccount @@ -46,7 +47,7 @@ final class ConvertCryptoOrderPreviewModel: OrderPreviewModel { amountToTransfer = order.outputAmount.amount.plainDashAmount()! } - func placeOrder() { + func placeOrder() async throws { guard let orderId = order.id else { failureHandle?(.error) return diff --git a/DashWallet/Sources/UI/Coinbase/Order Preview/Model/OrderPreviewModel.swift b/DashWallet/Sources/UI/Coinbase/Order Preview/Model/OrderPreviewModel.swift index f28735f5b..c3bba6fa1 100644 --- a/DashWallet/Sources/UI/Coinbase/Order Preview/Model/OrderPreviewModel.swift +++ b/DashWallet/Sources/UI/Coinbase/Order Preview/Model/OrderPreviewModel.swift @@ -24,8 +24,9 @@ protocol OrderPreviewModel: CoinbaseTransactionSendable { var completionHandle: (() -> Void)? { set get } var failureHandle: ((ConfirmOrderError) -> Void)? { set get } var orderChangeHandle: (() -> Void)? { set get } + var showCountdown: Bool { get } - func placeOrder() + func placeOrder() async throws func retry() } diff --git a/DashWallet/Sources/UI/Coinbase/Order Preview/OrderPreviewViewController.swift b/DashWallet/Sources/UI/Coinbase/Order Preview/OrderPreviewViewController.swift index 9bea513a2..da946cf4b 100644 --- a/DashWallet/Sources/UI/Coinbase/Order Preview/OrderPreviewViewController.swift +++ b/DashWallet/Sources/UI/Coinbase/Order Preview/OrderPreviewViewController.swift @@ -52,13 +52,18 @@ class OrderPreviewViewController: BaseViewController, NetworkReachabilityHandlin actionButton.showActivityIndicator() actionButton.isEnabled = false - model.placeOrder() + Task { + do { + try await model.placeOrder() + } catch { + transferFromCoinbaseToWalletDidFail(with: error) + } + } } @objc func cancelAction() { - let alert = UIAlertController(title: nil, message: NSLocalizedString("Are you sure you want to cancel this order?", comment: "Coinbase/Buy Dash/Cancel Order "), - preferredStyle: .alert) + let alert = UIAlertController(title: nil, message: NSLocalizedString("Are you sure you want to cancel this order?", comment: "Coinbase/Buy Dash/Cancel Order"), preferredStyle: .alert) let noAction = UIAlertAction(title: NSLocalizedString("No", comment: ""), style: .cancel) alert.addAction(noAction) let yesAction = UIAlertAction(title: NSLocalizedString("Yes", comment: ""), style: .default) { [weak self] _ in @@ -95,7 +100,10 @@ class OrderPreviewViewController: BaseViewController, NetworkReachabilityHandlin super.viewDidLoad() configureHierarchy() - startCounting() + + if model.showCountdown { + startCounting() + } networkStatusDidChange = { [weak self] _ in self?.reloadView() @@ -162,9 +170,12 @@ extension OrderPreviewViewController { model.orderChangeHandle = { [weak self] in self?.tableView.reloadData() - self?.retryButton.hideActivityIndicator() - self?.retryButton.isEnabled = true - self?.startCounting() + + if self?.model.showCountdown == true { + self?.retryButton.hideActivityIndicator() + self?.retryButton.isEnabled = true + self?.startCounting() + } } model.failureHandle = { [weak self] _ in @@ -208,9 +219,9 @@ extension OrderPreviewViewController { actionButton = ActionButton() actionButton.translatesAutoresizingMaskIntoConstraints = false - actionButton.setTitle(NSLocalizedString("Confirm (%@)", comment: "Coinbase/Buy Dash/Confirm Order"), for: .normal) + actionButton.setTitle(NSLocalizedString("Confirm", comment: "Coinbase/Buy Dash/Confirm Order"), for: .normal) actionButton.addTarget(self, action: #selector(confirmAction), for: .touchUpInside) - actionButton.isHidden = true + actionButton.isHidden = model.showCountdown buttonsStackView.addArrangedSubview(actionButton) retryButton = TintedButton() @@ -218,7 +229,7 @@ extension OrderPreviewViewController { retryButton.addTarget(self, action: #selector(retryAction), for: .touchUpInside) retryButton.setImage(UIImage(systemName: "arrow.clockwise"), for: .normal) retryButton.setTitle(NSLocalizedString("Retry", comment: "Coinbase"), for: .normal) - retryButton.isHidden = false + retryButton.isHidden = !model.showCountdown buttonsStackView.addArrangedSubview(retryButton) networkUnavailableView = NetworkUnavailableView(frame: .init(x: 0, y: 0, width: view.bounds.width, height: 200)) diff --git a/DashWallet/Sources/UI/Coinbase/ServiceOverview/ServiceEntryPointModel.swift b/DashWallet/Sources/UI/Coinbase/ServiceOverview/ServiceEntryPointModel.swift index fe3057b5d..30487646c 100644 --- a/DashWallet/Sources/UI/Coinbase/ServiceOverview/ServiceEntryPointModel.swift +++ b/DashWallet/Sources/UI/Coinbase/ServiceOverview/ServiceEntryPointModel.swift @@ -48,9 +48,10 @@ extension Service { SupportedFeature(serviceName:NSLocalizedString("Buy Dash with fiat", comment: "Dash Service Overview"), imageName:"service.BuyDashwithfiat"), - SupportedFeature(serviceName:NSLocalizedString("Buy and convert Dash with another crypto", - comment: "Dash Service Overview"), - imageName:"service.BuyAndConvertDash"), +// Disable per MO-103 +// SupportedFeature(serviceName:NSLocalizedString("Buy and convert Dash with another crypto", +// comment: "Dash Service Overview"), +// imageName:"service.BuyAndConvertDash"), SupportedFeature(serviceName:NSLocalizedString("Transfer Dash", comment: "Dash Service Overview"), imageName:"service.TransferDash", diff --git a/DashWallet/Sources/UI/Coinbase/Transfer Amount/Model/TransferAmountModel.swift b/DashWallet/Sources/UI/Coinbase/Transfer Amount/Model/TransferAmountModel.swift index d0badea38..ad1bf8b73 100644 --- a/DashWallet/Sources/UI/Coinbase/Transfer Amount/Model/TransferAmountModel.swift +++ b/DashWallet/Sources/UI/Coinbase/Transfer Amount/Model/TransferAmountModel.swift @@ -103,7 +103,7 @@ final class TransferAmountModel: CoinbaseAmountModel, CoinbaseTransactionSendabl obtainNewAddress { [weak self] address in guard let address else { - self?.delegate?.transferFromCoinbaseToWalletDidFail(with: .transactionFailed(.failedToObtainNewAddress)) + self?.delegate?.transferFromCoinbaseToWalletDidFail(with: Coinbase.Error.transactionFailed(.failedToObtainNewAddress)) return } diff --git a/DashWallet/Sources/UI/CrowdNode/CrowdNode.storyboard b/DashWallet/Sources/UI/CrowdNode/CrowdNode.storyboard index 1a373f199..2558b2bb4 100644 --- a/DashWallet/Sources/UI/CrowdNode/CrowdNode.storyboard +++ b/DashWallet/Sources/UI/CrowdNode/CrowdNode.storyboard @@ -1,9 +1,9 @@ - + - + @@ -159,6 +159,7 @@ + @@ -230,6 +231,7 @@ + @@ -408,7 +410,13 @@ + + + + + + @@ -708,12 +716,16 @@ + - + + + + @@ -1403,10 +1415,25 @@ + + + + + + + + + + + + + + + @@ -1581,7 +1608,12 @@ + + + + + @@ -1897,12 +1929,18 @@ + + + + + + @@ -1963,6 +2001,7 @@ + @@ -2152,6 +2191,16 @@ + + + + + + + + + + @@ -2220,6 +2269,8 @@ + + @@ -2401,12 +2452,15 @@ + + + @@ -2437,7 +2491,7 @@ - + @@ -2459,7 +2513,7 @@ - + @@ -2474,7 +2528,7 @@ - + diff --git a/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift b/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift index d8641e1f7..0c0a50e8c 100644 --- a/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift +++ b/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift @@ -284,8 +284,19 @@ extension CrowdNodeModel { func withdraw(amount: UInt64) async throws -> Bool { guard amount > 0 && walletBalance >= CrowdNode.minimumLeftoverBalance else { return false } - try await crowdNode.withdraw(amount: amount) - return true + + let wallet = DWEnvironment.sharedInstance().currentWallet + let result = await wallet.seed(withPrompt: NSLocalizedString("Sign the message", comment: "CrowdNode"), forAmount: 1) + + if !result.1 { + if let key = wallet.privateKey(forAddress: crowdNode.accountAddress, fromSeed: result.0!) { + let signature = DSKeyManager.signMesasageDigest(key, digest: amount.value.magicDigest()) + try await crowdNode.withdraw(amount: amount, signature: signature.base64EncodedString()) + return true + } + } + + return false } func adjustedWithdrawalAmount(requestedAmount: UInt64) -> UInt64 { diff --git a/DashWallet/Sources/UI/CrowdNode/Extensions/UINavigationController+CrowdNode.swift b/DashWallet/Sources/UI/CrowdNode/Extensions/UINavigationController+CrowdNode.swift index d20afe723..2d23f7d87 100644 --- a/DashWallet/Sources/UI/CrowdNode/Extensions/UINavigationController+CrowdNode.swift +++ b/DashWallet/Sources/UI/CrowdNode/Extensions/UINavigationController+CrowdNode.swift @@ -16,13 +16,6 @@ // extension UINavigationController { - func replaceLast(_ n: Int = 1, with controller: UIViewController, animated: Bool = true) { - var viewControllers = viewControllers - viewControllers.removeLast(n) - viewControllers.append(controller) - setViewControllers(viewControllers, animated: animated) - } - func toErrorScreen(error: CrowdNode.Error) { var headerText = "" diff --git a/DashWallet/Sources/UI/CrowdNode/Getting Started/GettingStartedViewController.swift b/DashWallet/Sources/UI/CrowdNode/Getting Started/GettingStartedViewController.swift index 618586337..ce133921a 100644 --- a/DashWallet/Sources/UI/CrowdNode/Getting Started/GettingStartedViewController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Getting Started/GettingStartedViewController.swift @@ -23,14 +23,18 @@ final class GettingStartedViewController: BaseViewController { private let viewModel = CrowdNodeModel.shared private var cancellableBag = Set() + @IBOutlet var titleLabel: UILabel! + @IBOutlet var subtitleLabel: UILabel! @IBOutlet var logoWrapper: UIView! @IBOutlet var newAccountButton: UIControl! @IBOutlet var newAccountTitle: UILabel! @IBOutlet var newAccountIcon: UIImageView! @IBOutlet var balanceHint: UIView! + @IBOutlet var passphraseLabel: UILabel! @IBOutlet var passphraseHint: UIView! @IBOutlet var linkAccountButton: UIControl! - @IBOutlet var minimumBalanceLable: UILabel! + @IBOutlet var minimumBalanceLabel: UILabel! + @IBOutlet var linkAccountLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() @@ -105,13 +109,17 @@ extension GettingStartedViewController { private func configureHierarchy() { view.backgroundColor = UIColor.dw_secondaryBackground() - logoWrapper.layer.dw_applyShadow(with: .dw_shadow(), alpha: 0.05, x: 0, y: 0, blur: 10) newAccountButton.layer.dw_applyShadow(with: .dw_shadow(), alpha: 0.1, x: 0, y: 0, blur: 10) linkAccountButton.layer.dw_applyShadow(with: .dw_shadow(), alpha: 0.1, x: 0, y: 0, blur: 10) let minimumDash = CrowdNode.minimumRequiredDash.formattedDashAmount - minimumBalanceLable.text = String.localizedStringWithFormat(NSLocalizedString("You need at least %@ on your Dash Wallet", comment: "CrowdNode"), minimumDash) + minimumBalanceLabel.text = String.localizedStringWithFormat(NSLocalizedString("You need at least %@ on your Dash Wallet", comment: "CrowdNode"), minimumDash) + titleLabel.text = NSLocalizedString("Getting started with CrowdNode", comment: "CrowdNode") + subtitleLabel.text = NSLocalizedString("To start staking, create an account on CrowdNode or connect to an existing one.", comment: "CrowdNode") + newAccountTitle.text = NSLocalizedString("New CrowdNode Account", comment: "CrowdNode") + passphraseLabel.text = NSLocalizedString("You have to backup your passphrase in Dash Wallet", comment: "CrowdNode") + linkAccountLabel.text = NSLocalizedString("Link Existing Account", comment: "CrowdNode") refreshCreateAccountButton() } diff --git a/DashWallet/Sources/UI/CrowdNode/Getting Started/WelcomeToCrowdNodeViewController.swift b/DashWallet/Sources/UI/CrowdNode/Getting Started/WelcomeToCrowdNodeViewController.swift index 528293e9f..592e15492 100644 --- a/DashWallet/Sources/UI/CrowdNode/Getting Started/WelcomeToCrowdNodeViewController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Getting Started/WelcomeToCrowdNodeViewController.swift @@ -21,7 +21,13 @@ final class WelcomeToCrowdNodeViewController: BaseViewController { private let viewModel = CrowdNodeModel.shared private var cancellableBag = Set() + @IBOutlet var titleLabel: UILabel! + @IBOutlet var stakingLabel: UILabel! + @IBOutlet var stakingSubtitleLabel: UILabel! + @IBOutlet var rewardsLabel: UILabel! + @IBOutlet var rewardsSubtitleLabel: UILabel! @IBOutlet var logoWrapper: UIView! + @IBOutlet var continueButton: UIButton! override func viewDidLoad() { super.viewDidLoad() @@ -47,5 +53,12 @@ final class WelcomeToCrowdNodeViewController: BaseViewController { private func configureHierarchy() { logoWrapper.layer.dw_applyShadow(with: .dw_shadow(), alpha: 0.05, x: 0, y: 0, blur: 10) view.backgroundColor = .dw_secondaryBackground() + + titleLabel.text = NSLocalizedString("Become part of a Dash Masternode with CrowdNode", comment: "CrowdNode") + stakingLabel.text = NSLocalizedString("Introducing Staking", comment: "CrowdNode") + stakingSubtitleLabel.text = NSLocalizedString("Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash.", comment: "CrowdNode") + rewardsLabel.text = NSLocalizedString("Get Rewards Instantly", comment: "CrowdNode") + rewardsSubtitleLabel.text = NSLocalizedString("Receive your share of rewards daily.", comment: "CrowdNode") + continueButton.setTitle(NSLocalizedString("Continue", comment: ""), for: .normal) } } diff --git a/DashWallet/Sources/UI/CrowdNode/New Account/AccountCreatingController.swift b/DashWallet/Sources/UI/CrowdNode/New Account/AccountCreatingController.swift index 5d1053377..3a75c9642 100644 --- a/DashWallet/Sources/UI/CrowdNode/New Account/AccountCreatingController.swift +++ b/DashWallet/Sources/UI/CrowdNode/New Account/AccountCreatingController.swift @@ -24,6 +24,7 @@ final class AccountCreatingController: UIViewController { private var cancellableBag = Set() @IBOutlet var actionButton: UIButton! + @IBOutlet var titleLabel: UILabel! @IBOutlet var statusLabel: UILabel! override func viewDidLoad() { @@ -54,6 +55,8 @@ final class AccountCreatingController: UIViewController { extension AccountCreatingController { private func configureHierarchy() { view.backgroundColor = .dw_secondaryBackground() + titleLabel.text = NSLocalizedString("Please wait", comment: "") + actionButton.setTitle(NSLocalizedString("Close and notify when it’s done", comment: "CrowdNode"), for: .normal) } private func configureObservers() { diff --git a/DashWallet/Sources/UI/CrowdNode/New Account/NewAccountViewController.swift b/DashWallet/Sources/UI/CrowdNode/New Account/NewAccountViewController.swift index 86f69692e..0b9a283cc 100644 --- a/DashWallet/Sources/UI/CrowdNode/New Account/NewAccountViewController.swift +++ b/DashWallet/Sources/UI/CrowdNode/New Account/NewAccountViewController.swift @@ -28,6 +28,7 @@ final class NewAccountViewController: UIViewController, UITextViewDelegate { @IBOutlet var explainerLabel1: UILabel! @IBOutlet var explainerLabel2: UILabel! @IBOutlet var actionButton: ActionButton! + @IBOutlet var addressTitleLabel: UILabel! @IBOutlet var addressLabel: UILabel! @IBOutlet var acceptTermsCheckBox: DWCheckbox! @IBOutlet var acceptTermsText: UITextView! @@ -81,12 +82,14 @@ extension NewAccountViewController { private func configureHierarchy() { definesPresentationContext = true view.backgroundColor = .dw_secondaryBackground() + addressTitleLabel.text = NSLocalizedString("Dash address", comment: "") configureTermsCheckBox() if isLinkingOnlineAccount { configureForLinkingOnlineAccount() } else { + configureForNewAccount() configureActionButton() } } @@ -129,12 +132,18 @@ extension NewAccountViewController { UIApplication.shared.open(URL) return false } + + private func configureForNewAccount() { + titleLabel.text = NSLocalizedString("New CrowdNode Account", comment: "CrowdNode") + actionButton.setTitle("Create Account", for: .normal) + explainerLabel1.text = NSLocalizedString("CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address.", comment: "CrowdNode") + explainerLabel2.text = NSLocalizedString("Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address.", comment: "CrowdNode") + } private func configureForLinkingOnlineAccount() { titleLabel.text = NSLocalizedString("Link Existing CrowdNode Account", comment: "CrowdNode") - actionButton.setTitle("Log in to CrowdNode", for: .normal) - explainerLabel1.text = NSLocalizedString("All transfers to and from CrowdNode from this device will be performed with the below Dash address from this device.", - comment: "CrowdNode") + actionButton.setTitle(NSLocalizedString("Log in to CrowdNode", comment: "CrowdNode"), for: .normal) + explainerLabel1.text = NSLocalizedString("All transfers to and from CrowdNode from this device will be performed with the below Dash address from this device.", comment: "CrowdNode") explainerLabel2.isHidden = true explainerLabel2.heightAnchor.constraint(equalToConstant: 0).isActive = true } diff --git a/DashWallet/Sources/UI/CrowdNode/Online/ConfirmationTransactionQRController.swift b/DashWallet/Sources/UI/CrowdNode/Online/ConfirmationTransactionQRController.swift index fd71ad58e..a25309ef7 100644 --- a/DashWallet/Sources/UI/CrowdNode/Online/ConfirmationTransactionQRController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Online/ConfirmationTransactionQRController.swift @@ -23,6 +23,7 @@ final class ConfirmationTransactionQRController: UIViewController { private var cancellableBag = Set() @IBOutlet var qrImage: UIImageView! + @IBOutlet var titleLabel: UILabel! @IBOutlet var messageLabel: UILabel! private var paymentRequest: DSPaymentRequest! @@ -54,6 +55,7 @@ extension ConfirmationTransactionQRController { private func configureHierarchy() { view.backgroundColor = .dw_secondaryBackground() + titleLabel.text = NSLocalizedString("Scan QR", comment: "") let confirmationAmount = CrowdNode.apiConfirmationDashAmount.formattedDashAmount messageLabel.text = String.localizedStringWithFormat(NSLocalizedString("This QR already contains the payment request for %@", comment: "CrowdNode Confirm"), confirmationAmount) diff --git a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountConfirmationController.swift b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountConfirmationController.swift index e34a94fa8..5b754094f 100644 --- a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountConfirmationController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountConfirmationController.swift @@ -29,13 +29,19 @@ final class OnlineAccountConfirmationController: BaseViewController { return paymentRequest } + @IBOutlet var titleLabel: UILabel! + @IBOutlet var howToConfirmLabel: UILabel! + @IBOutlet var primaryAddressTitle: UILabel! @IBOutlet var primaryAddressLabel: UILabel! + @IBOutlet var addressTitle: UILabel! @IBOutlet var addressLabel: UILabel! @IBOutlet var infoLabel: UILabel! + @IBOutlet var info2Label: UILabel! @IBOutlet var documentationLinkButton: UIStackView! @IBOutlet var qrButton: UIButton! @IBOutlet var shareButton: UIButton! @IBOutlet var attentionBox: UIView! + @IBOutlet var attentionLabel: UILabel! static func controller() -> OnlineAccountConfirmationController { vc(OnlineAccountConfirmationController.self, from: sb("CrowdNode")) @@ -87,13 +93,21 @@ extension OnlineAccountConfirmationController { private func configureHierarchy() { view.backgroundColor = .dw_secondaryBackground() + titleLabel.text = NSLocalizedString("Verify your API Dash address", comment: "CrowdNode") + howToConfirmLabel.text = NSLocalizedString("How to confirm your API Dash address", comment: "CrowdNode") + primaryAddressTitle.text = NSLocalizedString("Primary Dash address", comment: "CrowdNode") + info2Label.text = NSLocalizedString("to the Dash address designated for your CrowdNode account in the Dash Wallet on this device", comment: "CrowdNode") primaryAddressLabel.text = viewModel.primaryAddress + addressTitle.text = NSLocalizedString("Dash address", comment: "CrowdNode") addressLabel.text = viewModel.accountAddress + qrButton.setTitle(NSLocalizedString("Show QR", comment: "CrowdNode"), for: .normal) qrButton.titleLabel?.font = UIFont.dw_mediumFont(ofSize: 13) + qrButton.setTitle(NSLocalizedString("Share", comment: "CrowdNode"), for: .normal) shareButton.titleLabel?.font = UIFont.dw_mediumFont(ofSize: 13) attentionBox.layer.borderWidth = 1 attentionBox.layer.borderColor = UIColor.systemYellow.cgColor - + attentionLabel.text = NSLocalizedString("We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device.", comment: "CrowdNode") + let confirmationAmount = CrowdNode.apiConfirmationDashAmount.formattedDashAmount infoLabel.text = String .localizedStringWithFormat(NSLocalizedString("Send %@ from your primary Dash address that you currently use for your CrowdNode account", comment: "CrowdNode Confirm"), diff --git a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountDetailsController.swift b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountDetailsController.swift index 1295300e2..bc631edea 100644 --- a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountDetailsController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountDetailsController.swift @@ -18,7 +18,12 @@ final class OnlineAccountDetailsController: BaseViewController { private let viewModel = CrowdNodeModel.shared + @IBOutlet var titleLabel: UILabel! + @IBOutlet var subtitleLabel: UILabel! + @IBOutlet var primaryAddressTitle: UILabel! @IBOutlet var primaryAddressLabel: UILabel! + @IBOutlet var subtitle2Label: UILabel! + @IBOutlet var addressTitle: UILabel! @IBOutlet var addressLabel: UILabel! static func controller() -> OnlineAccountDetailsController { @@ -52,5 +57,10 @@ final class OnlineAccountDetailsController: BaseViewController { primaryAddressLabel.text = viewModel.primaryAddress addressLabel.text = viewModel.accountAddress + titleLabel.text = NSLocalizedString("Information about your online account", comment: "CrowdNode") + subtitleLabel.text = NSLocalizedString("Your primary Dash address that you currently use for your CrowdNode account", comment: "CrowdNode") + primaryAddressTitle.text = NSLocalizedString("Primary Dash address", comment: "CrowdNode") + subtitle2Label.text = NSLocalizedString("Dash address designated for your CrowdNode account in the Dash Wallet on this device ", comment: "CrowdNode") + addressTitle.text = NSLocalizedString("Dash address", comment: "") } } diff --git a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountEmailController.swift b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountEmailController.swift index eb6683d91..76ebc9379 100644 --- a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountEmailController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountEmailController.swift @@ -24,6 +24,8 @@ final class OnlineAccountEmailController: UIViewController { private let viewModel = CrowdNodeModel.shared @IBOutlet var input: DashInputField! + @IBOutlet var titleLabel: UILabel! + @IBOutlet var subtitleLabel: UILabel! @IBOutlet var continueButton: ActionButton! @IBOutlet var actionButtonBottomConstraint: NSLayoutConstraint! @@ -64,6 +66,10 @@ final class OnlineAccountEmailController: UIViewController { private func configureHierarchy() { configureEmailInput() + + titleLabel.text = NSLocalizedString("Create an online CrowdNode account", comment: "CrowdNode") + subtitleLabel.text = NSLocalizedString("Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode", comment: "CrowdNode") + continueButton.setTitle(NSLocalizedString("Continue", comment: ""), for: .normal) NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardShown(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) diff --git a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountInfoController.swift b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountInfoController.swift index ca204a71f..478bb7b72 100644 --- a/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountInfoController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Online/OnlineAccountInfoController.swift @@ -16,6 +16,15 @@ // final class OnlineAccountInfoController: UIViewController { + @IBOutlet var titleLabel: UILabel! + @IBOutlet var recoveryTitle: UILabel! + @IBOutlet var recoveryDescription: UILabel! + @IBOutlet var historyTitle: UILabel! + @IBOutlet var historyDescription: UILabel! + @IBOutlet var payoutTitle: UILabel! + @IBOutlet var payoutDescription: UILabel! + @IBOutlet var continueButton: UIButton! + @objc static func controller() -> OnlineAccountInfoController { vc(OnlineAccountInfoController.self, from: sb("CrowdNode")) @@ -25,4 +34,22 @@ final class OnlineAccountInfoController: UIViewController { func continueAction() { navigationController?.replaceLast(1, with: OnlineAccountEmailController.controller()) } + + override func viewDidLoad() { + super.viewDidLoad() + configureHierarchy() + } +} + +extension OnlineAccountInfoController { + private func configureHierarchy() { + titleLabel.text = NSLocalizedString("Why do you need an online account?", comment: "CrowdNode") + recoveryTitle.text = NSLocalizedString("Account Recovery", comment: "CrowdNode") + recoveryDescription.text = NSLocalizedString("If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds.", comment: "CrowdNode") + historyTitle.text = NSLocalizedString("Transaction History", comment: "CrowdNode") + historyDescription.text = NSLocalizedString("You can see detailed information about your deposits, withdrawals and reward earnings.", comment: "CrowdNode") + payoutTitle.text = NSLocalizedString("Payout Options", comment: "CrowdNode") + payoutDescription.text = NSLocalizedString("You can change how / when your reward earnings are paid to you.", comment: "CrowdNode") + continueButton.setTitle(NSLocalizedString("Continue", comment: ""), for: .normal) + } } diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift index 6dde13403..17f4c9f07 100644 --- a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift @@ -81,6 +81,7 @@ extension CrowdNodePortalController { private func configureHierarchy() { view.backgroundColor = .dw_secondaryBackground() + balanceLabel.text = NSLocalizedString("Balance On CrowdNode", comment: "CrowdNode") balanceView.tint = .white balanceView.dataSource = self diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift index 32e151efe..b72b84eb6 100644 --- a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift @@ -68,7 +68,7 @@ final class CrowdNodeTransferController: SendAmountViewController, NetworkReacha override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) viewModel.showNotificationOnResult = false - + if mode == .deposit && viewModel.shouldShowWithdrawalLimitsDialog { showWithdrawalLimitsInfo() viewModel.shouldShowWithdrawalLimitsDialog = false @@ -128,27 +128,21 @@ final class CrowdNodeTransferController: SendAmountViewController, NetworkReacha } private func handleWithdraw(amount: UInt64) { - let vc = WithdrawalConfirmationController.controller(amount: amount, currency: model.localCurrencyCode) - vc.confirmedHandler = { [weak self] in - guard let wSelf = self else { return } - - Task { - wSelf.showActivityIndicator() - - do { - if try await wSelf.viewModel.withdraw(amount: amount) { - wSelf.showSuccessfulStatus() - } - } catch CrowdNode.Error.withdrawLimit(_, let period) { - wSelf.showWithdrawalLimitsError(period: period) - } catch { - wSelf.showErrorStatus(err: error) + showActivityIndicator() + + Task { + do { + if try await viewModel.withdraw(amount: amount) { + showSuccessfulStatus() } - - wSelf.hideActivityIndicator() + } catch CrowdNode.Error.withdrawLimit(_, let period) { + showWithdrawalLimitsError(period: period) + } catch { + showErrorStatus(err: error) } + + hideActivityIndicator() } - present(vc, animated: true, completion: nil) } deinit { @@ -272,6 +266,11 @@ extension CrowdNodeTransferController { } private func showWithdrawalLimitsError(period: WithdrawalLimitPeriod) { + if period == .perBlock { + showPerBlockLimitWarning() + return + } + let vc = WithdrawalLimitsController() var buttonText: String? = nil let isOnlineAccountDone = viewModel.onlineAccountState == .done @@ -304,6 +303,21 @@ extension CrowdNodeTransferController { let nvc = BaseNavigationController(rootViewController: vc) present(nvc, animated: true) } + + private func showPerBlockLimitWarning() { + let title = NSLocalizedString("Please wait before initiating the next withdrawal", comment: "CrowdNode") + let message = NSLocalizedString("You need to wait 5 minutes before initiating another withdrawal", + comment: "CrowdNode") + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + + if #available(iOS 16.0, *) { + alert.severity = .critical + } + + let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) + alert.addAction(okAction) + present(alert, animated: true) + } } extension CrowdNodeTransferController { diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/StakingInfoDialogController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/StakingInfoDialogController.swift index a1fdfa192..3aaf1083f 100644 --- a/DashWallet/Sources/UI/CrowdNode/Portal/StakingInfoDialogController.swift +++ b/DashWallet/Sources/UI/CrowdNode/Portal/StakingInfoDialogController.swift @@ -20,9 +20,25 @@ import Foundation final class StakingInfoDialogController: UIViewController { private let viewModel = CrowdNode.shared - @IBOutlet var masternodeApyLabel: UILabel! + @IBOutlet var titleLabel: UILabel! + @IBOutlet var subtitleLabel: UILabel! + @IBOutlet var benefitsLabel: UILabel! + @IBOutlet var poolTitle: UILabel! + @IBOutlet var poolDescription: UILabel! + @IBOutlet var minimumDepositTitle: UILabel! + @IBOutlet var rewardsTitle: UILabel! + @IBOutlet var rewardsDescription: UILabel! + @IBOutlet var leavingTitle: UILabel! + @IBOutlet var leavingDescription: UILabel! + @IBOutlet var leavingDescription2: UILabel! @IBOutlet var crowdnodeApyLabel: UILabel! + @IBOutlet var apyDescription: UILabel! + @IBOutlet var addressTitle: UILabel! + @IBOutlet var addressDescription: UILabel! + + @IBOutlet var masternodeApyLabel: UILabel! @IBOutlet var minimumDepositLabel: UILabel! + @IBOutlet var addressLabelTitle: UILabel! @IBOutlet var addressLabel: UILabel! static func controller() -> StakingInfoDialogController { @@ -48,6 +64,27 @@ final class StakingInfoDialogController: UIViewController { private func configureHierarchy() { view.backgroundColor = .dw_secondaryBackground() + titleLabel.text = NSLocalizedString("How CrowdNode staking works", comment: "CrowdNode") + subtitleLabel.text = NSLocalizedString("The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments.", comment: "CrowdNode") + benefitsLabel.text = NSLocalizedString("CrowdNode benefits", comment: "CrowdNode") + poolTitle.text = NSLocalizedString("Joining the pool", comment: "CrowdNode") + poolDescription.text = NSLocalizedString("As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode.", comment: "CrowdNode") + minimumDepositTitle.text = NSLocalizedString("First minimum deposit", comment: "CrowdNode") + + rewardsTitle.text = NSLocalizedString("Receiving rewards", comment: "CrowdNode") + rewardsDescription.text = NSLocalizedString("You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts.", comment: "CrowdNode") + + leavingTitle.text = NSLocalizedString("Leaving the pool", comment: "CrowdNode") + leavingDescription.text = NSLocalizedString("Members are free to leave the pool and can most often leave immediately.", comment: "CrowdNode") + leavingDescription2.text = NSLocalizedString("In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster.", comment: "CrowdNode") + + apyDescription.text = NSLocalizedString("This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price.", comment: "CrowdNode") + + addressTitle.text = NSLocalizedString("Connected Dash address", comment: "CrowdNode") + addressDescription.text = NSLocalizedString("Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device", comment: "CrowdNode") + + addressLabelTitle.text = NSLocalizedString("Dash address", comment: "") + addressLabel.text = viewModel.accountAddress let minimumDeposit = CrowdNode.minimumDeposit.formattedDashAmount minimumDepositLabel.text = String.localizedStringWithFormat(NSLocalizedString("You only need %@ to join the pool.", comment: "CrowdNode"), minimumDeposit) @@ -57,6 +94,7 @@ final class StakingInfoDialogController: UIViewController { formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 2 formatter.multiplier = 1 + masternodeApyLabel.text = String .localizedStringWithFormat(NSLocalizedString("A Masternode needs 1000 Dash as collateral and each Masternode is currently rewarded approximately %@ per year.", comment: "CrowdNode"), diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalConfirmationController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalConfirmationController.swift deleted file mode 100644 index 4e0cb2b72..000000000 --- a/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalConfirmationController.swift +++ /dev/null @@ -1,209 +0,0 @@ -// -// Created by Andrei Ashikhmin -// Copyright © 2023 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Combine - -// MARK: - WithdrawalConfirmationController - -final class WithdrawalConfirmationController: UIViewController { - private var cancellableBag = Set() - private let viewModel = CrowdNodeModel.shared - - @IBOutlet var balanceView: BalanceView! - @IBOutlet var adjustedTopLabel: UILabel! - @IBOutlet var adjustedBottomLabel: UILabel! - - private static let smallSheetHeight: CGFloat = 230 - private static let fitSheetHeight: CGFloat = 310 - @IBOutlet var moreInfoView: UIView! - @IBOutlet var moreInfoButton: UIButton! - @IBOutlet var moreInfoFirstRow: UILabel! - @IBOutlet var moreInfoSecondRow: UILabel! - @IBOutlet var moreInfoThirdRow: UILabel! - @IBOutlet var showMoreHeightConstraint: NSLayoutConstraint! - - private var requestedAmount: UInt64! - private var currencyCode: String! - private var adjustedAmount: UInt64! - - var confirmedHandler: (() -> ())? - - static func controller(amount: UInt64, currency: String) -> WithdrawalConfirmationController { - let vc = vc(WithdrawalConfirmationController.self, from: sb("CrowdNode")) - vc.modalPresentationStyle = .pageSheet - vc.requestedAmount = amount - vc.currencyCode = currency - - if #available(iOS 16.0, *) { - setSheetHeight(vc) - } - - return vc - } - - @available(iOS 16.0, *) - static func setSheetHeight(_ vc: WithdrawalConfirmationController) { - if let sheet = vc.sheetPresentationController { - vc.adjustedAmount = CrowdNodeModel.shared.adjustedWithdrawalAmount(requestedAmount: vc.requestedAmount) - let collapsedDetent: UISheetPresentationController.Detent - - if vc.adjustedAmount == vc.requestedAmount { - // If the adjusted amount the same as requested, - // we hide the additional info and only show confirm/cancel buttons - let smallId = UISheetPresentationController.Detent.Identifier("small") - collapsedDetent = UISheetPresentationController.Detent.custom(identifier: smallId) { _ in - smallSheetHeight - } - } else { - let fitId = UISheetPresentationController.Detent.Identifier("fit") - collapsedDetent = UISheetPresentationController.Detent.custom(identifier: fitId) { _ in - fitSheetHeight - } - } - - sheet.detents = [collapsedDetent] - } - } - - override func viewDidLoad() { - super.viewDidLoad() - configureHierarchy() - configureObservers() - } - - @IBAction - func onCancel() { - dismiss(animated: true) - } - - @IBAction - func onContinue() { - confirmedHandler?() - dismiss(animated: true) - } - - @IBAction - func onShowMore() { - expandMoreInfoView() - } -} - -extension WithdrawalConfirmationController { - private func expandMoreInfoView() { - let textHeight = calculateMoreInfoTextHeight() - let sheetHeight = WithdrawalConfirmationController.fitSheetHeight + textHeight - 20 - moreInfoView.alpha = 0 - - UIView.animate(withDuration: 0.3, delay: 0, options: .curveLinear) { - if #available(iOS 16.0, *) { - self.expandSheet(height: sheetHeight) - } - - self.moreInfoView.alpha = 1 - self.moreInfoButton.isHidden = true - self.showMoreHeightConstraint.constant = textHeight - self.view.layoutIfNeeded() - } - } - - private func calculateMoreInfoTextHeight() -> CGFloat { - moreInfoFirstRow.frame.height + moreInfoSecondRow.frame.height + - moreInfoThirdRow.frame.height + 15 - } - - @available(iOS 16.0, *) - private func adjustCollapsedSheet() { - if let sheet = sheetPresentationController { - sheet.animateChanges { - WithdrawalConfirmationController.setSheetHeight(self) - } - } - } - - @available(iOS 16.0, *) - private func expandSheet(height: CGFloat) { - if let sheet = sheetPresentationController { - let expandedId = UISheetPresentationController.Detent.Identifier("expanded") - let expandedDetent = UISheetPresentationController.Detent.custom(identifier: expandedId) { _ in - height - } - sheet.detents = [expandedDetent] - sheet.animateChanges { - sheet.selectedDetentIdentifier = expandedId - } - } - } - - private func configureHierarchy() { - adjustedAmount = viewModel.adjustedWithdrawalAmount(requestedAmount: requestedAmount) - balanceView.dataSource = self - - let didAdjust = adjustedAmount != requestedAmount - moreInfoButton.isHidden = !didAdjust - adjustedTopLabel.isHidden = !didAdjust - adjustedBottomLabel.isHidden = !didAdjust - - if didAdjust { - let difference = UInt64(abs(Int64(requestedAmount) - Int64(adjustedAmount))) - var adjustedText = difference.formattedDashAmount - - if let fiatAmount = try? CurrencyExchanger.shared.convertDash(amount: difference.dashAmount, to: currencyCode) { - let fiat = NumberFormatter.fiatFormatter(currencyCode: currencyCode).string(from: fiatAmount as NSNumber)! - - if !fiat.isEmpty { - adjustedText += " ~ \(fiat)" - } - } - - adjustedBottomLabel.text = adjustedText - } - } - - private func configureObservers() { - viewModel.$crowdNodeBalance - .receive(on: DispatchQueue.main) - .removeDuplicates() - .sink(receiveValue: { [weak self] _ in - self?.configureHierarchy() - - if #available(iOS 16.0, *) { - self?.adjustCollapsedSheet() - } - }) - .store(in: &cancellableBag) - } -} - -// MARK: BalanceViewDataSource - -extension WithdrawalConfirmationController: BalanceViewDataSource { - var mainAmountString: String { - adjustedAmount.formattedDashAmount - } - - var supplementaryAmountString: String { - let fiat: String - - if let fiatAmount = try? CurrencyExchanger.shared.convertDash(amount: adjustedAmount.dashAmount, to: currencyCode) { - fiat = NumberFormatter.fiatFormatter(currencyCode: currencyCode).string(from: fiatAmount as NSNumber)! - } else { - fiat = NSLocalizedString("Syncing…", comment: "Balance") - } - - return fiat - } -} diff --git a/DashWallet/Sources/UI/CrowdNode/Views/Tx Cell/CNCreateAccountCell.xib b/DashWallet/Sources/UI/CrowdNode/Views/Tx Cell/CNCreateAccountCell.xib index e3d07b2be..e8bc0e4c0 100644 --- a/DashWallet/Sources/UI/CrowdNode/Views/Tx Cell/CNCreateAccountCell.xib +++ b/DashWallet/Sources/UI/CrowdNode/Views/Tx Cell/CNCreateAccountCell.xib @@ -1,9 +1,9 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -45,7 +45,7 @@ - + + @@ -90,7 +92,6 @@ - @@ -101,5 +102,8 @@ + + + diff --git a/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.h b/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.h new file mode 100644 index 000000000..be4f75204 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseModalViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWConfirmInvitationViewController; +@class DSBlockchainInvitation; + +@protocol DWConfirmInvitationViewControllerDelegate + +- (void)confirmInvitationViewController:(DWConfirmInvitationViewController *)controller + didConfirmWithInvitation:(DSBlockchainInvitation *)invitation + link:(NSString *)link; + +@end + +@interface DWConfirmInvitationViewController : DWBaseModalViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.m b/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.m new file mode 100644 index 000000000..e0fef222f --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Confirmation/DWConfirmInvitationViewController.m @@ -0,0 +1,126 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWConfirmInvitationViewController.h" + +#import "DWConfirmInvitationContentView.h" +#import "DWDashPayConstants.h" +#import "DWEnvironment.h" +#import "UIViewController+DWDisplayError.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWConfirmInvitationViewController () + +@property (nonatomic, strong) DWConfirmInvitationContentView *confirmView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWConfirmInvitationViewController + ++ (BOOL)isActionButtonInNavigationBar { + return NO; +} + +- (NSString *)actionButtonTitle { + return NSLocalizedString(@"Confirm", nil); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setModalTitle:NSLocalizedString(@"Confirm", nil)]; + + self.actionButton.enabled = NO; + + self.confirmView = [[DWConfirmInvitationContentView alloc] initWithFrame:CGRectZero]; + [self.confirmView.confirmationCheckbox addTarget:self + action:@selector(confirmationCheckboxAction:) + forControlEvents:UIControlEventValueChanged]; + + [self setupModalContentView:self.confirmView]; +} + +- (void)actionButtonAction:(id)sender { + self.actionButton.enabled = NO; + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSAccount *account = [DWEnvironment sharedInstance].currentAccount; + DSBlockchainInvitation *invitation = [wallet createBlockchainInvitation]; + invitation.name = [NSString stringWithFormat:NSLocalizedString(@"Invitation %ld", @"Invitation #3"), wallet.blockchainInvitations.count + 1]; + + + DSBlockchainIdentityRegistrationStep steps = DSBlockchainIdentityRegistrationStep_L1Steps; + [invitation generateBlockchainInvitationsExtendedPublicKeysWithPrompt:NSLocalizedString(@"Create invitation", nil) + completion:^(BOOL registered) { + [invitation.identity createFundingPrivateKeyForInvitationWithPrompt:NSLocalizedString(@"Create invitation", nil) + completion:^(BOOL success, BOOL cancelled) { + if (success && !cancelled) { + [invitation.identity + registerOnNetwork:steps + withFundingAccount:account + forTopupAmount:DWDP_MIN_BALANCE_TO_CREATE_INVITE + pinPrompt:@"Would you like to create this invitation?" stepCompletion:^(DSBlockchainIdentityRegistrationStep stepCompleted) { + } + completion:^(DSBlockchainIdentityRegistrationStep stepsCompleted, NSError *_Nonnull error) { + if (error) { + [self dw_displayErrorModally:error]; + } + else { + [self generateLinkForInvitationAndFinish:invitation]; + } + }]; + } + }]; + }]; +} + +- (void)generateLinkForInvitationAndFinish:(DSBlockchainInvitation *)invitation { + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + + __weak typeof(self) weakSelf = self; + [invitation + createInvitationFullLinkFromIdentity:myBlockchainIdentity + completion:^(BOOL cancelled, NSString *_Nonnull invitationFullLink) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + // skip? + if (cancelled == NO && invitationFullLink == nil) { + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + strongSelf.actionButton.enabled = cancelled; + + if (!cancelled) { + [strongSelf.delegate confirmInvitationViewController:strongSelf didConfirmWithInvitation:invitation link:invitationFullLink]; + } + }); + }]; +} + +- (void)confirmationCheckboxAction:(DWCheckbox *)sender { + self.actionButton.enabled = sender.isOn; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.h b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.h new file mode 100644 index 000000000..d33206640 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.h @@ -0,0 +1,36 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWSendInviteFirstStepViewController; + +@protocol DWSendInviteFirstStepViewControllerDelegate + +- (void)sendInviteFirstStepViewControllerNewInviteAction:(DWSendInviteFirstStepViewController *)controller; + +@end + +@interface DWSendInviteFirstStepViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.m b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.m new file mode 100644 index 000000000..92ebcff24 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFirstStepViewController.m @@ -0,0 +1,100 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSendInviteFirstStepViewController.h" + +#import "dashwallet-Swift.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSendInviteFirstStepViewController () + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWSendInviteFirstStepViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = NSLocalizedString(@"Invite", nil); + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + UIImageView *imageView = [[UIImageView alloc] init]; + imageView.image = [UIImage imageNamed:@"invite_logo"]; + imageView.contentMode = UIViewContentModeCenter; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.text = NSLocalizedString(@"Invite your friends & family", nil); + titleLabel.adjustsFontForContentSizeCategory = YES; + + UILabel *descLabel = [[UILabel alloc] init]; + descLabel.translatesAutoresizingMaskIntoConstraints = NO; + descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + descLabel.textColor = [UIColor dw_darkTitleColor]; + descLabel.numberOfLines = 0; + descLabel.textAlignment = NSTextAlignmentCenter; + descLabel.text = NSLocalizedString(@"Let your friends and family to join the Dash Network. Invite them to the world of social banking.", nil); + descLabel.adjustsFontForContentSizeCategory = YES; + + UIStackView *centerStackView = [[UIStackView alloc] initWithArrangedSubviews:@[ + imageView, titleLabel, descLabel + ]]; + centerStackView.translatesAutoresizingMaskIntoConstraints = NO; + centerStackView.axis = UILayoutConstraintAxisVertical; + centerStackView.spacing = 12.0; + centerStackView.alignment = UIStackViewAlignmentCenter; + [centerStackView setCustomSpacing:40 afterView:imageView]; + [self.view addSubview:centerStackView]; + + DWActionButton *inviteButton = [[DWActionButton alloc] init]; + inviteButton.translatesAutoresizingMaskIntoConstraints = NO; + [inviteButton setTitle:NSLocalizedString(@"Create a new Invitation", nil) forState:UIControlStateNormal]; + [inviteButton addTarget:self + action:@selector(inviteButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:inviteButton]; + + UILayoutGuide *guide = self.view.layoutMarginsGuide; + NSLayoutConstraint *centerConstraint = [centerStackView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor]; + centerConstraint.priority = UILayoutPriorityRequired - 1; + [NSLayoutConstraint activateConstraints:@[ + [centerStackView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [guide.trailingAnchor constraintEqualToAnchor:centerStackView.trailingAnchor], + centerConstraint, + + [inviteButton.topAnchor constraintGreaterThanOrEqualToAnchor:centerStackView.bottomAnchor], + + [guide.bottomAnchor constraintEqualToAnchor:inviteButton.bottomAnchor], + [inviteButton.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], + [guide.trailingAnchor constraintEqualToAnchor:inviteButton.trailingAnchor], + [inviteButton.heightAnchor constraintEqualToConstant:50], + ]]; +} + +- (void)inviteButtonAction { + [self.delegate sendInviteFirstStepViewControllerNewInviteAction:self]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.h b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.h new file mode 100644 index 000000000..19c08a205 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.h @@ -0,0 +1,36 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWSendInviteFlowController; + +@protocol DWSendInviteFlowControllerDelegate + +- (void)sendInviteFlowControllerDidFinish:(DWSendInviteFlowController *)controller; + +@end + +@interface DWSendInviteFlowController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.m b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.m new file mode 100644 index 000000000..4b5e5d518 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/DWSendInviteFlowController.m @@ -0,0 +1,109 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSendInviteFlowController.h" + +#import "DPAlertViewController+DWInvite.h" +#import "DWConfirmInvitationViewController.h" +#import "DWFullScreenModalControllerViewController.h" +#import "DWSendInviteFirstStepViewController.h" + +#import "DWUIKit.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSendInviteFlowController () < + DWSendInviteFirstStepViewControllerDelegate, + DWConfirmInvitationViewControllerDelegate, + DWFullScreenModalControllerViewControllerDelegate, + SuccessInvitationViewControllerDelegate> + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWSendInviteFlowController + +- (void)viewDidLoad { + [super viewDidLoad]; + + DWSendInviteFirstStepViewController *controller = [[DWSendInviteFirstStepViewController alloc] init]; + controller.delegate = self; + controller.navigationItem.leftBarButtonItem = [self cancelBarButton]; + DWNavigationController *navigation = [[DWNavigationController alloc] initWithRootViewController:controller]; + [self dw_embedChild:navigation]; +} + +- (UIBarButtonItem *)cancelBarButton { + return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonAction)]; +} + +- (void)cancelButtonAction { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)showSuccessInvitation:(DSBlockchainInvitation *)invitation fullLink:(NSString *)fullLink { + SuccessInvitationViewController *invitationController = + [[SuccessInvitationViewController alloc] initWith:invitation fullLink:fullLink index:0]; + invitationController.delegate = self; + DWFullScreenModalControllerViewController *modal = + [[DWFullScreenModalControllerViewController alloc] initWithController:invitationController]; + modal.delegate = self; + modal.title = NSLocalizedString(@"Invitation", nil); + modal.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:modal animated:YES completion:nil]; +} + +#pragma mark - DWSendInviteFirstStepViewControllerDelegate + +- (void)sendInviteFirstStepViewControllerNewInviteAction:(DWSendInviteFirstStepViewController *)controller { + DWConfirmInvitationViewController *confirmationController = [[DWConfirmInvitationViewController alloc] init]; + confirmationController.delegate = self; + [self presentViewController:confirmationController animated:YES completion:nil]; +} + +#pragma mark - DWConfirmInvitationViewControllerDelegate + +- (void)confirmInvitationViewController:(DWConfirmInvitationViewController *)controller + didConfirmWithInvitation:(DSBlockchainInvitation *)invitation + link:(NSString *)link { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self showSuccessInvitation:invitation fullLink:link]; + }]; +} + +#pragma mark - DWFullScreenModalControllerViewControllerDelegate + +- (void)fullScreenModalControllerViewControllerDidCancel:(DWFullScreenModalControllerViewController *)controller { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self.delegate sendInviteFlowControllerDidFinish:self]; + }]; +} + +#pragma mark - DWSuccessInvitationViewControllerDelegate + +- (void)successInvitationViewControllerDidSelectLaterWithController:(SuccessInvitationViewController *)controller { + [controller dismissViewControllerAnimated:YES + completion:^{ + [self.delegate sendInviteFlowControllerDidFinish:self]; + }]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.h b/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.h new file mode 100644 index 000000000..5f534094f --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationHistoryViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.m b/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.m new file mode 100644 index 000000000..d315c6aa9 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/DWInvitationHistoryViewController.m @@ -0,0 +1,193 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationHistoryViewController.h" + +#import "DWEnvironment.h" +#import "DWHistoryFilterViewController.h" +#import "DWHistoryHeaderView.h" +#import "DWInvitationHistoryModel.h" +#import "DWInvitationTableViewCell.h" +#import "DWSendInviteFlowController.h" +#import "dashwallet-Swift.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationHistoryViewController () + +@property (nonatomic, strong) DWInvitationHistoryModel *model; +@property (null_resettable, nonatomic, strong) UITableView *tableView; + +@end + +@interface DWNonFloatingTableView : UITableView + +@end + +@implementation DWNonFloatingTableView + +- (BOOL)allowsHeaderViewsToFloat { + return NO; +} + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWInvitationHistoryViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = NSLocalizedString(@"Invite", nil); + + self.model = [[DWInvitationHistoryModel alloc] init]; + self.model.delegate = self; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + [self.view addSubview:self.tableView]; + [NSLayoutConstraint dw_activate:@[ + [self.tableView pinEdges:self.view], + ]]; +} + +- (void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + + [_tableView reloadData]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)createInvitationAction:(UIControl *)sender { + DWSendInviteFlowController *controller = [[DWSendInviteFlowController alloc] init]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (void)optionsButtonAction:(UIControl *)sender { + DWHistoryFilterViewController *controller = [[DWHistoryFilterViewController alloc] init]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (UITableView *)tableView { + if (_tableView == nil) { + UITableView *tableView = [[DWNonFloatingTableView alloc] initWithFrame:[UIScreen mainScreen].bounds + style:UITableViewStylePlain]; + tableView.translatesAutoresizingMaskIntoConstraints = NO; + tableView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + tableView.delegate = self; + tableView.dataSource = self; + tableView.rowHeight = UITableViewAutomaticDimension; + tableView.estimatedRowHeight = 74.0; + tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + tableView.sectionHeaderHeight = UITableViewAutomaticDimension; + tableView.estimatedSectionHeaderHeight = 100.0; + [tableView registerClass:DWInvitationTableViewCell.class + forCellReuseIdentifier:DWInvitationTableViewCell.dw_reuseIdentifier]; + _tableView = tableView; + } + return _tableView; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.model.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWInvitationTableViewCell *cell = (DWInvitationTableViewCell *) + [tableView dequeueReusableCellWithIdentifier:DWInvitationTableViewCell.dw_reuseIdentifier + forIndexPath:indexPath]; + id item = self.model.items[indexPath.row]; + cell.item = item; + return cell; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + DWHistoryHeaderView *header = [[DWHistoryHeaderView alloc] init]; + [header.createButton addTarget:self action:@selector(createInvitationAction:) forControlEvents:UIControlEventTouchUpInside]; + [header.optionsButton addTarget:self action:@selector(optionsButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + return header; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + + id item = self.model.items[indexPath.row]; + NSUInteger index = self.model.items.count - indexPath.row; + + __weak typeof(self) weakSelf = self; + [item.blockchainInvitation + createInvitationFullLinkFromIdentity:myBlockchainIdentity + completion:^(BOOL cancelled, NSString *_Nonnull invitationFullLink) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + // skip? + if (cancelled == NO && invitationFullLink == nil) { + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + BaseInvitationViewController *controller = + [[BaseInvitationViewController alloc] initWith:item.blockchainInvitation + fullLink:invitationFullLink + index:index]; + controller.title = NSLocalizedString(@"Invite", nil); + controller.hidesBottomBarWhenPushed = YES; + controller.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + [self.navigationController pushViewController:controller animated:YES]; + }); + }]; +} + +#pragma mark - DWSendInviteFlowControllerDelegate + +- (void)sendInviteFlowControllerDidFinish:(DWSendInviteFlowController *)controller { + [controller dismissViewControllerAnimated:YES completion:nil]; + [self.model reload]; +} + +#pragma mark - DWInvitationHistoryModelDelegate + +- (void)invitationHistoryModelDidUpdate:(DWInvitationHistoryModel *)model { + [self.tableView reloadData]; +} + +#pragma mark - DWHistoryFilterViewControllerDelegate + +- (void)historyFilterViewController:(DWHistoryFilterViewController *)controller + didSelectFilter:(DWInvitationHistoryFilter)filter { + [controller dismissViewControllerAnimated:YES completion:nil]; + self.model.filter = filter; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.h b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.h new file mode 100644 index 000000000..9b50c5b9e --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.h @@ -0,0 +1,38 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWInvitationHistoryFilter.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWHistoryFilterContentView; + +@protocol DWHistoryFilterContentViewDelegate + +- (void)historyFilterView:(DWHistoryFilterContentView *)view didSelectFilter:(DWInvitationHistoryFilter)filter; + +@end + +@interface DWHistoryFilterContentView : UIView + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.m b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.m new file mode 100644 index 000000000..834689266 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterContentView.m @@ -0,0 +1,94 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWHistoryFilterContentView.h" + +#import "DWPressableButton.h" +#import "DWUIKit.h" + +@implementation DWHistoryFilterContentView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + self.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; + self.layer.cornerRadius = 8.0; + self.layer.masksToBounds = YES; + + UIButton *allButton = [self.class button]; + allButton.tag = DWInvitationHistoryFilter_All; + [allButton setTitle:@"All" forState:UIControlStateNormal]; + [allButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIButton *pendingButton = [self.class button]; + pendingButton.tag = DWInvitationHistoryFilter_Pending; + [pendingButton setTitle:NSLocalizedString(@"Pending", nil) forState:UIControlStateNormal]; + [pendingButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIButton *claimedButton = [self.class button]; + claimedButton.tag = DWInvitationHistoryFilter_Claimed; + [claimedButton setTitle:NSLocalizedString(@"Claimed", nil) forState:UIControlStateNormal]; + [claimedButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIView *separator1 = [[UIView alloc] init]; + separator1.translatesAutoresizingMaskIntoConstraints = NO; + separator1.backgroundColor = [UIColor dw_separatorLineColor]; + + UIView *separator2 = [[UIView alloc] init]; + separator2.translatesAutoresizingMaskIntoConstraints = NO; + separator2.backgroundColor = [UIColor dw_separatorLineColor]; + + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ allButton, separator1, pendingButton, separator2, claimedButton ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + [self addSubview:stackView]; + + const CGFloat padding = 16.0; + [NSLayoutConstraint activateConstraints:@[ + [stackView.topAnchor constraintEqualToAnchor:self.topAnchor], + [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [self.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor + constant:padding], + [self.bottomAnchor constraintEqualToAnchor:stackView.bottomAnchor], + + [claimedButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + [allButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + [pendingButton.heightAnchor constraintGreaterThanOrEqualToConstant:80], + + [separator1.heightAnchor constraintEqualToConstant:1], + [separator2.heightAnchor constraintEqualToConstant:1], + ]]; + } + return self; +} + +- (void)buttonAction:(UIButton *)sender { + [self.delegate historyFilterView:self didSelectFilter:sender.tag]; +} + ++ (UIButton *)button { + DWPressableButton *button = [[DWPressableButton alloc] initWithFrame:CGRectZero]; + button.translatesAutoresizingMaskIntoConstraints = NO; + button.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + button.adjustsImageWhenHighlighted = NO; + [button setTitleColor:[UIColor dw_darkTitleColor] forState:UIControlStateNormal]; + return button; +} +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.h b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.h new file mode 100644 index 000000000..377cfea45 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWInvitationHistoryFilter.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWHistoryFilterViewController; + +@protocol DWHistoryFilterViewControllerDelegate + +- (void)historyFilterViewController:(DWHistoryFilterViewController *)controller + didSelectFilter:(DWInvitationHistoryFilter)filter; + +@end + +@interface DWHistoryFilterViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.m b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.m new file mode 100644 index 000000000..f9c63a6a6 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Filter/DWHistoryFilterViewController.m @@ -0,0 +1,91 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWHistoryFilterViewController.h" + +#import "DWHistoryFilterContentView.h" +#import "DWModalPopupTransition.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWHistoryFilterViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWHistoryFilterViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _modalTransition = [[DWModalPopupTransition alloc] init]; + _modalTransition.appearanceStyle = DWModalPopupAppearanceStyle_Fullscreen; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognizerAction)]; + [self.view addGestureRecognizer:tapRecognizer]; + + DWHistoryFilterContentView *contentView = [[DWHistoryFilterContentView alloc] initWithFrame:CGRectZero]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.delegate = self; + [self.view addSubview:contentView]; + + UIView *overscroll = [[UIView alloc] init]; + overscroll.translatesAutoresizingMaskIntoConstraints = NO; + overscroll.backgroundColor = [UIColor dw_backgroundColor]; + [self.view addSubview:overscroll]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], + [self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + + [overscroll.topAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-10], + [overscroll.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:overscroll.trailingAnchor], + [overscroll.heightAnchor constraintEqualToConstant:500], + ]]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)tapRecognizerAction { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - DWHistoryFilterContentViewDelegate + +- (void)historyFilterView:(DWHistoryFilterContentView *)view didSelectFilter:(DWInvitationHistoryFilter)filter { + [self.delegate historyFilterViewController:self didSelectFilter:filter]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryFilter.h b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryFilter.h new file mode 100644 index 000000000..f0b37553c --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryFilter.h @@ -0,0 +1,27 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef DWInvitationHistoryFilter_h +#define DWInvitationHistoryFilter_h + +typedef NS_ENUM(NSUInteger, DWInvitationHistoryFilter) { + DWInvitationHistoryFilter_All, + DWInvitationHistoryFilter_Pending, + DWInvitationHistoryFilter_Claimed, +}; + +#endif /* DWInvitationHistoryFilter_h */ diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.h b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.h new file mode 100644 index 000000000..04b09ae70 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.h @@ -0,0 +1,56 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWInvitationHistoryFilter.h" +#import "DWInvitationItem.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DSBlockchainInvitation; + +@protocol DWInvitationHistoryItem + +@property (readonly, nonatomic, strong) DSBlockchainInvitation *blockchainInvitation; +@property (readonly, nonatomic, strong) NSString *tag; + +@end + +// + +@class DWInvitationHistoryModel; + +@protocol DWInvitationHistoryModelDelegate + +- (void)invitationHistoryModelDidUpdate:(DWInvitationHistoryModel *)model; + +@end + +// + +@interface DWInvitationHistoryModel : NSObject + +@property (nonatomic, assign) DWInvitationHistoryFilter filter; +@property (readonly, nonatomic, copy) NSArray> *items; +@property (nullable, nonatomic, weak) id delegate; + +- (void)reload; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.m b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.m new file mode 100644 index 000000000..51239f041 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationHistoryModel.m @@ -0,0 +1,157 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationHistoryModel.h" + +#import "DWEnvironment.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +#pragma mark - Item Header + +@interface DWInvitationHistoryItemImpl : NSObject + +@property (readonly, nonatomic, assign) NSUInteger index; + +@end + +#pragma mark - Model Header + +@interface DWInvitationHistoryModel () + +@property (nonatomic, copy) NSArray> *items; + +@end + +NS_ASSUME_NONNULL_END + +#pragma mark - Item Impl + +@implementation DWInvitationHistoryItemImpl + +@synthesize blockchainInvitation = _blockchainInvitation; +@synthesize tag = _tag; + +- (instancetype)initWithInvitation:(DSBlockchainInvitation *)invitation index:(NSUInteger)index { + self = [super init]; + if (self) { + _blockchainInvitation = invitation; + _index = index; + } + return self; +} + +- (NSString *)tag { + return _blockchainInvitation.tag; +} + +- (BOOL)isRegistered { + return self.blockchainInvitation.identity.isRegistered; +} + +- (NSString *)title { + NSString *name = _blockchainInvitation.name; + NSString *tag = [self.tag isEqualToString:@""] ? nil : self.tag; + + return (tag ? tag : (name ? name : [NSString stringWithFormat:NSLocalizedString(@"Invitation %ld", @"Invitation #3"), self.index])); +} + +- (NSString *)subtitle { + DSTransaction *transaction = self.blockchainInvitation.identity.registrationCreditFundingTransaction; + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + NSTimeInterval now = [chain timestampForBlockHeight:TX_UNCONFIRMED]; + NSTimeInterval txTime = (transaction.timestamp > 1) ? transaction.timestamp : now; + NSDate *txDate = [NSDate dateWithTimeIntervalSince1970:txTime]; + return [[DWDateFormatter sharedInstance] shortStringFromDate:txDate]; +} + +@end + +#pragma mark - Model Impl + +@implementation DWInvitationHistoryModel + +- (instancetype)init { + self = [super init]; + if (self) { + _items = @[]; + _filter = DWInvitationHistoryFilter_All; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(blockchainIdentityDidUpdateNotification) + name:DSBlockchainIdentityDidUpdateNotification + object:nil]; + + [self reload]; + } + return self; +} + +- (void)setFilter:(DWInvitationHistoryFilter)filter { + _filter = filter; + + [self reload]; +} + +- (void)reload { + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + NSArray *descriptors = @[ + [NSSortDescriptor sortDescriptorWithKey:@"identity.registrationCreditFundingTransaction.blockHeight" + ascending:NO], + [NSSortDescriptor sortDescriptorWithKey:@"identity.registrationCreditFundingTransaction.timestamp" + ascending:NO], + ]; + NSArray *invitations = [wallet.blockchainInvitations.allValues + sortedArrayUsingDescriptors:descriptors]; + NSUInteger index = invitations.count; + NSMutableArray *mutableItems = [NSMutableArray arrayWithCapacity:invitations.count]; + for (DSBlockchainInvitation *invitation in invitations) { + BOOL shouldInclude = NO; + switch (self.filter) { + case DWInvitationHistoryFilter_All: + shouldInclude = YES; + break; + case DWInvitationHistoryFilter_Pending: + shouldInclude = invitation.identity.registrationStatus == DSBlockchainIdentityRegistrationStatus_Unknown || + invitation.identity.registrationStatus == DSBlockchainIdentityRegistrationStatus_NotRegistered; + break; + case DWInvitationHistoryFilter_Claimed: + shouldInclude = invitation.identity.registrationStatus == DSBlockchainIdentityRegistrationStatus_Registering || + invitation.identity.registrationStatus == DSBlockchainIdentityRegistrationStatus_Registered; + break; + } + + if (shouldInclude) { + DWInvitationHistoryItemImpl *item = + [[DWInvitationHistoryItemImpl alloc] initWithInvitation:invitation + index:index]; + [mutableItems addObject:item]; + + index -= 1; + } + } + self.items = mutableItems; + + [self.delegate invitationHistoryModelDidUpdate:self]; +} + +- (void)blockchainIdentityDidUpdateNotification { + [self reload]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationItem.h b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationItem.h new file mode 100644 index 000000000..cacf06687 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Models/DWInvitationItem.h @@ -0,0 +1,30 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWInvitationItem + +- (BOOL)isRegistered; +- (NSString *)title; +- (NSString *)subtitle; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.h b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.h new file mode 100644 index 000000000..95299d5f4 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBasePressableControl.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWCreateInvitationButton : DWBasePressableControl + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.m b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.m new file mode 100644 index 000000000..1bf97e8a5 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWCreateInvitationButton.m @@ -0,0 +1,100 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWCreateInvitationButton.h" + +#import "DWUIKit.h" +#import "UIView+DWAutolayout.h" +#import "NSLayoutConstraint+DWAutolayout.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWCreateInvitationButton () +@end + +NS_ASSUME_NONNULL_END + +@implementation DWCreateInvitationButton + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8; + contentView.layer.masksToBounds = YES; + contentView.userInteractionEnabled = NO; + [self addSubview:contentView]; + + UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_create_invitation"]]; + icon.translatesAutoresizingMaskIntoConstraints = NO; + icon.userInteractionEnabled = NO; + [contentView addSubview:icon]; + + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.textColor = [UIColor dw_darkTitleColor]; + title.numberOfLines = 0; + title.adjustsFontForContentSizeCategory = YES; + title.userInteractionEnabled = NO; + [contentView addSubview:title]; + + NSMutableAttributedString *text = [[NSMutableAttributedString alloc] init]; + [text appendAttributedString: + [[NSAttributedString alloc] initWithString: + NSLocalizedString(@"Create a new invitation", nil) + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote], + NSForegroundColorAttributeName : [UIColor dw_darkTitleColor], + }]]; + [text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]]; + [text appendAttributedString: + [[NSAttributedString alloc] initWithString: + NSLocalizedString(@"Invite your friends and family to join the Dash Network.", nil) + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1], + NSForegroundColorAttributeName : [UIColor dw_tertiaryTextColor], + }]]; + title.attributedText = text; + + [title setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + [contentView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + CGFloat const padding = 20; + [NSLayoutConstraint dw_activate:@[ + [contentView pinEdges:self], + + [icon.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:padding], + [icon.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [icon pinSize:CGSizeMake(37, 37)], + + [title.leadingAnchor constraintEqualToAnchor:icon.trailingAnchor + constant:padding], + [title.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [contentView.trailingAnchor constraintEqualToAnchor:title.trailingAnchor + constant:padding], + [contentView.bottomAnchor constraintEqualToAnchor:title.bottomAnchor + constant:padding], + ]]; + } + return self; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.h b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.h new file mode 100644 index 000000000..d5164b004 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWHistoryHeaderView : UIView + +@property (readonly, nonatomic, strong) UIControl *createButton; +@property (readonly, nonatomic, strong) UIButton *optionsButton; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.m b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.m new file mode 100644 index 000000000..a84779e69 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWHistoryHeaderView.m @@ -0,0 +1,84 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWHistoryHeaderView.h" + +#import "DWCreateInvitationButton.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWHistoryHeaderView () + +@property (readonly, nonatomic, strong) DWCreateInvitationButton *createInvitationButton; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWHistoryHeaderView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + DWCreateInvitationButton *createButton = [[DWCreateInvitationButton alloc] init]; + createButton.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:createButton]; + _createButton = createButton; + + UILabel *header = [[UILabel alloc] init]; + header.translatesAutoresizingMaskIntoConstraints = NO; + header.numberOfLines = 0; + header.adjustsFontForContentSizeCategory = YES; + header.textColor = [UIColor dw_darkTitleColor]; + header.text = NSLocalizedString(@"Invitations History", nil); + header.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + [self addSubview:header]; + + UIButton *optionsButton = [UIButton buttonWithType:UIButtonTypeSystem]; + optionsButton.translatesAutoresizingMaskIntoConstraints = NO; + [optionsButton setImage:[UIImage imageNamed:@"icon_options"] forState:UIControlStateNormal]; + optionsButton.tintColor = [UIColor dw_dashBlueColor]; + [self addSubview:optionsButton]; + _optionsButton = optionsButton; + + CGFloat const padding = 16; + UIEdgeInsets const insets = UIEdgeInsetsMake(padding, padding, padding, padding); + [NSLayoutConstraint dw_activate:@[ + [createButton pinEdges:self + insets:insets + except:DWAnchorBottom], + + [header.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:padding], + [header.topAnchor constraintEqualToAnchor:createButton.bottomAnchor + constant:20], + [self.bottomAnchor constraintEqualToAnchor:header.bottomAnchor + constant:20], + + [optionsButton.leadingAnchor constraintEqualToAnchor:header.trailingAnchor + constant:20], + [self.trailingAnchor constraintEqualToAnchor:optionsButton.trailingAnchor + constant:5], + [optionsButton.centerYAnchor constraintEqualToAnchor:header.centerYAnchor], + [optionsButton pinSize:CGSizeMake(44, 44)], + ]]; + } + return self; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.h b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.h new file mode 100644 index 000000000..80243673e --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.h @@ -0,0 +1,30 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWInvitationItem.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationTableViewCell : UITableViewCell + +@property (nullable, nonatomic, strong) id item; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.m b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.m new file mode 100644 index 000000000..30c3d2293 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/History/Views/DWInvitationTableViewCell.m @@ -0,0 +1,126 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationTableViewCell.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationTableViewCell () + +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *subtitleLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWInvitationTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.selectionStyle = UITableViewCellSelectionStyleNone; + + self.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.contentView.backgroundColor = self.backgroundColor; + + UIImageView *icon = [[UIImageView alloc] init]; + icon.translatesAutoresizingMaskIntoConstraints = NO; + icon.userInteractionEnabled = NO; + icon.contentMode = UIViewContentModeScaleAspectFit; + [self.contentView addSubview:icon]; + _iconImageView = icon; + + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.textColor = [UIColor dw_darkTitleColor]; + title.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + title.numberOfLines = 0; + title.adjustsFontForContentSizeCategory = YES; + title.userInteractionEnabled = NO; + [self.contentView addSubview:title]; + _titleLabel = title; + + UILabel *subtitle = [[UILabel alloc] init]; + subtitle.translatesAutoresizingMaskIntoConstraints = NO; + subtitle.textColor = [UIColor dw_tertiaryTextColor]; + subtitle.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + subtitle.numberOfLines = 0; + subtitle.adjustsFontForContentSizeCategory = YES; + subtitle.userInteractionEnabled = NO; + [self.contentView addSubview:subtitle]; + _subtitleLabel = subtitle; + + UIImageView *chevron = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_disclosure_indicator"]]; + chevron.translatesAutoresizingMaskIntoConstraints = NO; + [self.contentView addSubview:chevron]; + + [title setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + [subtitle setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + + CGFloat const padding = 20; + UIEdgeInsets const insets = UIEdgeInsetsMake(padding, padding, padding, padding); + [NSLayoutConstraint dw_activate:@[ + [icon.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor + constant:16 + padding], + [icon.centerYAnchor constraintEqualToAnchor:self.contentView.centerYAnchor], + [icon pinSize:CGSizeMake(37, 37)], + + [title.leadingAnchor constraintEqualToAnchor:icon.trailingAnchor + constant:padding], + [title.topAnchor constraintEqualToAnchor:self.contentView.topAnchor + constant:padding], + + [subtitle.topAnchor constraintEqualToAnchor:title.bottomAnchor], + [subtitle.leadingAnchor constraintEqualToAnchor:icon.trailingAnchor + constant:padding], + [self.contentView.bottomAnchor constraintEqualToAnchor:subtitle.bottomAnchor + constant:padding], + + [chevron.leadingAnchor constraintEqualToAnchor:title.trailingAnchor + constant:padding], + [chevron.leadingAnchor constraintEqualToAnchor:subtitle.trailingAnchor + constant:padding], + [self.contentView.trailingAnchor constraintEqualToAnchor:chevron.trailingAnchor + constant:padding], + [chevron pinSize:CGSizeMake(10, 19)], + [chevron.centerYAnchor constraintEqualToAnchor:self.contentView.centerYAnchor], + + ]]; + } + return self; +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { + [super setHighlighted:highlighted animated:animated]; + + [self.contentView dw_pressedAnimation:DWPressedAnimationStrength_Light pressed:highlighted]; +} + +- (void)setItem:(id)item { + _item = item; + + UIImage *icon = [UIImage imageNamed:item.isRegistered ? @"icon_invitation_read" : @"icon_invitation_unread"]; + self.iconImageView.image = icon; + self.titleLabel.text = item.title; + self.subtitleLabel.text = item.subtitle; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/BaseInvitationViewController.swift b/DashWallet/Sources/UI/DashPay/Invites/Invitation/BaseInvitationViewController.swift new file mode 100644 index 000000000..a527b89cd --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/BaseInvitationViewController.swift @@ -0,0 +1,271 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class InvitationSourceItem: NSObject, UIActivityItemSource +{ + let url: URL + + init(with url: URL) { + self.url = url + super.init() + } + + func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { + return NSLocalizedString("DashPay Invitation", comment: "") + } + + func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { + return self.url + } +} + + +@objc class BaseInvitationViewController: UIViewController { + internal var topView: BaseInvitationTopView! + internal var actionsView: DWInvitationActionsView! + internal var invitationView: UIView! + internal var buttonsView: UIStackView! + internal var sendButton: ActionButton! + private var bottomConstraint: NSLayoutConstraint! + + internal let invitation: DSBlockchainInvitation + internal let fullLink: String + internal var invitationURL: URL! + + internal var index: Int + override var preferredStatusBarStyle: UIStatusBarStyle { + .lightContent + } + + @objc public init(with invitation: DSBlockchainInvitation, fullLink: String, index: Int = 0) { + self.invitation = invitation + self.fullLink = fullLink + self.index = index + + super.init(nibName: nil, bundle: nil) + + let wallet = DWEnvironment.sharedInstance().currentWallet + let myBlockchainIdentity: DSBlockchainIdentity + + if (MOCK_DASHPAY.boolValue) { + let username = DWGlobalOptions.sharedInstance().dashpayUsername + myBlockchainIdentity = wallet.createBlockchainIdentity(forUsername: username) + } else { + myBlockchainIdentity = wallet.defaultBlockchainIdentity! + } + + DWInvitationLinkBuilder.dynamicLink(from: fullLink, myBlockchainIdentity: myBlockchainIdentity, completion: { [weak self] url in + self?.invitationURL = url ?? URL(string: fullLink) + }) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + //MARK: Actions + + @objc func sendButtonAction() { + let invitationURL = self.invitationURL! + + let imageSize: CGSize = CGSize(width: 320, height: 440) + let messageView = DWInvitationMessageView(frame: CGRect(x: 0, y: -1000, width: imageSize.width, height: imageSize.height)) + self.view.window?.addSubview(messageView) + + let renderer = UIGraphicsImageRenderer(size: imageSize) + let image = renderer.image { ctx in + messageView.drawHierarchy(in: messageView.bounds, afterScreenUpdates: true) + } + messageView.removeFromSuperview() + + let shareItem = InvitationSourceItem(with: invitationURL) + + let sharingController = UIActivityViewController(activityItems: [ shareItem, image ], applicationActivities: nil) + self.present(sharingController, animated: true) + } + + @objc func previewButtonAction() { + let previewController = DWInvitationPreviewViewController() + self.present(previewController, animated: true) + } + + @objc func profileAction() { + let item = DWDPUserObject(blockchainIdentity: invitation.identity) + let payModel = DWPayModel() + //TODO: DashPay +// let dataProvider = DWTransactionListDataProviderStub() +// +// let profileController = DWUserProfileViewController(item: item, payModel: payModel, dataProvider: dataProvider, shouldSkipUpdating: true, shownAfterPayment: false) +// self.navigationController?.pushViewController(profileController, animated: true) + } + + //MARK: Hierarchy + + internal func configureInvitationView() { + invitationView = UIView() + invitationView.translatesAutoresizingMaskIntoConstraints = false + + configureTopView() + + if invitation.identity.isRegistered { + topView.previewButton.isHidden = true + }else{ + configureActionsView() + } + } + + internal func configureTopView() { + self.topView = InvitationTopView(index: index) + topView.translatesAutoresizingMaskIntoConstraints = false + topView.layer.cornerRadius = 8.0 + topView.layer.masksToBounds = true + topView.previewButton.addTarget(self, action: #selector(previewButtonAction), for: .touchUpInside) + invitationView.addSubview(topView) + + NSLayoutConstraint.activate([ + topView.heightAnchor.constraint(equalTo: topView.widthAnchor, multiplier: 0.88), + topView.topAnchor.constraint(equalTo: invitationView.topAnchor, constant: 23), + topView.leadingAnchor.constraint(equalTo: invitationView.leadingAnchor), + topView.trailingAnchor.constraint(equalTo: invitationView.trailingAnchor), + ]) + } + + internal func configureActionsView() { + actionsView = DWInvitationActionsView(frame: .zero) + actionsView.translatesAutoresizingMaskIntoConstraints = false + actionsView.delegate = self + invitationView.addSubview(actionsView) + + NSLayoutConstraint.activate([ + actionsView.topAnchor.constraint(equalTo: self.topView.bottomAnchor, constant: 20), + actionsView.leadingAnchor.constraint(equalTo: self.invitationView.leadingAnchor), + actionsView.trailingAnchor.constraint(equalTo: self.invitationView.trailingAnchor), + actionsView.bottomAnchor.constraint(equalTo: self.invitationView.bottomAnchor), + ]) + } + + internal func configureButtonsView() { + buttonsView = UIStackView() + buttonsView.axis = .vertical + buttonsView.spacing = 8 + buttonsView.translatesAutoresizingMaskIntoConstraints = false + self.view.addSubview(buttonsView) + + if invitation.identity.isRegistered + { + let tap = UITapGestureRecognizer(target: self, action: #selector(profileAction)) + let view = InvitationBottomView(invitation: invitation) + view.addGestureRecognizer(tap) + buttonsView.addArrangedSubview(view) + }else{ + sendButton = ActionButton() + sendButton.translatesAutoresizingMaskIntoConstraints = false + sendButton.setTitle(NSLocalizedString("Send again", comment: ""), for: .normal) + sendButton.addTarget(self, action: #selector(sendButtonAction), for: .touchUpInside) + buttonsView.addArrangedSubview(sendButton) + + NSLayoutConstraint.activate([ + sendButton.heightAnchor.constraint(equalToConstant: 50) + ]) + } + } + + private func configureBottomView() { + + } + + internal func configureHierarchy() { + let contentView = UIView() + contentView.translatesAutoresizingMaskIntoConstraints = false + self.view.addSubview(contentView) + + configureButtonsView() + + self.bottomConstraint = self.view.layoutMarginsGuide.bottomAnchor.constraint(equalTo: self.buttonsView.bottomAnchor, constant: 16) + + NSLayoutConstraint.activate([ + contentView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + contentView.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor), + + self.buttonsView.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 10), + self.buttonsView.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor), + self.buttonsView.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor), + + bottomConstraint, + ]) + + let scrollingController = DWScrollingViewController() + scrollingController.keyboardNotificationsEnabled = false + self.dw_embedChild(scrollingController, inContainer: contentView) + + configureInvitationView() + + scrollingController.contentView.dw_embedSubview(self.invitationView) + scrollingController.scrollView.showsVerticalScrollIndicator = false + } + + override func viewDidLoad() { + super.viewDidLoad() + + configureHierarchy() + + let wallet = DWEnvironment.sharedInstance().currentWallet + let myBlockchainIdentity: DSBlockchainIdentity + + if (MOCK_DASHPAY.boolValue) { + myBlockchainIdentity = wallet.createBlockchainIdentity(forUsername: DWGlobalOptions.sharedInstance().dashpayUsername) + } else { + myBlockchainIdentity = wallet.defaultBlockchainIdentity! + } + + topView.update(with: myBlockchainIdentity, invitation: invitation) + + self.actionsView?.tagTextField.text = invitation.tag; + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.ka_startObservingKeyboardNotifications() + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + + self.invitation.updateInWallet() + self.ka_stopObservingKeyboardNotifications() + } + + override func ka_keyboardShowOrHideAnimation(withHeight height: CGFloat, animationDuration: TimeInterval, animationCurve: UIView.AnimationCurve) { + self.bottomConstraint.constant = height > 0 ? height : 16 + self.view.layoutIfNeeded() + } +} + +extension BaseInvitationViewController: DWInvitationActionsViewDelegate { + func invitationActionsViewCopyButtonAction(_ view: DWInvitationActionsView) { + UIPasteboard.general.string = invitationURL.absoluteString + } + + func invitationActionsView(_ view: DWInvitationActionsView, didChangeTag tag: String) { + invitation.tag = tag + } +} diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.h b/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.h new file mode 100644 index 000000000..f02d6f492 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.h @@ -0,0 +1,32 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSBlockchainIdentity; + +@interface DWInvitationLinkBuilder : NSObject + ++ (void)dynamicLinkFrom:(NSString *)linkString + myBlockchainIdentity:(DSBlockchainIdentity *)myBlockchainIdentity + completion:(void (^)(NSURL *_Nullable url))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.m b/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.m new file mode 100644 index 000000000..80a74dbc9 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/DWInvitationLinkBuilder.m @@ -0,0 +1,82 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationLinkBuilder.h" + +#import "DWEnvironment.h" +#import + +#import "DSBlockchainIdentity+DWDisplayName.h" + +static NSString *const AndroidBundleID = @"org.dash.dashpay.testnet"; +// TODO: DP set app store id +static NSString *const iOSAppStoreID = @"1563288407"; + +@implementation DWInvitationLinkBuilder + ++ (void)dynamicLinkFrom:(NSString *)linkString + myBlockchainIdentity:(DSBlockchainIdentity *)myBlockchainIdentity + completion:(void (^)(NSURL *_Nullable url))completion { + NSString *encodedName = [[myBlockchainIdentity dw_displayNameOrUsername] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + + NSString *displayNameParam = @""; + if (myBlockchainIdentity.displayName.length != 0) { + displayNameParam = [NSString stringWithFormat:@"&display-name=%@", encodedName]; + } + + NSString *avatarParam = @""; + if (myBlockchainIdentity.avatarPath.length > 0) { + NSString *encodedAvatar = [myBlockchainIdentity.avatarPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + avatarParam = [NSString stringWithFormat:@"&avatar-url=%@", encodedAvatar]; + } + + NSString *fullLink = [NSString stringWithFormat:@"%@%@%@", linkString, displayNameParam, avatarParam]; + + NSURL *link = [[NSURL alloc] initWithString:fullLink]; + NSString *dynamicLinksDomainURIPrefix = @"https://invitations.dashpay.io/link"; + FIRDynamicLinkComponents *linkBuilder = + [[FIRDynamicLinkComponents alloc] initWithLink:link + domainURIPrefix:dynamicLinksDomainURIPrefix]; + linkBuilder.iOSParameters = + [[FIRDynamicLinkIOSParameters alloc] initWithBundleID:[[NSBundle mainBundle] bundleIdentifier]]; + linkBuilder.iOSParameters.appStoreID = iOSAppStoreID; + linkBuilder.androidParameters = + [[FIRDynamicLinkAndroidParameters alloc] initWithPackageName:AndroidBundleID]; + + linkBuilder.socialMetaTagParameters = + [[FIRDynamicLinkSocialMetaTagParameters alloc] init]; + linkBuilder.socialMetaTagParameters.title = NSLocalizedString(@"Join Now", nil); + + NSString *urlFormat = + [NSString + stringWithFormat:@"https://invitations.dashpay.io/fun/invite-preview?display-name=%@%@", + encodedName, avatarParam]; + linkBuilder.socialMetaTagParameters.imageURL = [NSURL URLWithString:urlFormat]; + linkBuilder.socialMetaTagParameters.descriptionText = + [NSString stringWithFormat:NSLocalizedString(@"You have been invited by %@. Start using Dash cryptocurrency.", nil), + [myBlockchainIdentity dw_displayNameOrUsername]]; + + [linkBuilder shortenWithCompletion:^(NSURL *_Nullable shortURL, + NSArray *_Nullable warnings, + NSError *_Nullable error) { + if (completion) { + completion(shortURL); + } + }]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/SuccessInvitationViewController.swift b/DashWallet/Sources/UI/DashPay/Invites/Invitation/SuccessInvitationViewController.swift new file mode 100644 index 000000000..4ca910b2b --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/SuccessInvitationViewController.swift @@ -0,0 +1,77 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +@objc protocol SuccessInvitationViewControllerDelegate: AnyObject { + +@objc func successInvitationViewControllerDidSelectLater(controller: SuccessInvitationViewController) + +} + +@objc class SuccessInvitationViewController: BaseInvitationViewController { + @objc weak var delegate: SuccessInvitationViewControllerDelegate? + + override var preferredStatusBarStyle: UIStatusBarStyle { + .default + } + + @objc func laterButtonAction() { + delegate?.successInvitationViewControllerDidSelectLater(controller: self) + } + + override func configureTopView() { + self.topView = SuccessInvitationTopView(frame: .zero) + topView.translatesAutoresizingMaskIntoConstraints = false + topView.layer.cornerRadius = 8.0 + topView.layer.masksToBounds = true + topView.previewButton.addTarget(self, action: #selector(previewButtonAction), for: .touchUpInside) + + invitationView.addSubview(topView) + + NSLayoutConstraint.activate([ + topView.heightAnchor.constraint(equalTo: topView.widthAnchor, multiplier: 0.88), + topView.topAnchor.constraint(equalTo: invitationView.topAnchor, constant: 23), + topView.leadingAnchor.constraint(equalTo: invitationView.leadingAnchor), + topView.trailingAnchor.constraint(equalTo: invitationView.trailingAnchor), + ]) + } + + override func configureButtonsView() { + super.configureButtonsView() + + sendButton.setTitle(NSLocalizedString("Send Invitation", comment: ""), for: .normal) + + let laterButton = PlainButton() + laterButton.translatesAutoresizingMaskIntoConstraints = false + laterButton.setTitle(NSLocalizedString("Maybe later", comment: ""), for: .normal) + laterButton.addTarget(self, action: #selector(laterButtonAction), for: .touchUpInside) + buttonsView.addArrangedSubview(laterButton) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.topView.viewWillAppear() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + self.topView.viewDidAppear() + } +} diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.h b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.h new file mode 100644 index 000000000..f0ae73801 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.h @@ -0,0 +1,39 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "DWTextField.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWInvitationActionsView; + +@protocol DWInvitationActionsViewDelegate + +- (void)invitationActionsView:(DWInvitationActionsView *)view didChangeTag:(NSString *)tag; +- (void)invitationActionsViewCopyButtonAction:(DWInvitationActionsView *)view; + +@end + +@interface DWInvitationActionsView : UIView + +@property (nonatomic, strong) DWTextField *tagTextField; +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.m b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.m new file mode 100644 index 000000000..50cc2abf4 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationActionsView.m @@ -0,0 +1,115 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationActionsView.h" + +#import "dashwallet-Swift.h" +#import "DWTextField.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationActionsView () + +@end + +NS_ASSUME_NONNULL_END + +static NSTimeInterval DEBOUNCE_DELAY = 0.2; + +@implementation DWInvitationActionsView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.textColor = [UIColor dw_darkTitleColor]; + title.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + title.text = NSLocalizedString(@"Tag for your reference", nil); + title.adjustsFontForContentSizeCategory = YES; + title.numberOfLines = 0; + [self addSubview:title]; + + DWTextField *textField = [[DWTextField alloc] init]; + textField.translatesAutoresizingMaskIntoConstraints = NO; + textField.horizontalPadding = 16.0; + textField.verticalPadding = 8; + textField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + textField.textColor = [UIColor dw_darkTitleColor]; + textField.returnKeyType = UIReturnKeyDone; + textField.backgroundColor = [UIColor dw_backgroundColor]; + textField.layer.cornerRadius = 8; + textField.layer.masksToBounds = YES; + textField.delegate = self; + textField.placeholder = NSLocalizedString(@"eg: Dad", @"Invitation tag placeholder"); + [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + [self addSubview:textField]; + _tagTextField = textField; + + DWActionButton *copyButton = [[DWActionButton alloc] init]; + copyButton.translatesAutoresizingMaskIntoConstraints = NO; + [copyButton addTarget:self action:@selector(copyButtonAction) forControlEvents:UIControlEventTouchUpInside]; + [copyButton setTitle:NSLocalizedString(@"Copy Invitation Link", nil) forState:UIControlStateNormal]; + [copyButton setImage:[[UIImage imageNamed:@"invitation_copy"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] + forState:UIControlStateNormal]; + [self addSubview:copyButton]; + + [NSLayoutConstraint activateConstraints:@[ + [title.topAnchor constraintEqualToAnchor:self.topAnchor], + [title.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:title.trailingAnchor], + + [textField.topAnchor constraintEqualToAnchor:title.bottomAnchor + constant:12], + [textField.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:textField.trailingAnchor], + [textField.heightAnchor constraintEqualToConstant:52], + + [copyButton.topAnchor constraintEqualToAnchor:textField.bottomAnchor + constant:8], + [copyButton.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:copyButton.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:copyButton.bottomAnchor], + [copyButton.heightAnchor constraintEqualToConstant:44], + ]]; + } + return self; +} + +- (void)copyButtonAction { + [self.delegate invitationActionsViewCopyButtonAction:self]; +} + +#pragma mark - UITextFieldDelegate + +- (void)textFieldDidChange:(UITextField *)textField { + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tagDidUpdate) object:nil]; + + [self performSelector:@selector(tagDidUpdate) withObject:nil afterDelay:DEBOUNCE_DELAY]; +} + +- (void)tagDidUpdate { + [self.delegate invitationActionsView:self didChangeTag:_tagTextField.text ?: @""]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.h b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.h new file mode 100644 index 000000000..a114f9946 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationMessageView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.m b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.m new file mode 100644 index 000000000..4f322ad37 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWInvitationMessageView.m @@ -0,0 +1,111 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationMessageView.h" + +#import "DSBlockchainIdentity+DWDisplayName.h" +#import "DWEnvironment.h" +#import "DWSuccessInvitationView.h" +#import "DWUIKit.h" + +// If MOCK_DASHPAY +#import "DWGlobalOptions.h" +#import "DWDashPayConstants.h" + +@implementation DWInvitationMessageView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + DWSuccessInvitationView *iconView = [[DWSuccessInvitationView alloc] initWithFrame:CGRectZero]; + iconView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:iconView]; + + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.textColor = [UIColor dw_dashBlueColor]; + title.text = NSLocalizedString(@"Join Now", nil); + title.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle2]; + title.textAlignment = NSTextAlignmentCenter; + title.numberOfLines = 0; + [self addSubview:title]; + + UILabel *subtitle = [[UILabel alloc] init]; + subtitle.translatesAutoresizingMaskIntoConstraints = NO; + subtitle.textColor = [UIColor dw_darkTitleColor]; + subtitle.textAlignment = NSTextAlignmentCenter; + subtitle.numberOfLines = 0; + [self addSubview:subtitle]; + + [NSLayoutConstraint activateConstraints:@[ + [iconView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:32.0], + [iconView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [title.topAnchor constraintEqualToAnchor:iconView.bottomAnchor + constant:28], + [title.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:16], + [self.trailingAnchor constraintEqualToAnchor:title.trailingAnchor + constant:16], + + [subtitle.topAnchor constraintEqualToAnchor:title.bottomAnchor + constant:16], + [subtitle.leadingAnchor constraintEqualToAnchor:self.leadingAnchor + constant:16], + [self.trailingAnchor constraintEqualToAnchor:subtitle.trailingAnchor + constant:16], + + [self.bottomAnchor constraintEqualToAnchor:subtitle.bottomAnchor + constant:32.0], + ]]; + + // Setup + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + + if (MOCK_DASHPAY) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + myBlockchainIdentity = [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + iconView.blockchainIdentity = myBlockchainIdentity; + + NSMutableAttributedString *desc = [[NSMutableAttributedString alloc] init]; + [desc beginEditing]; + + NSString *name = [myBlockchainIdentity dw_displayNameOrUsername]; + NSString *text = [NSString stringWithFormat:NSLocalizedString(@"You have been invited by %@. Start using Dash cryptocurrency.", nil), name]; + + [desc appendAttributedString:[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleBody]}]]; + NSRange range = [text rangeOfString:name]; + if (range.location != NSNotFound) { + [desc setAttributes:@{NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]} range:range]; + } + + [desc endEditing]; + subtitle.attributedText = desc; + } + return self; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.h b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.h new file mode 100644 index 000000000..d80949735 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.h @@ -0,0 +1,33 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSBlockchainIdentity; + +@interface DWSuccessInvitationView : UIView + +@property (nullable, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; + +- (void)prepareForAnimation; +- (void)showAnimated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.m b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.m new file mode 100644 index 000000000..115e3641b --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/DWSuccessInvitationView.m @@ -0,0 +1,131 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSuccessInvitationView.h" + +#import "DWDPAvatarView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSuccessInvitationView () + +@property (readonly, nonatomic, strong) UIImageView *backImageView; +@property (readonly, nonatomic, strong) UIView *avatarContainer; +@property (readonly, nonatomic, strong) DWDPAvatarView *avatarView; +@property (readonly, nonatomic, strong) UIImageView *topImageView; +@property (readonly, nonatomic, strong) NSLayoutConstraint *avatarTopConstraint; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWSuccessInvitationView + +- (DSBlockchainIdentity *)blockchainIdentity { + return self.avatarView.blockchainIdentity; +} + +- (void)setBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + self.avatarView.blockchainIdentity = blockchainIdentity; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIImageView *backImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"invite_letterbox_back"]]; + backImageView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:backImageView]; + _backImageView = backImageView; + + UIView *avatarContainer = [[UIView alloc] init]; + avatarContainer.translatesAutoresizingMaskIntoConstraints = NO; + avatarContainer.backgroundColor = [UIColor dw_dashBlueColor]; //TODO: must be light blue + [self addSubview:avatarContainer]; + _avatarContainer = avatarContainer; + + DWDPAvatarView *avatarView = [[DWDPAvatarView alloc] initWithFrame:CGRectZero]; + avatarView.translatesAutoresizingMaskIntoConstraints = NO; + avatarView.backgroundMode = DWDPAvatarBackgroundMode_Random; + [avatarContainer addSubview:avatarView]; + _avatarView = avatarView; + + UIImageView *topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"invite_letterbox_top"]]; + topImageView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:topImageView]; + _topImageView = topImageView; + + NSLayoutConstraint *avatarTopConstraint = [avatarContainer.topAnchor constraintEqualToAnchor:self.topAnchor constant:56]; + _avatarTopConstraint = avatarTopConstraint; + + [NSLayoutConstraint activateConstraints:@[ + [backImageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [backImageView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:backImageView.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:backImageView.bottomAnchor], + + [topImageView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:89.0], + [topImageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [avatarView.topAnchor constraintEqualToAnchor:avatarContainer.topAnchor + constant:8.0], + [avatarView.leadingAnchor constraintEqualToAnchor:avatarContainer.leadingAnchor + constant:8.0], + [avatarContainer.trailingAnchor constraintEqualToAnchor:avatarView.trailingAnchor + constant:8.0], + [avatarContainer.bottomAnchor constraintEqualToAnchor:avatarView.bottomAnchor + constant:8.0], + [avatarView.widthAnchor constraintEqualToConstant:64.0], + [avatarView.heightAnchor constraintEqualToConstant:64.0], + + avatarTopConstraint, + [avatarContainer.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + ]]; + } + return self; +} + +- (CGSize)intrinsicContentSize { + return CGSizeMake(152.0, 175.0); +} + +- (void)prepareForAnimation { + self.backImageView.alpha = 0; + self.topImageView.alpha = 0; + self.avatarContainer.alpha = 0; + self.avatarTopConstraint.constant = 0; + [self layoutIfNeeded]; +} + +- (void)showAnimated { + [UIView animateWithDuration:0.35 + animations:^{ + self.backImageView.alpha = 1.0; + self.topImageView.alpha = 1.0; + } + completion:^(BOOL finished) { + self.avatarTopConstraint.constant = 56.0; + [UIView animateWithDuration:0.35 + animations:^{ + [self layoutIfNeeded]; + self.avatarContainer.alpha = 1.0; + }]; + }]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationBottomView.swift b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationBottomView.swift new file mode 100644 index 000000000..aa3a2d50e --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationBottomView.swift @@ -0,0 +1,96 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class InvitationBottomView: UIView { + init(invitation: DSBlockchainInvitation) { + super.init(frame: .zero) + + let stackView = UIStackView() + stackView.isUserInteractionEnabled = false + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.spacing = 5 + stackView.alignment = .center + addSubview(stackView) + + let usedByLabel = UILabel() + usedByLabel.translatesAutoresizingMaskIntoConstraints = false + usedByLabel.text = NSLocalizedString("Invitation used by", comment: "") + usedByLabel.font = UIFont.dw_font(forTextStyle: .footnote) + usedByLabel.textColor = UIColor.dw_secondaryText() + stackView.addArrangedSubview(usedByLabel) + + let containerView = UIView() + containerView.translatesAutoresizingMaskIntoConstraints = false + containerView.backgroundColor = UIColor.dw_dashBlue().withAlphaComponent(0.7) + containerView.layer.cornerRadius = 8 + stackView.addArrangedSubview(containerView) + + let userStackView = UIStackView() + userStackView.translatesAutoresizingMaskIntoConstraints = false + userStackView.axis = .horizontal + userStackView.spacing = 10 + containerView.addSubview(userStackView) + + let avatarView = DWDPAvatarView() + avatarView.isSmall = true + avatarView.backgroundMode = .random + avatarView.blockchainIdentity = invitation.identity + userStackView.addArrangedSubview(avatarView) + + let titleStackView = UIStackView() + titleStackView.translatesAutoresizingMaskIntoConstraints = false + titleStackView.axis = .vertical + titleStackView.spacing = 4 + userStackView.addArrangedSubview(titleStackView) + + let titleLable = UILabel() + titleLable.font = UIFont.dw_mediumFont(ofSize: 14) + titleLable.text = invitation.identity.displayName ?? invitation.identity.currentDashpayUsername + titleStackView.addArrangedSubview(titleLable) + + if let dn = invitation.identity.displayName, !dn.isEmpty { + let sublabel = UILabel() + sublabel.font = UIFont.dw_font(forTextStyle: .footnote) + sublabel.text = invitation.identity.currentDashpayUsername + titleStackView.addArrangedSubview(sublabel) + } + + NSLayoutConstraint.activate([ + stackView.topAnchor.constraint(equalTo: self.topAnchor), + stackView.leadingAnchor.constraint(equalTo: self.leadingAnchor), + stackView.trailingAnchor.constraint(equalTo: self.trailingAnchor), + stackView.bottomAnchor.constraint(equalTo: self.bottomAnchor), + + userStackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20), + userStackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20), + userStackView.centerYAnchor.constraint(equalTo: containerView.centerYAnchor), + + containerView.heightAnchor.constraint(equalToConstant: 64), + + avatarView.widthAnchor.constraint(equalToConstant: 36), + avatarView.heightAnchor.constraint(equalToConstant: 36), + + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationTopView.swift b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationTopView.swift new file mode 100644 index 000000000..93aaa6008 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/InvitationTopView.swift @@ -0,0 +1,139 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class InvitationTopView: BaseInvitationTopView { + private var iconView: UIImageView! + private var titleLabel: UILabel! + private var dateLabel: UILabel! + + private var index: Int = 0 + + init(index: Int) { + super.init(frame: .zero) + + self.index = index + + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.alignment = .center + stackView.spacing = 5 + self.addSubview(stackView) + + iconView = UIImageView(image: UIImage(named: "icon_invitation_unread_big")!) + iconView.translatesAutoresizingMaskIntoConstraints = false + iconView.contentMode = .center + stackView.addArrangedSubview(iconView) + + let title = UILabel() + title.translatesAutoresizingMaskIntoConstraints = false + title.textColor = UIColor.dw_darkTitle() + title.font = UIFont.dw_font(forTextStyle: .title2) + title.adjustsFontForContentSizeCategory = true + title.textAlignment = .center + title.numberOfLines = 0 + stackView.addArrangedSubview(title) + titleLabel = title + + dateLabel = UILabel() + dateLabel.translatesAutoresizingMaskIntoConstraints = false + dateLabel.textColor = UIColor.dw_secondaryText() + dateLabel.font = UIFont.dw_font(forTextStyle: .footnote) + dateLabel.adjustsFontForContentSizeCategory = true + dateLabel.textAlignment = .center + dateLabel.numberOfLines = 0 + stackView.addArrangedSubview(dateLabel) + + NSLayoutConstraint.activate([ + stackView.centerXAnchor.constraint(equalTo: self.centerXAnchor), + stackView.centerYAnchor.constraint(equalTo: self.centerYAnchor, constant: 0), + + iconView.heightAnchor.constraint(equalToConstant: 72), + iconView.widthAnchor.constraint(equalToConstant: 72), + + previewButton.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16), + self.trailingAnchor.constraint(equalTo: previewButton.trailingAnchor, constant: 16), + self.bottomAnchor.constraint(equalTo: previewButton.bottomAnchor, constant: 4), + previewButton.heightAnchor.constraint(equalToConstant: 44), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func update(with blockchainIdentity: DSBlockchainIdentity, invitation: DSBlockchainInvitation) { + if invitation.identity.isRegistered { + iconView.image = UIImage(named: "icon_invitation_read_big")! + } + + let tag = invitation.tag.isEmpty ? nil : invitation.tag + let defaultTitle = NSString.localizedStringWithFormat(NSLocalizedString("Invitation %ld", comment: "") as NSString, index) + let title = invitation.name ?? (tag ?? String(defaultTitle)) + titleLabel.text = title + + let transaction: DSTransaction = invitation.identity.registrationCreditFundingTransaction! + let chain = DWEnvironment.sharedInstance().currentChain + + let now = chain.timestamp(forBlockHeight: UInt32(TX_UNCONFIRMED)) + let txTime = (transaction.timestamp > 1) ? transaction.timestamp : now + let txDate = Date(timeIntervalSince1970: txTime) + let dateString = DWDateFormatter.sharedInstance.shortString(from: txDate) + dateLabel.text = dateString + } +} + +class BaseInvitationTopView: UIView { + + var previewButton: PlainButton = PlainButton() + + override init(frame: CGRect) { + super.init(frame: frame) + + self.backgroundColor = UIColor.dw_background() + + previewButton.translatesAutoresizingMaskIntoConstraints = false + previewButton.setTitle(NSLocalizedString("Preview Invitation", comment: ""), for: .normal) + self.addSubview(previewButton) + + NSLayoutConstraint.activate([ + previewButton.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16), + self.trailingAnchor.constraint(equalTo: previewButton.trailingAnchor, constant: 16), + self.bottomAnchor.constraint(equalTo: previewButton.bottomAnchor, constant: 4), + previewButton.heightAnchor.constraint(equalToConstant: 44), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func update(with blockchainIdentity: DSBlockchainIdentity, invitation: DSBlockchainInvitation) { + + } + + func viewWillAppear() { + + } + + func viewDidAppear() { + + } + +} diff --git a/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/SuccessInvitationTopView.swift b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/SuccessInvitationTopView.swift new file mode 100644 index 000000000..60d42d853 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Invitation/Views/SuccessInvitationTopView.swift @@ -0,0 +1,69 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class SuccessInvitationTopView: BaseInvitationTopView { + let iconView: DWSuccessInvitationView = DWSuccessInvitationView(frame: .zero) + + override init(frame: CGRect) { + super.init(frame: frame) + + iconView.translatesAutoresizingMaskIntoConstraints = false + iconView.transform = CGAffineTransform(scaleX: 0.68, y: 0.68) + self.addSubview(iconView) + + let title = UILabel() + title.translatesAutoresizingMaskIntoConstraints = false + title.textColor = UIColor.dw_darkTitle() + title.font = UIFont.dw_font(forTextStyle: .title2) + title.adjustsFontForContentSizeCategory = true + title.text = NSLocalizedString("Invitation Created Successfully", comment: "") + title.textAlignment = .center + title.numberOfLines = 0 + self.addSubview(title) + + title.setContentCompressionResistancePriority(.required, for: .vertical) + + NSLayoutConstraint.activate([ + iconView.topAnchor.constraint(equalTo: self.topAnchor, constant: 32), + iconView.centerXAnchor.constraint(equalTo: self.centerXAnchor), + + title.topAnchor.constraint(equalTo: iconView.bottomAnchor, constant: 20), + title.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16), + self.trailingAnchor.constraint(equalTo: title.trailingAnchor, constant: 16), + + previewButton.topAnchor.constraint(equalTo: title.bottomAnchor, constant: 5), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func update(with blockchainIdentity: DSBlockchainIdentity, invitation: DSBlockchainInvitation) { + self.iconView.blockchainIdentity = blockchainIdentity; + } + + override func viewWillAppear() { + iconView.prepareForAnimation() + } + + override func viewDidAppear() { + iconView.showAnimated() + } +} diff --git a/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.h b/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.h new file mode 100644 index 000000000..42864c44a --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationPreviewViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.m b/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.m new file mode 100644 index 000000000..20bab0980 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Invites/Preview/DWInvitationPreviewViewController.m @@ -0,0 +1,169 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationPreviewViewController.h" + +#import "DSBlockchainIdentity+DWDisplayName.h" +#import "dashwallet-Swift.h" +#import "DWEnvironment.h" +#import "DWModalPopupTransition.h" +#import "DWSuccessInvitationView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationPreviewViewController () + +@property (nonatomic, strong) DWModalPopupTransition *modalTransition; + +@property (readonly, nonatomic, strong) DWSuccessInvitationView *iconView; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWInvitationPreviewViewController + +- (instancetype)init { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _modalTransition = [[DWModalPopupTransition alloc] initWithInteractiveTransitionAllowed:YES]; + + self.transitioningDelegate = self.modalTransition; + self.modalPresentationStyle = UIModalPresentationCustom; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor clearColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.backgroundColor = [UIColor dw_backgroundColor]; + contentView.layer.cornerRadius = 8.0; + contentView.layer.masksToBounds = YES; + [self.view addSubview:contentView]; + + + DWSuccessInvitationView *iconView = [[DWSuccessInvitationView alloc] initWithFrame:CGRectZero]; + iconView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:iconView]; + _iconView = iconView; + + UILabel *title = [[UILabel alloc] init]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.textColor = [UIColor dw_dashBlueColor]; + title.text = NSLocalizedString(@"Join Now", nil); + title.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle2]; + title.textAlignment = NSTextAlignmentCenter; + title.numberOfLines = 0; + [contentView addSubview:title]; + + UILabel *subtitle = [[UILabel alloc] init]; + subtitle.translatesAutoresizingMaskIntoConstraints = NO; + subtitle.textColor = [UIColor dw_darkTitleColor]; + subtitle.textAlignment = NSTextAlignmentCenter; + subtitle.numberOfLines = 0; + [contentView addSubview:subtitle]; + + PlainButton *okButton = [[PlainButton alloc] init]; + okButton.translatesAutoresizingMaskIntoConstraints = NO; + [okButton setTitle:NSLocalizedString(@"Close", nil) forState:UIControlStateNormal]; + [okButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [contentView addSubview:okButton]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + [contentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + + [iconView.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:32.0], + [iconView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [title.topAnchor constraintEqualToAnchor:iconView.bottomAnchor + constant:28], + [title.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:16], + [contentView.trailingAnchor constraintEqualToAnchor:title.trailingAnchor + constant:16], + + [subtitle.topAnchor constraintEqualToAnchor:title.bottomAnchor + constant:16], + [subtitle.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:16], + [contentView.trailingAnchor constraintEqualToAnchor:subtitle.trailingAnchor + constant:16], + + [okButton.topAnchor constraintEqualToAnchor:subtitle.bottomAnchor + constant:32.0], + [okButton.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:okButton.bottomAnchor + constant:20.0], + [okButton.heightAnchor constraintGreaterThanOrEqualToConstant:40.0], + ]]; + + // Setup + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + + if (MOCK_DASHPAY) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + myBlockchainIdentity = [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + iconView.blockchainIdentity = myBlockchainIdentity; + + NSMutableAttributedString *desc = [[NSMutableAttributedString alloc] init]; + [desc beginEditing]; + + NSString *name = [myBlockchainIdentity dw_displayNameOrUsername]; + NSString *text = [NSString stringWithFormat:NSLocalizedString(@"You have been invited by %@. Start using Dash cryptocurrency.", nil), name]; + + [desc appendAttributedString:[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleBody]}]]; + NSRange range = [text rangeOfString:name]; + if (range.location != NSNotFound) { + [desc setAttributes:@{NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]} range:range]; + } + + [desc endEditing]; + subtitle.attributedText = desc; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self.iconView prepareForAnimation]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + [self.iconView showAnimated]; +} + +- (void)closeButtonAction:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPContactObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPContactObject.m index c8ba471b3..c64d7ea65 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPContactObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPContactObject.m @@ -44,14 +44,15 @@ - (NSString *)username { - (NSString *)displayName { if (_displayName == nil) { - _displayName = [self.userEntity.displayName copy]; + NSString *userName = [self.userEntity.displayName copy]; + _displayName = [userName isEqualToString:@""] ? nil : userName; } return _displayName; } - (NSAttributedString *)title { NSDictionary *attributes = @{NSFontAttributeName : [UIFont dw_itemTitleFont]}; - return [[NSAttributedString alloc] initWithString:self.displayName ?: self.username attributes:attributes]; + return [[NSAttributedString alloc] initWithString:(self.displayName ?: self.username) ?: @"" attributes:attributes]; } - (NSString *)subtitle { diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPIncomingRequestObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPIncomingRequestObject.m index afbc992a6..37b5743ec 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPIncomingRequestObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPIncomingRequestObject.m @@ -55,12 +55,17 @@ - (NSString *)username { } - (NSString *)displayName { - return nil; + if (_username == nil) { + BOOL hasDisplayName = _blockchainIdentity.displayName.length > 0; + _username = hasDisplayName ? [_blockchainIdentity.displayName copy] : nil; + } + + return _username; } - (NSAttributedString *)title { NSDictionary *attributes = @{NSFontAttributeName : [UIFont dw_itemTitleFont]}; - return [[NSAttributedString alloc] initWithString:self.displayName ?: self.username attributes:attributes]; + return [[NSAttributedString alloc] initWithString:(self.displayName ?: self.username) ?: @"" attributes:attributes]; } - (NSString *)subtitle { diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.h b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.h index f6d40b3f4..ce919cf08 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.h +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.h @@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithTransaction:(DSTransaction *)tx dataProvider:(id)dataProvider - username:(NSString *)username NS_DESIGNATED_INITIALIZER; + blockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.m index 52013c4b5..378fa5a77 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPTxObject.m @@ -21,6 +21,8 @@ #import "UIColor+DWStyle.h" #import "UIFont+DWDPItem.h" +#import + NS_ASSUME_NONNULL_BEGIN @interface DWDPTxObject () @@ -38,16 +40,21 @@ @implementation DWDPTxObject @synthesize subtitle = _subtitle; @synthesize username = _username; @synthesize transaction = _transaction; +@synthesize blockchainIdentity = _blockchainIdentity; - (instancetype)initWithTransaction:(DSTransaction *)tx dataProvider:(id)dataProvider - username:(NSString *)username { + blockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { self = [super init]; if (self) { _transaction = tx; _dataProvider = dataProvider; - _username = username; - // TODO: DP provide Display Name + _blockchainIdentity = blockchainIdentity; + _username = blockchainIdentity.currentDashpayUsername; + + BOOL hasDisplayName = blockchainIdentity.displayName.length > 0; + _displayName = hasDisplayName ? blockchainIdentity.displayName : nil; + _subtitle = [dataProvider shortDateStringForTransaction:tx]; _dataItem = [dataProvider transactionDataForTransaction:tx]; } diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPUserObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPUserObject.m index 2761a5cc5..6ea24a000 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPUserObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/DWDPUserObject.m @@ -26,6 +26,7 @@ @implementation DWDPUserObject @synthesize blockchainIdentity = _blockchainIdentity; @synthesize username = _username; +@synthesize displayName = _displayName; - (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { self = [super init]; @@ -47,7 +48,12 @@ - (instancetype)initWithFriendRequestEntity:(DSFriendRequestEntity *)friendReque } - (NSString *)displayName { - return nil; + if (_displayName == nil) { + BOOL hasDisplayName = _blockchainIdentity.displayName.length > 0; + _displayName = hasDisplayName ? _blockchainIdentity.displayName : nil; + } + + return _displayName; } - (NSString *)username { @@ -61,7 +67,7 @@ - (NSString *)username { - (NSAttributedString *)title { NSDictionary *attributes = @{NSFontAttributeName : [UIFont dw_itemTitleFont]}; - return [[NSAttributedString alloc] initWithString:self.displayName ?: self.username attributes:attributes]; + return [[NSAttributedString alloc] initWithString:(self.displayName ?: self.username) ?: @"" attributes:attributes]; } - (NSString *)subtitle { @@ -72,9 +78,9 @@ - (DSFriendRequestEntity *)friendRequestToPay { DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; NSPredicate *predicate = [NSPredicate predicateWithFormat: - @"sourceContact.associatedBlockchainIdentity.uniqueID == %@", + @"destinationContact.associatedBlockchainIdentity.uniqueID == %@", uint256_data(myBlockchainIdentity.uniqueID)]; - DSFriendRequestEntity *friendRequest = [[self.blockchainIdentity.matchingDashpayUserInViewContext.incomingRequests filteredSetUsingPredicate:predicate] anyObject]; + DSFriendRequestEntity *friendRequest = [[self.blockchainIdentity.matchingDashpayUserInViewContext.outgoingRequests filteredSetUsingPredicate:predicate] anyObject]; return friendRequest; } diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.h b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.h index fadb3646d..fbc741283 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.h +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.h @@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithFriendRequestEntity:(DSFriendRequestEntity *)friendRequestEntity blockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_UNAVAILABLE; -- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_UNAVAILABLE; +- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity; // if !MOCK_DASHPAY NS_UNAVAILABLE; @end diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.m index bfec582df..2647dffcf 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPAcceptedRequestNotificationObject.m @@ -17,9 +17,9 @@ #import "DWDPAcceptedRequestNotificationObject.h" -#import "DWDateFormatter.h" #import "DWEnvironment.h" #import "UIFont+DWDPItem.h" +#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @@ -50,7 +50,7 @@ - (instancetype)initWithFriendRequestEntity:(DSFriendRequestEntity *)friendReque - (NSAttributedString *)title { if (_title == nil) { - NSString *name = self.displayName ?: self.username; + NSString *name = self.displayName ?: (self.username ?: NSLocalizedString(@"User (Fetching Info)", nil)); NSString *format = self.isInitiatedByThem ? NSLocalizedString(@"%@ has sent you a contact request", nil) : NSLocalizedString(@"%@ has accepted your contact request", nil); diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPEstablishedContactNotificationObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPEstablishedContactNotificationObject.m index 5ec58b2f9..9ee7ceed8 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPEstablishedContactNotificationObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPEstablishedContactNotificationObject.m @@ -19,8 +19,8 @@ #import -#import "DWDateFormatter.h" #import "UIFont+DWDPItem.h" +#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.h b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.h index a5afc1cba..77d2af89d 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.h +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.h @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN @interface DWDPNewIncomingRequestNotificationObject : DWDPNewIncomingRequestObject -- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_UNAVAILABLE; +- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity; // if !MOCK_DASHPAY NS_UNAVAILABLE; @end diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.m index 711988ae3..427a93958 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPNewIncomingRequestNotificationObject.m @@ -19,7 +19,7 @@ #import -#import "DWDateFormatter.h" +#import "dashwallet-Swift.h" @implementation DWDPNewIncomingRequestNotificationObject diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.h b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.h index fdfbacf9a..de16a3985 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.h +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.h @@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithFriendRequestEntity:(DSFriendRequestEntity *)friendRequestEntity blockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_UNAVAILABLE; -- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity NS_UNAVAILABLE; +- (instancetype)initWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity; // if !MOCK_DASHPAY NS_UNAVAILABLE; @end diff --git a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.m b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.m index 2dd23508d..0ea506615 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.m +++ b/DashWallet/Sources/UI/DashPay/Items/Objects/Notifications/DWDPOutgoingRequestNotificationObject.m @@ -17,9 +17,9 @@ #import "DWDPOutgoingRequestNotificationObject.h" -#import "DWDateFormatter.h" #import "DWEnvironment.h" #import "UIFont+DWDPItem.h" +#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @@ -51,7 +51,7 @@ - (instancetype)initWithFriendRequestEntity:(DSFriendRequestEntity *)friendReque - (NSAttributedString *)title { if (_title == nil) { - NSString *name = self.displayName ?: self.username; + NSString *name = self.displayName ?: (self.username ?: NSLocalizedString(@"them (Fetching Info)", nil)); NSString *format = self.isInitiatedByMe ? NSLocalizedString(@"You sent the contact request to %@", nil) : NSLocalizedString(@"You accepted the contact request from %@", nil); diff --git a/DashWallet/Sources/UI/DashPay/Items/Protocols/DWDPBasicItem.h b/DashWallet/Sources/UI/DashPay/Items/Protocols/DWDPBasicItem.h index e5393a66b..8d72580d5 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Protocols/DWDPBasicItem.h +++ b/DashWallet/Sources/UI/DashPay/Items/Protocols/DWDPBasicItem.h @@ -17,12 +17,14 @@ #import +#import "DWDPBlockchainIdentityBackedItem.h" + NS_ASSUME_NONNULL_BEGIN @protocol DWDPItemCellDelegate @end -@protocol DWDPBasicItem +@protocol DWDPBasicItem @property (readonly, nonatomic) NSString *username; @property (nullable, readonly, nonatomic) NSString *displayName; diff --git a/DashWallet/Sources/UI/DashPay/Items/Views/ContentViews/DWDPGenericContactRequestItemView.m b/DashWallet/Sources/UI/DashPay/Items/Views/ContentViews/DWDPGenericContactRequestItemView.m index 159187220..91d788af4 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Views/ContentViews/DWDPGenericContactRequestItemView.m +++ b/DashWallet/Sources/UI/DashPay/Items/Views/ContentViews/DWDPGenericContactRequestItemView.m @@ -66,7 +66,7 @@ - (void)setup_contactRequestItemView { [self.accessoryView addSubview:declineButton]; _declineButton = declineButton; - UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; activityIndicatorView.color = [UIColor dw_tertiaryTextColor]; [self.accessoryView addSubview:activityIndicatorView]; diff --git a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.h b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.h index 653b26a6a..2ea7fdebe 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.h +++ b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.h @@ -25,13 +25,19 @@ NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSUInteger, DWDPBasicCellBackgroundStyle) { + DWDPBasicCellBackgroundStyle_GrayOnGray, + DWDPBasicCellBackgroundStyle_WhiteOnGray, + DWDPBasicCellBackgroundStyle_GrayOnWhite, +}; + @interface DWDPBasicCell : KVOUICollectionViewCell @property (readonly, class, nonatomic) Class itemViewClass; @property (readonly, nonatomic, strong) DWDPGenericItemView *itemView; -@property (nonatomic, assign) BOOL displayItemBackgroundView; @property (nonatomic, assign) CGFloat contentWidth; +@property (nonatomic, assign) DWDPBasicCellBackgroundStyle backgroundStyle; @property (nullable, nonatomic, weak) id delegate; diff --git a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.m b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.m index 4e5478442..f0c348d98 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.m +++ b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPBasicCell.m @@ -17,17 +17,17 @@ #import "DWDPBasicCell.h" -#import "DWShadowView.h" #import "DWUIKit.h" #import "NSAttributedString+DWHighlightText.h" #import "UIFont+DWDPItem.h" +#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @interface DWDPBasicCell () @property (readonly, nonatomic, strong) DWShadowView *shadowView; - +@property (readonly, nonatomic, strong) UIView *roundedContentView; @property (nullable, nonatomic, copy) NSString *highlightedText; @property (nullable, nonatomic, strong) NSLayoutConstraint *contentWidthConstraint; @@ -57,6 +57,7 @@ - (instancetype)initWithFrame:(CGRect)frame { roundedContentView.backgroundColor = [UIColor dw_backgroundColor]; roundedContentView.layer.cornerRadius = 8.0; roundedContentView.layer.masksToBounds = YES; + _roundedContentView = roundedContentView; [shadowView addSubview:roundedContentView]; Class klass = [self.class itemViewClass]; @@ -66,16 +67,19 @@ - (instancetype)initWithFrame:(CGRect)frame { [self.contentView addSubview:itemView]; _itemView = itemView; - const CGFloat verticalPadding = 5.0; - const CGFloat itemVerticalPadding = 18.0; + const CGFloat horizontalPadding = 10.0; + const CGFloat verticalPadding = 10.0; + const CGFloat itemVerticalPadding = 23.0; const CGFloat itemHorizontalPadding = verticalPadding + 10.0; UILayoutGuide *guide = self.contentView.layoutMarginsGuide; [NSLayoutConstraint activateConstraints:@[ [shadowView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:verticalPadding], - [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], - [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor], + [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor + constant:horizontalPadding], + [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor + constant:horizontalPadding], [self.contentView.bottomAnchor constraintEqualToAnchor:shadowView.bottomAnchor constant:verticalPadding], @@ -104,11 +108,29 @@ - (instancetype)initWithFrame:(CGRect)frame { return self; } -- (void)setDisplayItemBackgroundView:(BOOL)displayItemBackgroundView { - _displayItemBackgroundView = displayItemBackgroundView; - - self.shadowView.hidden = !displayItemBackgroundView; - self.itemView.backgroundColor = displayItemBackgroundView ? [UIColor dw_backgroundColor] : [UIColor dw_secondaryBackgroundColor]; +- (void)setBackgroundStyle:(DWDPBasicCellBackgroundStyle)backgroundStyle { + _backgroundStyle = backgroundStyle; + + switch (backgroundStyle) { + case DWDPBasicCellBackgroundStyle_GrayOnGray: + self.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.itemView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.shadowView.hidden = YES; + break; + case DWDPBasicCellBackgroundStyle_WhiteOnGray: + self.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.itemView.backgroundColor = [UIColor dw_backgroundColor]; + self.roundedContentView.backgroundColor = [UIColor dw_backgroundColor]; + self.shadowView.hidden = NO; + break; + case DWDPBasicCellBackgroundStyle_GrayOnWhite: + self.backgroundColor = [UIColor dw_backgroundColor]; + self.itemView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.roundedContentView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.shadowView.hidden = NO; + break; + } + self.contentView.backgroundColor = self.backgroundColor; } - (CGFloat)contentWidth { @@ -143,7 +165,7 @@ - (void)setItem:(id)item highlightedText:(NSString *)highlightedT self.highlightedText = highlightedText; - self.itemView.avatarView.username = item.username; + self.itemView.avatarView.blockchainIdentity = item.blockchainIdentity; [self reloadAttributedData]; } diff --git a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPIncomingRequestCell.m b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPIncomingRequestCell.m index 59f895a40..8508c1969 100644 --- a/DashWallet/Sources/UI/DashPay/Items/Views/DWDPIncomingRequestCell.m +++ b/DashWallet/Sources/UI/DashPay/Items/Views/DWDPIncomingRequestCell.m @@ -72,4 +72,7 @@ - (void)updateItemRequestState { self.itemView.requestState = requestItem.requestState; } +- (void)dealloc { + [self mvvm_unobserveAll]; +} @end diff --git a/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNoNotificationsCell.m b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNoNotificationsCell.m index 32ad2b812..56c76b57b 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNoNotificationsCell.m +++ b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNoNotificationsCell.m @@ -37,11 +37,15 @@ - (instancetype)initWithFrame:(CGRect)frame { self.backgroundColor = [UIColor dw_secondaryBackgroundColor]; self.contentView.backgroundColor = self.backgroundColor; + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self.contentView addSubview:contentView]; + UIImage *image = [UIImage imageNamed:@"dp_no_notifications"]; UIImageView *iconImageView = [[UIImageView alloc] initWithImage:image]; iconImageView.translatesAutoresizingMaskIntoConstraints = NO; iconImageView.contentMode = UIViewContentModeScaleAspectFit; - [self.contentView addSubview:iconImageView]; + [contentView addSubview:iconImageView]; UILabel *label = [[UILabel alloc] init]; label.translatesAutoresizingMaskIntoConstraints = NO; @@ -52,30 +56,41 @@ - (instancetype)initWithFrame:(CGRect)frame { label.adjustsFontForContentSizeCategory = YES; label.textColor = [UIColor dw_tertiaryTextColor]; label.text = NSLocalizedString(@"There are no new notifications", nil); - [self.contentView addSubview:label]; + [contentView addSubview:label]; - [iconImageView setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 + [iconImageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; [label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + [iconImageView setContentHuggingPriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [label setContentHuggingPriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; const CGFloat spacing = 30.0; - UILayoutGuide *guide = self.contentView.layoutMarginsGuide; - NSLayoutConstraint *labelIconConstraint = [label.topAnchor constraintGreaterThanOrEqualToAnchor:iconImageView.bottomAnchor - constant:spacing]; - labelIconConstraint.priority = UILayoutPriorityRequired - 2; + NSLayoutConstraint *heightConstraint = [contentView.heightAnchor constraintLessThanOrEqualToConstant:200]; + heightConstraint.priority = UILayoutPriorityRequired - 1; [NSLayoutConstraint activateConstraints:@[ - [iconImageView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor + [contentView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor], + [contentView.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor + constant:16], + [self.contentView.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor], + [self.contentView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:16], + heightConstraint, + + [iconImageView.topAnchor constraintEqualToAnchor:contentView.topAnchor constant:spacing], - [iconImageView.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor], - - labelIconConstraint, - [label.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], - [guide.bottomAnchor constraintEqualToAnchor:label.bottomAnchor - constant:spacing], - [guide.trailingAnchor constraintEqualToAnchor:label.trailingAnchor], + [iconImageView.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor], + + [label.topAnchor constraintEqualToAnchor:iconImageView.bottomAnchor + constant:spacing], + [label.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:label.bottomAnchor + constant:spacing], + [contentView.trailingAnchor constraintEqualToAnchor:label.trailingAnchor], (_contentWidthConstraint = [self.contentView.widthAnchor constraintEqualToConstant:200]), ]]; diff --git a/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.h b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.h new file mode 100644 index 000000000..d3084b874 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.h @@ -0,0 +1,37 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DWNotificationsInvitationCell; + +@protocol DWNotificationsInvitationCellDelegate + +- (void)notificationsInvitationCellCloseAction:(DWNotificationsInvitationCell *)cell; + +@end + +@interface DWNotificationsInvitationCell : UICollectionViewCell + +@property (nonatomic, assign) CGFloat contentWidth; +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.m b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.m new file mode 100644 index 000000000..64c34ac55 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Notifications/Cells/DWNotificationsInvitationCell.m @@ -0,0 +1,124 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWNotificationsInvitationCell.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWNotificationsInvitationCell () + +@property (readonly, nonatomic, strong) NSLayoutConstraint *contentWidthConstraint; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWNotificationsInvitationCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIView *view = [[UIView alloc] init]; + view.translatesAutoresizingMaskIntoConstraints = NO; + view.backgroundColor = [UIColor dw_dashNavigationBlueColor]; + view.layer.cornerRadius = 8; + view.layer.masksToBounds = YES; + [self.contentView addSubview:view]; + + + UIImage *image = [UIImage imageNamed:@"menu_invite"]; + UIImageView *iconImageView = [[UIImageView alloc] initWithImage:image]; + iconImageView.translatesAutoresizingMaskIntoConstraints = NO; + [view addSubview:iconImageView]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.textColor = [UIColor blackColor]; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + titleLabel.text = NSLocalizedString(@"Invite your friends and family to the Dash Network", nil); + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontForContentSizeCategory = YES; + [view addSubview:titleLabel]; + + UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + closeButton.translatesAutoresizingMaskIntoConstraints = NO; + [closeButton setTitle:@"X" forState:UIControlStateNormal]; + closeButton.titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + [closeButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [closeButton addTarget:self + action:@selector(closeButtonAction) + forControlEvents:UIControlEventTouchUpInside]; + [view addSubview:closeButton]; + + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [iconImageView setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisHorizontal]; + [iconImageView setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [view setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + + _contentWidthConstraint = [self.contentView.widthAnchor constraintEqualToConstant:300]; + + UILayoutGuide *guide = self.contentView.layoutMarginsGuide; + [NSLayoutConstraint activateConstraints:@[ + _contentWidthConstraint, + + [view.topAnchor constraintEqualToAnchor:guide.topAnchor], + [view.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor + constant:8], + [guide.trailingAnchor constraintEqualToAnchor:view.trailingAnchor + constant:8], + [guide.bottomAnchor constraintEqualToAnchor:view.bottomAnchor], + + [iconImageView.leadingAnchor constraintEqualToAnchor:view.leadingAnchor + constant:16], + [iconImageView.centerYAnchor constraintEqualToAnchor:view.centerYAnchor], + [iconImageView.topAnchor constraintGreaterThanOrEqualToAnchor:view.topAnchor], + [view.bottomAnchor constraintGreaterThanOrEqualToAnchor:iconImageView.bottomAnchor], + + [titleLabel.leadingAnchor constraintEqualToAnchor:iconImageView.trailingAnchor + constant:12], + [titleLabel.topAnchor constraintEqualToAnchor:view.topAnchor + constant:16], + [view.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:16], + + [closeButton.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:12], + [view.trailingAnchor constraintEqualToAnchor:closeButton.trailingAnchor], + [closeButton.centerYAnchor constraintEqualToAnchor:view.centerYAnchor], + [closeButton.widthAnchor constraintEqualToConstant:44], + [closeButton.heightAnchor constraintEqualToConstant:44], + [closeButton.topAnchor constraintGreaterThanOrEqualToAnchor:view.topAnchor], + [view.bottomAnchor constraintGreaterThanOrEqualToAnchor:closeButton.bottomAnchor], + ]]; + } + return self; +} + +- (void)setContentWidth:(CGFloat)contentWidth { + self.contentWidthConstraint.constant = contentWidth; +} + +- (void)closeButtonAction { + [self.delegate notificationsInvitationCellCloseAction:self]; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Notifications/DWListCollectionLayout.m b/DashWallet/Sources/UI/DashPay/Notifications/DWListCollectionLayout.m index 744d2d247..b27dba19b 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/DWListCollectionLayout.m +++ b/DashWallet/Sources/UI/DashPay/Notifications/DWListCollectionLayout.m @@ -17,17 +17,19 @@ #import "DWListCollectionLayout.h" -static UIEdgeInsets const INSETS = {0.0, 10.0, 0.0, 10.0}; - @implementation DWListCollectionLayout - (instancetype)init { self = [super init]; if (self) { self.scrollDirection = UICollectionViewScrollDirectionVertical; - self.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize; - self.sectionInset = INSETS; - self.sectionHeadersPinToVisibleBounds = YES; + // Using UICollectionViewFlowLayoutAutomaticSize leads to layout issues on reloadData + self.estimatedItemSize = CGSizeMake(320, 150); + self.sectionInset = UIEdgeInsetsZero; + self.minimumInteritemSpacing = 0; + self.minimumLineSpacing = 0; + // disabled due to scrolling issues. needs further investigation + // self.sectionHeadersPinToVisibleBounds = YES; } return self; } diff --git a/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.h b/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.h index d6c92f344..18eb561e7 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.h +++ b/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.h @@ -17,10 +17,21 @@ #import +#import "DWPayModelProtocol.h" +#import "DWTransactionListDataProviderProtocol.h" + NS_ASSUME_NONNULL_BEGIN @interface DWNotificationsViewController : UIViewController +- (instancetype)initWithPayModel:(id)payModel + dataProvider:(id)dataProvider NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.m b/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.m index d669db3bb..83d55531e 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.m +++ b/DashWallet/Sources/UI/DashPay/Notifications/DWNotificationsViewController.m @@ -19,20 +19,32 @@ #import "DWDPBasicCell.h" #import "DWDPNewIncomingRequestItem.h" +#import "DWDashPayConstants.h" +#import "DWEnvironment.h" +#import "DWGlobalOptions.h" #import "DWListCollectionLayout.h" #import "DWNoNotificationsCell.h" +#import "DWNotificationsInvitationCell.h" #import "DWNotificationsModel.h" +#import "DWSendInviteFlowController.h" #import "DWTitleActionHeaderView.h" #import "DWUIKit.h" +#import "DWUserProfileViewController.h" #import "UICollectionView+DWDPItemDequeue.h" NS_ASSUME_NONNULL_BEGIN -@interface DWNotificationsViewController () +static NSString *const NotificationsInvitationMessageHiddenKey = @"NotificationsInvitationMessageHiddenKey"; + +@interface DWNotificationsViewController () + +@property (readonly, nonatomic, strong) id payModel; +@property (readonly, nonatomic, strong) id dataProvider; @property (null_resettable, nonatomic, strong) DWNotificationsModel *model; @property (null_resettable, nonatomic, strong) UICollectionView *collectionView; @property (null_resettable, nonatomic, strong) DWTitleActionHeaderView *measuringHeaderView; +@property (null_resettable, nonatomic, strong) DWNotificationsInvitationCell *measuringInvitationView; @end @@ -40,9 +52,13 @@ @interface DWNotificationsViewController () )payModel + dataProvider:(id)dataProvider { + self = [super initWithNibName:nil bundle:nil]; if (self) { + _payModel = payModel; + _dataProvider = dataProvider; + self.hidesBottomBarWhenPushed = YES; } return self; @@ -52,6 +68,25 @@ - (void)dealloc { DSLog(@"☠️ %@", NSStringFromClass(self.class)); } +- (BOOL)invitationMessageHidden { + if ([DWGlobalOptions sharedInstance].dpInvitationFlowEnabled == NO) { + return YES; + } + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + const uint64_t balanceValue = wallet.balance; + BOOL isEnoughBalance = balanceValue > DWDP_MIN_BALANCE_TO_CREATE_INVITE; + if (!isEnoughBalance) { + return YES; + } + + return [[NSUserDefaults standardUserDefaults] boolForKey:NotificationsInvitationMessageHiddenKey]; +} + +- (void)setInvitationMessageHidden:(BOOL)isHidden { + [[NSUserDefaults standardUserDefaults] setBool:isHidden forKey:NotificationsInvitationMessageHiddenKey]; +} + - (void)viewDidLoad { [super viewDidLoad]; @@ -60,6 +95,19 @@ - (void)viewDidLoad { self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; [self.view addSubview:self.collectionView]; + + [NSLayoutConstraint activateConstraints:@[ + [self.collectionView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], + [self.collectionView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:self.collectionView.trailingAnchor], + [self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:self.collectionView.bottomAnchor], + ]]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + [DWGlobalOptions sharedInstance].shouldShowInvitationsBadge = NO; } - (void)viewWillDisappear:(BOOL)animated { @@ -77,12 +125,20 @@ - (UIStatusBarStyle)preferredStatusBarStyle { #pragma mark - UICollectionViewDataSource - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return 2; + return 3; } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { DWNotificationsData *data = self.model.data; if (section == 0) { + if ([self invitationMessageHidden]) { + return 0; + } + else { + return 1; + } + } + else if (section == 1) { if (data.unreadItems.count == 0) { return 1; // empty state } @@ -90,7 +146,7 @@ - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSe return data.unreadItems.count; } } - else { + else { // 2 return data.oldItems.count; } } @@ -100,7 +156,14 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection NSAssert([layout isKindOfClass:DWListCollectionLayout.class], @"Invalid layout"); const CGFloat contentWidth = layout.contentWidth; - if (indexPath.section == 0 && self.model.data.unreadItems.count == 0) { + if (indexPath.section == 0) { + DWNotificationsInvitationCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:DWNotificationsInvitationCell.dw_reuseIdentifier forIndexPath:indexPath]; + cell.contentWidth = contentWidth; + cell.delegate = self; + return cell; + } + + if (indexPath.section == 1 && self.model.data.unreadItems.count == 0) { DWNoNotificationsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:DWNoNotificationsCell.dw_reuseIdentifier forIndexPath:indexPath]; cell.contentWidth = contentWidth; @@ -110,7 +173,12 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection id item = [self itemAtIndexPath:indexPath]; DWDPBasicCell *cell = [collectionView dw_dequeueReusableCellForItem:item atIndexPath:indexPath]; - cell.displayItemBackgroundView = indexPath.section == 0; + if (indexPath.section == 1) { + cell.backgroundStyle = DWDPBasicCellBackgroundStyle_WhiteOnGray; + } + else { + cell.backgroundStyle = DWDPBasicCellBackgroundStyle_GrayOnGray; + } cell.contentWidth = contentWidth; cell.delegate = self; cell.item = item; @@ -119,10 +187,42 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection #pragma mark - UICollectionViewDelegate +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + [collectionView deselectItemAtIndexPath:indexPath animated:YES]; + + if (indexPath.section == 0) { + DWSendInviteFlowController *controller = [[DWSendInviteFlowController alloc] init]; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; + + return; + } + + DWNotificationsData *data = self.model.data; + if (indexPath.section == 1 && data.unreadItems.count == 0) + { + return; // empty state + } + + id item = [self itemAtIndexPath:indexPath]; + DWUserProfileViewController *profileController = + [[DWUserProfileViewController alloc] initWithItem:item + payModel:self.payModel + dataProvider:self.dataProvider + shouldSkipUpdating:YES + shownAfterPayment:NO]; + [self.navigationController pushViewController:profileController animated:YES]; +} + - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { const NSInteger section = indexPath.section; // hide Earlier section header if it's empty - if (section == 1 && [collectionView numberOfItemsInSection:section] == 0) { + + if (section == 0) { + return [[UICollectionReusableView alloc] init]; + } + + if (section == 2 && [collectionView numberOfItemsInSection:section] == 0) { return [[UICollectionReusableView alloc] init]; } @@ -136,7 +236,7 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView } - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == 0 && self.model.data.unreadItems.count > 0) { // unread items + if (indexPath.section == 1 && self.model.data.unreadItems.count > 0) { // unread items id item = [self itemAtIndexPath:indexPath]; [self.model markNotificationAsRead:item]; } @@ -145,8 +245,12 @@ - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICol #pragma mark - UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { + if (section == 0) { + return CGSizeZero; + } + // hide Earlier section header if it's empty - if (section == 1 && [collectionView numberOfItemsInSection:section] == 0) { + if (section == 2 && [collectionView numberOfItemsInSection:section] == 0) { return CGSizeZero; } @@ -163,6 +267,13 @@ - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection return size; } +#pragma mark - DWSendInviteFlowControllerDelegate + +- (void)sendInviteFlowControllerDidFinish:(DWSendInviteFlowController *)controller { + [controller dismissViewControllerAnimated:YES completion:nil]; +} + + #pragma mark - DWNotificationsModelDelegate - (void)notificationsModelDidUpdate:(DWNotificationsModel *)model { @@ -180,6 +291,14 @@ - (void)declineIncomingRequest:(id)item { [self.model declineContactRequest:item]; } +#pragma mark - DWNotificationsInvitationCellDelegate + +- (void)notificationsInvitationCellCloseAction:(DWNotificationsInvitationCell *)cell { + [self setInvitationMessageHidden:YES]; + + [self.collectionView reloadData]; +} + #pragma mark - Private - (UICollectionView *)collectionView { @@ -188,7 +307,7 @@ - (UICollectionView *)collectionView { UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:UIScreen.mainScreen.bounds collectionViewLayout:layout]; - collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + collectionView.translatesAutoresizingMaskIntoConstraints = NO; collectionView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; collectionView.delegate = self; collectionView.dataSource = self; @@ -199,6 +318,8 @@ - (UICollectionView *)collectionView { [collectionView registerClass:DWTitleActionHeaderView.class forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:DWTitleActionHeaderView.dw_reuseIdentifier]; + [collectionView registerClass:DWNotificationsInvitationCell.class + forCellWithReuseIdentifier:DWNotificationsInvitationCell.dw_reuseIdentifier]; _collectionView = collectionView; } @@ -209,6 +330,7 @@ - (DWNotificationsModel *)model { if (!_model) { _model = [[DWNotificationsModel alloc] init]; _model.delegate = self; + _model.context = self; } return _model; } @@ -223,6 +345,15 @@ - (DWTitleActionHeaderView *)measuringHeaderView { return _measuringHeaderView; } +- (DWNotificationsInvitationCell *)measuringInvitationView { + if (_measuringInvitationView == nil) { + DWNotificationsInvitationCell *view = [[DWNotificationsInvitationCell alloc] initWithFrame:CGRectZero]; + view.translatesAutoresizingMaskIntoConstraints = NO; + _measuringInvitationView = view; + } + return _measuringInvitationView; +} + - (void)updateTitle { const NSUInteger unreadCount = self.model.data.unreadItems.count; NSString *title = NSLocalizedString(@"Notifications", nil); @@ -236,12 +367,12 @@ - (void)updateTitle { - (id)itemAtIndexPath:(NSIndexPath *)indexPath { DWNotificationsData *data = self.model.data; - NSArray> *items = indexPath.section == 0 ? data.unreadItems : data.oldItems; + NSArray> *items = indexPath.section == 1 ? data.unreadItems : data.oldItems; return items[indexPath.row]; } - (NSString *)titleForSection:(NSInteger)section { - if (section == 0) { + if (section == 1) { return NSLocalizedString(@"New", @"(List of) New (notifications)"); } else { diff --git a/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.h b/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.h index 4da483432..5d8c3f3ef 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.h +++ b/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.h @@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN @property (readonly, nonatomic, copy) DWNotificationsData *data; @property (nullable, nonatomic, weak) id delegate; +@property (nullable, nonatomic, weak) UIViewController *context; - (void)acceptContactRequest:(id)item; - (void)declineContactRequest:(id)item; diff --git a/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.m b/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.m index e01dd2424..e45d8575f 100644 --- a/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.m +++ b/DashWallet/Sources/UI/DashPay/Notifications/Models/DWNotificationsModel.m @@ -54,11 +54,11 @@ - (void)dealloc { } - (void)acceptContactRequest:(id)item { - [DWDashPayContactsActions acceptContactRequest:item completion:nil]; + [DWDashPayContactsActions acceptContactRequest:item context:self.context completion:nil]; } - (void)declineContactRequest:(id)item { - [DWDashPayContactsActions declineContactRequest:item completion:nil]; + [DWDashPayContactsActions declineContactRequest:item context:self.context completion:nil]; } - (void)markNotificationAsRead:(id)item { diff --git a/DashWallet/Sources/UI/DashPay/Profile/DWModalUserProfileViewController.m b/DashWallet/Sources/UI/DashPay/Profile/DWModalUserProfileViewController.m index 9e28cf279..558aef636 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/DWModalUserProfileViewController.m +++ b/DashWallet/Sources/UI/DashPay/Profile/DWModalUserProfileViewController.m @@ -19,7 +19,6 @@ #import "DWUserProfileViewController.h" #import "UIViewController+DWEmbedding.h" -#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @@ -38,10 +37,12 @@ - (instancetype)initWithItem:(id)item dataProvider:(id)dataProvider { self = [super initWithNibName:nil bundle:nil]; if (self) { - _profileController = [[DWUserProfileViewController alloc] initWithItem:item - payModel:payModel - dataProvider:dataProvider - shouldSkipUpdating:YES]; + _profileController = + [[DWUserProfileViewController alloc] initWithItem:item + payModel:payModel + dataProvider:dataProvider + shouldSkipUpdating:YES + shownAfterPayment:YES]; } return self; } @@ -59,6 +60,13 @@ - (void)viewDidLoad { [self dw_embedChild:navigationController]; } +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self.profileController.view setNeedsLayout]; + [self.profileController.view layoutIfNeeded]; +} + - (void)cancelButtonAction { [self dismissViewControllerAnimated:YES completion:nil]; } diff --git a/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.h b/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.h index d6bf5e9c9..e33a5300e 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.h +++ b/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.h @@ -30,7 +30,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithItem:(id)item payModel:(id)payModel dataProvider:(id)dataProvider - shouldSkipUpdating:(BOOL)shouldSkipUpdating NS_DESIGNATED_INITIALIZER; + shouldSkipUpdating:(BOOL)shouldSkipUpdating + shownAfterPayment:(BOOL)shownAfterPayment NS_DESIGNATED_INITIALIZER; - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.m b/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.m index 05e9464b2..c2aca9b18 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.m +++ b/DashWallet/Sources/UI/DashPay/Profile/DWUserProfileViewController.m @@ -20,7 +20,10 @@ #import "DWDPBasicCell.h" #import "DWDPTxItem.h" #import "DWFilterHeaderView.h" +#import "DWInfoPopupViewController.h" +#import "DWNetworkErrorViewController.h" #import "DWStretchyHeaderListCollectionLayout.h" +#import "DWTxDetailPopupViewController.h" #import "DWUIKit.h" #import "DWUserProfileContactActionsCell.h" #import "DWUserProfileHeaderView.h" @@ -29,7 +32,6 @@ #import "DWUserProfileSendRequestCell.h" #import "UICollectionView+DWDPItemDequeue.h" #import "UIViewController+DWTxFilter.h" -#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @@ -46,12 +48,17 @@ @interface DWUserProfileViewController () )item payModel:(id)payModel dataProvider:(id)dataProvider { - return [self initWithItem:item payModel:payModel dataProvider:dataProvider shouldSkipUpdating:NO]; + return [self initWithItem:item payModel:payModel dataProvider:dataProvider shouldSkipUpdating:NO shownAfterPayment:NO]; } - (instancetype)initWithItem:(id)item payModel:(id)payModel dataProvider:(id)dataProvider - shouldSkipUpdating:(BOOL)shouldSkipUpdating { + shouldSkipUpdating:(BOOL)shouldSkipUpdating + shownAfterPayment:(BOOL)shownAfterPayment { self = [super initWithNibName:nil bundle:nil]; if (self) { - _model = [[DWUserProfileModel alloc] initWithItem:item txDataProvider:dataProvider]; + _model = [[DWUserProfileModel alloc] initWithItem:item + txDataProvider:dataProvider]; + _model.context = self; _model.delegate = self; + _model.shownAfterPayment = shownAfterPayment; if (shouldSkipUpdating) { [_model skipUpdating]; } @@ -93,12 +104,32 @@ - (void)viewDidLoad { self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; DWUserProfileNavigationTitleView *titleView = [[DWUserProfileNavigationTitleView alloc] initWithFrame:CGRectZero]; - [titleView updateWithUsername:self.model.username]; + [titleView updateWithBlockchainIdentity:self.model.item.blockchainIdentity]; CGSize titleSize = [titleView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; titleView.frame = CGRectMake(0, 0, titleSize.width, titleSize.height); self.navigationItem.titleView = titleView; [self.view addSubview:self.collectionView]; + [NSLayoutConstraint activateConstraints:@[ + [self.collectionView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], + [self.collectionView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.view.trailingAnchor constraintEqualToAnchor:self.collectionView.trailingAnchor], + [self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:self.collectionView.bottomAnchor], + ]]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + CGSize size = self.view.bounds.size; + self.topOverscrollView.frame = CGRectMake(0.0, -size.height, size.width, size.height); +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self.collectionView setNeedsLayout]; + [self.collectionView layoutIfNeeded]; } - (void)viewDidAppear:(BOOL)animated { @@ -119,7 +150,7 @@ - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { if (section == 0) { - const BOOL shouldDisplayActions = [self shouldShowActions]; + const BOOL shouldDisplayActions = [self.model shouldShowActions]; return shouldDisplayActions ? 1 : 0; } else { @@ -144,6 +175,7 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView withReuseIdentifier:DWFilterHeaderView.dw_reuseIdentifier forIndexPath:indexPath]; headerView.padding = FILTER_PADDING; + headerView.infoButton.hidden = (self.model.friendshipStatus == DSBlockchainIdentityFriendshipStatus_Friends); headerView.titleLabel.text = NSLocalizedString(@"Activity", nil); headerView.delegate = self; [headerView.filterButton setTitle:[self titleForFilterButton] forState:UIControlStateNormal]; @@ -157,7 +189,7 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection const CGFloat contentWidth = layout.contentWidth; if (indexPath.section == 0) { - if ([self shouldShowSendRequestAction]) { + if ([self.model shouldShowSendRequestAction]) { DWUserProfileSendRequestCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:DWUserProfileSendRequestCell.dw_reuseIdentifier forIndexPath:indexPath]; @@ -180,7 +212,7 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection DWDPBasicCell *cell = [collectionView dw_dequeueReusableCellForItem:item atIndexPath:indexPath]; cell.contentWidth = contentWidth; cell.itemView.avatarHidden = YES; - cell.displayItemBackgroundView = NO; + cell.backgroundStyle = DWDPBasicCellBackgroundStyle_GrayOnGray; cell.item = item; return cell; } @@ -206,6 +238,43 @@ - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection return size; } +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + DWListCollectionLayout *layout = (DWListCollectionLayout *)collectionView.collectionViewLayout; + NSAssert([layout isKindOfClass:DWListCollectionLayout.class], @"Invalid layout"); + const CGFloat contentWidth = layout.contentWidth; + + UICollectionViewCell *measuringCell = nil; + if (indexPath.section == 0) { + if ([self.model shouldShowSendRequestAction]) { + DWUserProfileSendRequestCell *cell = self.measuringSendCell; + cell.contentWidth = contentWidth; + cell.model = self.model; + measuringCell = cell; + } + DWUserProfileContactActionsCell *cell = self.measuringActionsCell; + cell.contentWidth = contentWidth; + cell.model = self.model; + measuringCell = cell; + } + else { + id item = [self itemAtIndexPath:indexPath]; + + DWDPBasicCell *cell = self.measuringBasicCell; + cell.contentWidth = contentWidth; + cell.itemView.avatarHidden = YES; + cell.backgroundStyle = DWDPBasicCellBackgroundStyle_GrayOnGray; + cell.item = item; + measuringCell = cell; + } + + measuringCell.frame = CGRectMake(0, 0, contentWidth, 300); + CGSize size = [measuringCell systemLayoutSizeFittingSize:CGSizeMake(contentWidth, UILayoutFittingCompressedSize.height) + withHorizontalFittingPriority:UILayoutPriorityRequired + verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; + + return size; +} + #pragma mark - UICollectionViewDelegate - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { @@ -221,12 +290,11 @@ - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPa } DSTransaction *transaction = ((id)item).transaction; - - TxDetailModel *model = [[TxDetailModel alloc] initWithTransaction:transaction]; - TXDetailViewController *controller = [[TXDetailViewController alloc] initWithModel:model]; - - DWNavigationController *nvc = [[DWNavigationController alloc] initWithRootViewController:controller]; - [self presentViewController:nvc animated:YES completion:nil]; + id dataProvider = self.dataProvider; + DWTxDetailPopupViewController *controller = + [[DWTxDetailPopupViewController alloc] initWithTransaction:transaction + dataProvider:dataProvider]; + [self presentViewController:controller animated:YES completion:nil]; } #pragma mark - UIScrollViewDelegate @@ -247,11 +315,21 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView { - (void)userProfileModelDidUpdate:(DWUserProfileModel *)model { [self.collectionView reloadData]; + + if (model.state == DWUserProfileModelState_Error) { + DWNetworkErrorViewController *controller = [[DWNetworkErrorViewController alloc] initWithType:DWErrorDescriptionType_Profile]; + [self presentViewController:controller animated:YES completion:nil]; + } } #pragma mark - DWUserProfileHeaderViewDelegate - (void)userProfileHeaderView:(DWUserProfileHeaderView *)view actionButtonAction:(UIButton *)sender { + if ([self.model shouldShowSendRequestAction]) { + [self sendContactRequest]; + return; + } + const BOOL canPay = self.model.friendshipStatus == DSBlockchainIdentityFriendshipStatus_Incoming || self.model.friendshipStatus == DSBlockchainIdentityFriendshipStatus_Friends; NSParameterAssert(canPay); @@ -263,11 +341,7 @@ - (void)userProfileHeaderView:(DWUserProfileHeaderView *)view actionButtonAction #pragma mark - DWUserProfileSendRequestCellDelegate - (void)userProfileSendRequestCell:(DWUserProfileSendRequestCell *)cell sendRequestButtonAction:(UIButton *)sender { - const BOOL canSendRequest = self.model.friendshipStatus == DSBlockchainIdentityFriendshipStatus_None; - NSParameterAssert(canSendRequest); - if (canSendRequest) { - [self.model sendContactRequest]; - } + [self sendContactRequest]; } #pragma mark - DWUserProfileContactActionsCellDelegate @@ -290,32 +364,39 @@ - (void)filterHeaderView:(DWFilterHeaderView *)view filterButtonAction:(UIView * [self showTxFilterWithSender:sender displayModeProvider:self.model shouldShowRewards:NO]; } -#pragma mark - Private - -- (BOOL)shouldShowActions { - if (self.model.state != DWUserProfileModelState_Done) { - return NO; - } - - const DSBlockchainIdentityFriendshipStatus status = self.model.friendshipStatus; - return (status == DSBlockchainIdentityFriendshipStatus_Incoming || - status == DSBlockchainIdentityFriendshipStatus_None || - status == DSBlockchainIdentityFriendshipStatus_Outgoing); +- (void)filterHeaderView:(DWFilterHeaderView *)view infoButtonAction:(UIView *)sender { + CGPoint offset = [self.view.window convertRect:sender.frame fromView:sender.superview].origin; + DWInfoPopupViewController *controller = + [[DWInfoPopupViewController alloc] initWithText:NSLocalizedString(@"Payments made directly to addresses won’t be retained in activity.", nil) + offset:offset]; + controller.modalPresentationStyle = UIModalPresentationOverCurrentContext; + controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; + [self presentViewController:controller animated:YES completion:nil]; } -- (BOOL)shouldShowSendRequestAction { - NSParameterAssert(self.model.state == DWUserProfileModelState_Done); +#pragma mark - DWTxDetailFullscreenViewControllerDelegate - const DSBlockchainIdentityFriendshipStatus status = self.model.friendshipStatus; - return (status == DSBlockchainIdentityFriendshipStatus_None || - status == DSBlockchainIdentityFriendshipStatus_Outgoing); -} +//TODO: DashPay +//- (void)detailFullscreenViewControllerDidFinish:(DWTxDetailsViewController *)controller { +// if (self.model.shouldAcceptIncomingAfterPayment) { +// [self.model acceptContactRequest]; +// } +// +// [super detailFullscreenViewControllerDidFinish:controller]; +//} -- (BOOL)shouldShowAcceptDeclineRequestAction { - NSParameterAssert(self.model.state == DWUserProfileModelState_Done); +#pragma mark - Private - const DSBlockchainIdentityFriendshipStatus status = self.model.friendshipStatus; - return status == DSBlockchainIdentityFriendshipStatus_Incoming; +- (void)sendContactRequest { + const BOOL canSendRequest = self.model.friendshipStatus == DSBlockchainIdentityFriendshipStatus_None; + if (canSendRequest) { + [self.model sendContactRequest:^(BOOL success) { + if (!success) { + DWNetworkErrorViewController *controller = [[DWNetworkErrorViewController alloc] initWithType:DWErrorDescriptionType_SendContactRequest]; + [self presentViewController:controller animated:YES completion:nil]; + } + }]; + } } - (id)itemAtIndexPath:(NSIndexPath *)indexPath { @@ -327,11 +408,15 @@ - (BOOL)shouldShowAcceptDeclineRequestAction { - (UICollectionView *)collectionView { if (_collectionView == nil) { + UIView *topOverscrollView = [[UIView alloc] initWithFrame:CGRectZero]; + topOverscrollView.backgroundColor = [UIColor dw_backgroundColor]; + _topOverscrollView = topOverscrollView; + DWStretchyHeaderListCollectionLayout *layout = [[DWStretchyHeaderListCollectionLayout alloc] init]; UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:UIScreen.mainScreen.bounds collectionViewLayout:layout]; - collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + collectionView.translatesAutoresizingMaskIntoConstraints = NO; collectionView.dataSource = self; collectionView.delegate = self; collectionView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; @@ -351,6 +436,7 @@ - (UICollectionView *)collectionView { forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:DWFilterHeaderView.dw_reuseIdentifier]; + [collectionView addSubview:topOverscrollView]; _collectionView = collectionView; } return _collectionView; @@ -370,11 +456,31 @@ - (DWFilterHeaderView *)measuringFilterHeaderView { _measuringFilterHeaderView.padding = FILTER_PADDING; _measuringFilterHeaderView.titleLabel.text = NSLocalizedString(@"Activity", nil); } - [_measuringFilterHeaderView.filterButton setTitle:[self titleForFilterButton] - forState:UIControlStateNormal]; + [_measuringFilterHeaderView.filterButton setTitle:[self titleForFilterButton] forState:UIControlStateNormal]; return _measuringFilterHeaderView; } +- (DWUserProfileSendRequestCell *)measuringSendCell { + if (_measuringSendCell == nil) { + _measuringSendCell = [[DWUserProfileSendRequestCell alloc] initWithFrame:CGRectZero]; + } + return _measuringSendCell; +} + +- (DWUserProfileContactActionsCell *)measuringActionsCell { + if (_measuringActionsCell == nil) { + _measuringActionsCell = [[DWUserProfileContactActionsCell alloc] initWithFrame:CGRectZero]; + } + return _measuringActionsCell; +} + +- (DWDPBasicCell *)measuringBasicCell { + if (_measuringBasicCell == nil) { + _measuringBasicCell = [[DWDPBasicCell alloc] initWithFrame:CGRectZero]; + } + return _measuringBasicCell; +} + - (NSString *)titleForFilterButton { switch (self.model.displayMode) { case DWHomeTxDisplayMode_All: diff --git a/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.h b/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.h index 3153204a1..235e55638 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.h +++ b/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.h @@ -50,14 +50,24 @@ typedef NS_ENUM(NSInteger, DWUserProfileModelState) { @property (readonly, nonatomic, copy) NSString *username; @property (readonly, nonatomic, assign) DSBlockchainIdentityFriendshipStatus friendshipStatus; @property (readonly, nonatomic, strong) id dataSource; -@property (readonly, nonatomic, assign) DWUserProfileModelState requestState; +@property (readonly, nonatomic, assign) DWUserProfileModelState sendRequestState; +@property (readonly, nonatomic, assign) DWUserProfileModelState acceptRequestState; +@property (readonly, nonatomic, assign) BOOL shouldAcceptIncomingAfterPayment; @property (nullable, nonatomic, weak) id delegate; +@property (nonatomic, assign) BOOL shownAfterPayment; + +@property (nullable, nonatomic, weak) UIViewController *context; + +- (BOOL)shouldShowActions; +- (BOOL)shouldShowSendRequestAction; +- (BOOL)shouldShowAcceptDeclineRequestAction; + - (void)skipUpdating; - (void)update; -- (void)sendContactRequest; +- (void)sendContactRequest:(void (^)(BOOL success))completion; - (void)acceptContactRequest; - (instancetype)initWithItem:(id)item diff --git a/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.m b/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.m index 7eb7f599a..300e56dae 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Model/DWUserProfileModel.m @@ -20,8 +20,10 @@ #import "DWDashPayContactsActions.h" #import "DWDashPayContactsUpdater.h" #import "DWEnvironment.h" +#import "DWGlobalOptions.h" #import "DWProfileTxsFetchedDataSource.h" #import "DWUserProfileDataSourceObject.h" +#import "DWDashPayConstants.h" NS_ASSUME_NONNULL_BEGIN @@ -58,6 +60,10 @@ - (instancetype)initWithItem:(id)item return self; } +- (BOOL)shouldAcceptIncomingAfterPayment { + return ([DWGlobalOptions sharedInstance].confirmationAcceptContactRequestIsOn && [self friendshipStatusInternal] == DSBlockchainIdentityFriendshipStatus_Incoming); +} + - (void)setDisplayMode:(DWHomeTxDisplayMode)displayMode { _displayMode = displayMode; @@ -66,7 +72,14 @@ - (void)setDisplayMode:(DWHomeTxDisplayMode)displayMode { - (void)skipUpdating { [self updateDataSource]; - self.state = DWUserProfileModelState_Done; + + + if (self.shownAfterPayment && self.shouldAcceptIncomingAfterPayment) { + [self acceptContactRequest]; + } + else { + self.state = DWUserProfileModelState_Done; + } } - (void)setState:(DWUserProfileModelState)state { @@ -75,8 +88,14 @@ - (void)setState:(DWUserProfileModelState)state { [self.delegate userProfileModelDidUpdate:self]; } -- (void)setRequestState:(DWUserProfileModelState)requestState { - _requestState = requestState; +- (void)setSendRequestState:(DWUserProfileModelState)sendRequestState { + _sendRequestState = sendRequestState; + + [self.delegate userProfileModelDidUpdate:self]; +} + +- (void)setAcceptRequestState:(DWUserProfileModelState)acceptRequestState { + _acceptRequestState = acceptRequestState; [self.delegate userProfileModelDidUpdate:self]; } @@ -105,14 +124,58 @@ - (DSBlockchainIdentityFriendshipStatus)friendshipStatus { return DSBlockchainIdentityFriendshipStatus_Unknown; } - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; - DSBlockchainIdentity *blockchainIdentity = self.item.blockchainIdentity; - return [myBlockchainIdentity friendshipStatusForRelationshipWithBlockchainIdentity:blockchainIdentity]; + return [self friendshipStatusInternal]; } -- (void)sendContactRequest { - self.requestState = DWUserProfileModelState_Loading; +- (BOOL)shouldShowActions { + if (self.state != DWUserProfileModelState_Done) { + return NO; + } + + const DSBlockchainIdentityFriendshipStatus status = self.friendshipStatus; + return (status == DSBlockchainIdentityFriendshipStatus_Incoming || + status == DSBlockchainIdentityFriendshipStatus_None || + status == DSBlockchainIdentityFriendshipStatus_Outgoing); +} + +- (BOOL)shouldShowSendRequestAction { + NSParameterAssert(self.state == DWUserProfileModelState_Done); + + const DSBlockchainIdentityFriendshipStatus status = self.friendshipStatus; + return (status == DSBlockchainIdentityFriendshipStatus_None || + status == DSBlockchainIdentityFriendshipStatus_Outgoing); +} + +- (BOOL)shouldShowAcceptDeclineRequestAction { + NSParameterAssert(self.state == DWUserProfileModelState_Done); + + const DSBlockchainIdentityFriendshipStatus status = self.friendshipStatus; + return status == DSBlockchainIdentityFriendshipStatus_Incoming; +} + +- (void)sendContactRequest:(void (^)(BOOL success))completion { + if (MOCK_DASHPAY) { + self.sendRequestState = DWUserProfileModelState_Loading; + + NSManagedObjectContext *context = [NSManagedObjectContext viewContext]; + DSDashpayUserEntity *contact = [DSDashpayUserEntity managedObjectInBlockedContext:context]; + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + contact.chain = [wallet.chain chainEntityInContext:context]; + DSBlockchainIdentity *identity = [wallet createBlockchainIdentityForUsername:_item.username]; + DSBlockchainIdentityUsernameEntity *username = [DSBlockchainIdentityUsernameEntity managedObjectInBlockedContext:context]; + username.stringValue = _item.username; + DSBlockchainIdentityEntity *entity = [DSBlockchainIdentityEntity managedObjectInBlockedContext:context]; + entity.uniqueID = [_item.username dataUsingEncoding:NSUTF8StringEncoding]; + username.blockchainIdentity = entity; + entity.dashpayUsername = username; + contact.associatedBlockchainIdentity = entity; + NSError *error = [contact applyTransientDashpayUser:identity.transientDashpayUser save:YES]; + + completion(YES); + return; + } + + self.sendRequestState = DWUserProfileModelState_Loading; DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; @@ -125,15 +188,20 @@ - (void)sendContactRequest { } [strongSelf updateDataSource]; - strongSelf.requestState = success ? DWUserProfileModelState_Done : DWUserProfileModelState_Error; + strongSelf.sendRequestState = success ? DWUserProfileModelState_Done : DWUserProfileModelState_Error; + + if (completion) { + completion(success); + } }]; } - (void)acceptContactRequest { - self.requestState = DWUserProfileModelState_Loading; + self.acceptRequestState = DWUserProfileModelState_Loading; __weak typeof(self) weakSelf = self; [DWDashPayContactsActions acceptContactRequest:self.item + context:self.context completion:^(BOOL success, NSArray *_Nonnull errors) { __strong typeof(weakSelf) strongSelf = weakSelf; if (!strongSelf) { @@ -141,7 +209,7 @@ - (void)acceptContactRequest { } [strongSelf updateDataSource]; - strongSelf.requestState = success ? DWUserProfileModelState_Done : DWUserProfileModelState_Error; + strongSelf.acceptRequestState = success ? DWUserProfileModelState_Done : DWUserProfileModelState_Error; }]; } @@ -175,31 +243,61 @@ - (void)transactionManagerTransactionStatusDidChangeNotification { #pragma mark - Private +- (DSBlockchainIdentityFriendshipStatus)friendshipStatusInternal { + if (MOCK_DASHPAY) { + if (uint256_is_zero(self.item.blockchainIdentity.uniqueID)) { + // From search + return DSBlockchainIdentityFriendshipStatus_None; + } else { + // From mocked contacts + return DSBlockchainIdentityFriendshipStatus_Friends; + } + } + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + DSBlockchainIdentity *blockchainIdentity = self.item.blockchainIdentity; + return [myBlockchainIdentity friendshipStatusForRelationshipWithBlockchainIdentity:blockchainIdentity]; +} + - (void)updateDataSource { NSManagedObjectContext *context = [NSManagedObjectContext viewContext]; DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; - if (myBlockchainIdentity == nil) { - return; - } - DSBlockchainIdentity *friendBlockchainIdentity = self.item.blockchainIdentity; - NSAssert(myBlockchainIdentity.matchingDashpayUserInViewContext, @"Invalid DSBlockchainIdentity: myBlockchainIdentity"); - DSDashpayUserEntity *me = [myBlockchainIdentity matchingDashpayUserInContext:context]; DSDashpayUserEntity *friend = nil; - if (friendBlockchainIdentity.matchingDashpayUserInViewContext) { - friend = [friendBlockchainIdentity matchingDashpayUserInContext:context]; - } - DSFriendRequestEntity *meToFriend = nil; - if (friend != nil) { - meToFriend = [[me.outgoingRequests filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"destinationContact == %@", friend]] anyObject]; - } - DSFriendRequestEntity *friendToMe = nil; - if (friend != nil) { - friendToMe = [[me.incomingRequests filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"sourceContact == %@", friend]] anyObject]; + + if (MOCK_DASHPAY) { + meToFriend = self.item.friendRequestToPay; + friendBlockchainIdentity = [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:self.item.username]; + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + myBlockchainIdentity = [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } else { + if (myBlockchainIdentity == nil) { + return; + } + + NSAssert(myBlockchainIdentity.matchingDashpayUserInViewContext, @"Invalid DSBlockchainIdentity: myBlockchainIdentity"); + DSDashpayUserEntity *me = [myBlockchainIdentity matchingDashpayUserInContext:context]; + + if (friendBlockchainIdentity.matchingDashpayUserInViewContext) { + friend = [friendBlockchainIdentity matchingDashpayUserInContext:context]; + } + + + if (friend != nil) { + meToFriend = [[me.outgoingRequests filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"destinationContact == %@", friend]] anyObject]; + } + + if (friend != nil) { + friendToMe = [[me.incomingRequests filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"sourceContact == %@", friend]] anyObject]; + } } BOOL shouldShowContactRequests = YES; diff --git a/DashWallet/Sources/UI/DashPay/Profile/Model/DataSource/DWUserProfileDataSourceObject.m b/DashWallet/Sources/UI/DashPay/Profile/Model/DataSource/DWUserProfileDataSourceObject.m index 021e4251d..271e29aef 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Model/DataSource/DWUserProfileDataSourceObject.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Model/DataSource/DWUserProfileDataSourceObject.m @@ -57,6 +57,11 @@ - (instancetype)initWithTxFRC:(NSFetchedResultsController *)frc _friendBlockchainIdentity = friendBlockchainIdentity; _items = [NSMutableArray array]; _hasDataToShow = (frc != nil) || (friendToMe != nil) || (meToFriend != nil); + + if (MOCK_DASHPAY) { + _hasDataToShow = YES; + _incomingNotification = [[DWDPAcceptedRequestNotificationObject alloc] initWithBlockchainIdentity:friendBlockchainIdentity]; + } BOOL isFriendInitiated; if (friendToMe && meToFriend) { @@ -75,7 +80,7 @@ - (instancetype)initWithTxFRC:(NSFetchedResultsController *)frc blockchainIdentity:friendBlockchainIdentity isInitiatedByThem:isFriendInitiated]; } - else { + else if (!MOCK_DASHPAY) { // mark it as added to the list to skip _incomingNotificationAdded = YES; } @@ -83,7 +88,7 @@ - (instancetype)initWithTxFRC:(NSFetchedResultsController *)frc if (meToFriend) { _outgoingNotification = [[DWDPOutgoingRequestNotificationObject alloc] initWithFriendRequestEntity:meToFriend - blockchainIdentity:myBlockchainIdentity + blockchainIdentity:friendBlockchainIdentity isInitiatedByMe:!isFriendInitiated]; } else { @@ -138,15 +143,32 @@ - (NSUInteger)count { NSAssert(item >= 0, @"Inconsistent data source state: item index is out of bounds"); const NSUInteger count = self.frc.sections.firstObject.numberOfObjects; - if (item < count) { + if (item < count || MOCK_DASHPAY) { NSIndexPath *txIndexPath = [NSIndexPath indexPathForItem:item inSection:0]; DSTxOutputEntity *txOutputEntity = [self.frc objectAtIndexPath:txIndexPath]; DSTransaction *transaction = [txOutputEntity.transaction transaction]; - NSDate *txDate = transaction.date; - + + if (MOCK_DASHPAY) { + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + NSString *address = @"yeRZBWYfeNE4yVUHV4ZLs83Ppn9aMRH57A"; // Testnet faucet address, used as a mocked address for a contact + + for (DSTransaction *tx in wallet.allTransactions) { + if ([tx.outputAddresses containsObject:address]) { + transaction = tx; + break; + } + } + } + + NSDate *txDate = [transaction date]; + + if (MOCK_DASHPAY && transaction == nil) { + txDate = [NSDate date]; + } + DWDPTxObject *txObject = [[DWDPTxObject alloc] initWithTransaction:transaction dataProvider:self.txDataProvider - username:self.friendBlockchainIdentity.currentDashpayUsername]; + blockchainIdentity:self.friendBlockchainIdentity]; if (self.incomingNotificationAdded == NO && [self isNotificationNewerThan:self.incomingNotification txDate:txDate]) { [self.items addObject:self.incomingNotification]; diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.h b/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.h new file mode 100644 index 000000000..341891c73 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPendingContactInfoView : UIView + +- (void)setAsSendingRequest; +- (void)setAsPendingRequest; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.m new file mode 100644 index 000000000..a651b65e7 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWPendingContactInfoView.m @@ -0,0 +1,111 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPendingContactInfoView.h" + +#import "DWHourGlassAnimationView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPendingContactInfoView () + +@property (readonly, nonatomic, strong) DWHourGlassAnimationView *animationView; +@property (readonly, nonatomic, strong) UIImageView *iconImageView; +@property (readonly, nonatomic, strong) UILabel *titleLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWPendingContactInfoView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_disabledButtonColor]; + + self.layer.masksToBounds = YES; + self.layer.cornerRadius = 8; + + DWHourGlassAnimationView *animationView = [[DWHourGlassAnimationView alloc] initWithFrame:CGRectZero]; + animationView.translatesAutoresizingMaskIntoConstraints = NO; + _animationView = animationView; + + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dp_pending_contact"]]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + imageView.contentMode = UIViewContentModeCenter; + _iconImageView = imageView; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.numberOfLines = 0; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.adjustsFontForContentSizeCategory = YES; + _titleLabel = titleLabel; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:animationView]; + [contentView addSubview:imageView]; + [contentView addSubview:titleLabel]; + [self addSubview:contentView]; + + [NSLayoutConstraint activateConstraints:@[ + [contentView.topAnchor constraintEqualToAnchor:self.topAnchor], + [contentView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], + [contentView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + [contentView.leadingAnchor constraintGreaterThanOrEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintGreaterThanOrEqualToAnchor:contentView.trailingAnchor], + + [animationView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [animationView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [imageView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor], + [imageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor], + [titleLabel.leadingAnchor constraintEqualToAnchor:animationView.trailingAnchor + constant:15.0], + [titleLabel.leadingAnchor constraintEqualToAnchor:imageView.trailingAnchor + constant:15.0], + [contentView.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor], + [contentView.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + ]]; + } + return self; +} + +- (void)setAsSendingRequest { + self.iconImageView.hidden = YES; + + self.animationView.hidden = NO; + [self.animationView startAnimating]; + + self.titleLabel.text = NSLocalizedString(@"Sending Contact Request", nil); +} + +- (void)setAsPendingRequest { + self.animationView.hidden = YES; + [self.animationView stopAnimating]; + + self.iconImageView.hidden = NO; + + self.titleLabel.text = NSLocalizedString(@"Contact Request Pending", nil); +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWStretchyHeaderListCollectionLayout.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWStretchyHeaderListCollectionLayout.m index 8376d89bd..78ae2166e 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWStretchyHeaderListCollectionLayout.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWStretchyHeaderListCollectionLayout.m @@ -19,50 +19,52 @@ @implementation DWStretchyHeaderListCollectionLayout -- (NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect { - NSArray *layoutAttributes = [[super layoutAttributesForElementsInRect:rect] copy]; +// disabled due to performance issues and more smart stretching - for (UICollectionViewLayoutAttributes *attributes in layoutAttributes) { - if ([attributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader] && - attributes.indexPath.section == 0) { - UICollectionView *collectionView = self.collectionView; - const CGFloat contentOffsetY = collectionView.contentOffset.y; - if (collectionView != nil && contentOffsetY < 0) { - const CGFloat width = CGRectGetWidth(collectionView.bounds); - const CGFloat height = CGRectGetHeight(attributes.frame) - contentOffsetY; - attributes.frame = CGRectMake(0, contentOffsetY, width, height); - } - } - } - - return layoutAttributes; -} - -- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath { - UICollectionViewLayoutAttributes *superAttributes = [super layoutAttributesForSupplementaryViewOfKind:elementKind atIndexPath:indexPath]; - if ([superAttributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader] && - superAttributes.indexPath.section == 0) { - UICollectionViewLayoutAttributes *attributes = [superAttributes copy]; - UICollectionView *collectionView = self.collectionView; - const CGFloat contentOffsetY = collectionView.contentOffset.y; - if (collectionView != nil && contentOffsetY < 0) { - const CGFloat width = CGRectGetWidth(collectionView.bounds); - const CGFloat height = CGRectGetHeight(attributes.frame) - contentOffsetY; - attributes.frame = CGRectMake(0, contentOffsetY, width, height); - } - return attributes; - } - else { - return superAttributes; - } -} - -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { - const CGRect oldBounds = self.collectionView.bounds; - if (newBounds.origin.y <= 0 || CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { - return YES; - } - return NO; -} +//- (NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect { +// NSArray *layoutAttributes = [[super layoutAttributesForElementsInRect:rect] copy]; +// +// for (UICollectionViewLayoutAttributes *attributes in layoutAttributes) { +// if ([attributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader] && +// attributes.indexPath.section == 0) { +// UICollectionView *collectionView = self.collectionView; +// const CGFloat contentOffsetY = collectionView.contentOffset.y; +// if (collectionView != nil && contentOffsetY < 0) { +// const CGFloat width = CGRectGetWidth(collectionView.bounds); +// const CGFloat height = CGRectGetHeight(attributes.frame) - contentOffsetY; +// attributes.frame = CGRectMake(0, contentOffsetY, width, height); +// } +// } +// } +// +// return layoutAttributes; +//} +// +//- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath { +// UICollectionViewLayoutAttributes *superAttributes = [super layoutAttributesForSupplementaryViewOfKind:elementKind atIndexPath:indexPath]; +// if ([superAttributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader] && +// superAttributes.indexPath.section == 0) { +// UICollectionViewLayoutAttributes *attributes = [superAttributes copy]; +// UICollectionView *collectionView = self.collectionView; +// const CGFloat contentOffsetY = collectionView.contentOffset.y; +// if (collectionView != nil && contentOffsetY < 0) { +// const CGFloat width = CGRectGetWidth(collectionView.bounds); +// const CGFloat height = CGRectGetHeight(attributes.frame) - contentOffsetY; +// attributes.frame = CGRectMake(0, contentOffsetY, width, height); +// } +// return attributes; +// } +// else { +// return superAttributes; +// } +//} +// +//- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { +// const CGRect oldBounds = self.collectionView.bounds; +// if (newBounds.origin.y <= 0 || CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { +// return YES; +// } +// return NO; +//} @end diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileContactActionsCell.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileContactActionsCell.m index c4906b758..74a02dee3 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileContactActionsCell.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileContactActionsCell.m @@ -73,7 +73,7 @@ - (instancetype)initWithFrame:(CGRect)frame { [mainButton addTarget:self action:@selector(secondaryButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _secondaryButton = secondaryButton; - UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; activityIndicatorView.color = [UIColor dw_dashBlueColor]; activityIndicatorView.hidesWhenStopped = NO; @@ -99,7 +99,10 @@ - (instancetype)initWithFrame:(CGRect)frame { UILayoutGuide *guide = self.contentView.layoutMarginsGuide; - [titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + [titleLabel setContentHuggingPriority:UILayoutPriorityRequired - 1 + forAxis:UILayoutConstraintAxisVertical]; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 + forAxis:UILayoutConstraintAxisVertical]; [NSLayoutConstraint activateConstraints:@[ [contentView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor], @@ -117,6 +120,7 @@ - (instancetype)initWithFrame:(CGRect)frame { [stackView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], [guide.trailingAnchor constraintEqualToAnchor:stackView.trailingAnchor], + [actionsStackView.heightAnchor constraintEqualToConstant:BUTTON_HEIGHT], [mainButton.heightAnchor constraintEqualToConstant:BUTTON_HEIGHT], [secondaryButton.heightAnchor constraintEqualToConstant:BUTTON_HEIGHT], @@ -139,6 +143,7 @@ - (CGFloat)contentWidth { - (void)setContentWidth:(CGFloat)contentWidth { self.contentWidthConstraint.constant = contentWidth; + [self invalidateIntrinsicContentSize]; } - (void)setModel:(DWUserProfileModel *)model { @@ -146,7 +151,9 @@ - (void)setModel:(DWUserProfileModel *)model { [self configureForIncomingStatus]; - [self updateState:self.model.requestState]; + [self updateState:self.model.acceptRequestState]; + + [self invalidateIntrinsicContentSize]; } - (void)prepareForReuse { @@ -160,7 +167,7 @@ - (void)prepareForReuse { - (void)configureForIncomingStatus { NSMutableAttributedString *mutableTitle = [[NSMutableAttributedString alloc] init]; - NSAttributedString *username = [[NSAttributedString alloc] initWithString:self.model.username + NSAttributedString *username = [[NSAttributedString alloc] initWithString:self.model.username ? self.model.username : @"" attributes:@{ NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline], }]; diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileHeaderView.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileHeaderView.m index 08dd5b584..cd737dc47 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileHeaderView.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileHeaderView.m @@ -19,6 +19,7 @@ #import "dashwallet-Swift.h" #import "DWDPAvatarView.h" +#import "DWPendingContactInfoView.h" #import "DWUIKit.h" #import "DWUserProfileModel.h" @@ -33,7 +34,7 @@ @interface DWUserProfileHeaderView () @property (readonly, nonatomic, strong) DWDPAvatarView *avatarView; @property (readonly, nonatomic, strong) UILabel *detailsLabel; @property (readonly, nonatomic, strong) UIView *bottomContentView; -@property (readonly, nonatomic, strong) UILabel *pendingLabel; +@property (readonly, nonatomic, strong) DWPendingContactInfoView *pendingView; @property (readonly, nonatomic, strong) DWActionButton *actionButton; @property (readonly, nonatomic, strong) UIActivityIndicatorView *activityIndicatorView; @@ -102,15 +103,11 @@ - (instancetype)initWithFrame:(CGRect)frame { #endif /* DEBUG */ [bottomContentView addSubview:bottomGrayView]; - UILabel *pendingLabel = [[UILabel alloc] init]; - pendingLabel.translatesAutoresizingMaskIntoConstraints = NO; - pendingLabel.attributedText = [self.class pendingInfo]; - pendingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; - pendingLabel.textAlignment = NSTextAlignmentCenter; - pendingLabel.textColor = [UIColor dw_orangeColor]; - _pendingLabel = pendingLabel; + DWPendingContactInfoView *pendingView = [[DWPendingContactInfoView alloc] init]; + pendingView.translatesAutoresizingMaskIntoConstraints = NO; + _pendingView = pendingView; - UIStackView *pendingStackView = [[UIStackView alloc] initWithArrangedSubviews:@[ pendingLabel ]]; + UIStackView *pendingStackView = [[UIStackView alloc] initWithArrangedSubviews:@[ pendingView ]]; pendingStackView.translatesAutoresizingMaskIntoConstraints = NO; pendingStackView.axis = UILayoutConstraintAxisVertical; [bottomContentView addSubview:pendingStackView]; @@ -122,7 +119,7 @@ - (instancetype)initWithFrame:(CGRect)frame { [bottomContentView addSubview:actionButton]; _actionButton = actionButton; - UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleLarge]; + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; activityIndicatorView.color = [UIColor dw_dashBlueColor]; [bottomContentView addSubview:activityIndicatorView]; @@ -169,14 +166,12 @@ - (instancetype)initWithFrame:(CGRect)frame { [bottomContentView.trailingAnchor constraintEqualToAnchor:bottomGrayView.trailingAnchor], [bottomContentView.bottomAnchor constraintEqualToAnchor:bottomGrayView.bottomAnchor], - [pendingStackView.topAnchor constraintEqualToAnchor:bottomContentView.topAnchor], - [pendingStackView.leadingAnchor constraintEqualToAnchor:bottomContentView.leadingAnchor - constant:buttonPadding], - [bottomContentView.trailingAnchor constraintEqualToAnchor:pendingStackView.trailingAnchor - constant:buttonPadding], + [pendingStackView.topAnchor constraintEqualToAnchor:actionButton.topAnchor], + [pendingStackView.leadingAnchor constraintEqualToAnchor:actionButton.leadingAnchor], + [pendingStackView.trailingAnchor constraintEqualToAnchor:actionButton.trailingAnchor], + [pendingStackView.bottomAnchor constraintEqualToAnchor:actionButton.bottomAnchor], - [actionButton.topAnchor constraintEqualToAnchor:pendingStackView.bottomAnchor - constant:spacing], + [actionButton.topAnchor constraintEqualToAnchor:bottomContentView.topAnchor], [actionButton.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor constant:buttonPadding], [guide.trailingAnchor constraintEqualToAnchor:actionButton.trailingAnchor @@ -194,9 +189,16 @@ - (instancetype)initWithFrame:(CGRect)frame { [self updateState:self.model.state]; }]; - [self mvvm_observe:DW_KEYPATH(self, model.requestState) + [self mvvm_observe:DW_KEYPATH(self, model.sendRequestState) with:^(typeof(self) self, id value) { - if (self.model.requestState == DWUserProfileModelState_Done) { + if (self.model.state == DWUserProfileModelState_Done) { + [self updateSendRequestState:self.model.sendRequestState]; + } + }]; + + [self mvvm_observe:DW_KEYPATH(self, model.acceptRequestState) + with:^(typeof(self) self, id value) { + if (self.model.acceptRequestState == DWUserProfileModelState_Done) { [self updateActions]; } }]; @@ -207,13 +209,14 @@ - (instancetype)initWithFrame:(CGRect)frame { - (void)setModel:(DWUserProfileModel *)model { _model = model; - [self updateUsername:model.username]; + [self updateBlockchainIdentity:model.item.blockchainIdentity]; } - (void)setScrollingPercent:(float)percent { if (percent < 0) { // stretching - const CGFloat scale = MIN(1.5, 1.0 + ABS(percent)); - self.centerContentView.transform = CGAffineTransformMakeScale(scale, scale); + const CGFloat scale = MIN(1.4, 1.0 + ABS(percent)); + const CGFloat translation = MIN(ABS(percent) * 70, 25); + self.centerContentView.transform = CGAffineTransformTranslate(CGAffineTransformMakeScale(scale, scale), 0, translation); self.centerContentView.alpha = 1.0; } else { @@ -238,7 +241,7 @@ - (void)updateState:(DWUserProfileModelState)state { switch (state) { case DWUserProfileModelState_None: self.actionButton.hidden = YES; - self.pendingLabel.hidden = YES; + self.pendingView.hidden = YES; [self.activityIndicatorView stopAnimating]; break; @@ -249,7 +252,7 @@ - (void)updateState:(DWUserProfileModelState)state { break; case DWUserProfileModelState_Loading: self.actionButton.hidden = YES; - self.pendingLabel.hidden = YES; + self.pendingView.hidden = YES; [self.activityIndicatorView startAnimating]; break; @@ -260,9 +263,61 @@ - (void)updateState:(DWUserProfileModelState)state { } } -- (void)updateUsername:(NSString *)username { - self.detailsLabel.text = username; - self.avatarView.username = username; +- (void)updateSendRequestState:(DWUserProfileModelState)state { + switch (state) { + case DWUserProfileModelState_None: + [self updateActions]; + + break; + case DWUserProfileModelState_Error: + [self updateActions]; + + break; + case DWUserProfileModelState_Loading: + [self.activityIndicatorView stopAnimating]; + + self.actionButton.hidden = YES; + self.pendingView.hidden = NO; + [self.pendingView setAsSendingRequest]; + + break; + case DWUserProfileModelState_Done: + [self updateActions]; + + break; + } +} + +- (void)updateBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; + [result beginEditing]; + + BOOL hasDisplayName = blockchainIdentity.displayName.length > 0; + NSString *title = hasDisplayName ? blockchainIdentity.displayName : blockchainIdentity.currentDashpayUsername; + + NSAttributedString *titleString = [[NSAttributedString alloc] + initWithString:title ? title : @"" + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline], + NSForegroundColorAttributeName : [UIColor dw_darkTitleColor], + }]; + [result appendAttributedString:titleString]; + + if (hasDisplayName) { + NSString *subtitle = [NSString stringWithFormat:@"\n%@", blockchainIdentity.currentDashpayUsername]; + NSAttributedString *subtitleString = [[NSAttributedString alloc] + initWithString:subtitle + attributes:@{ + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote], + NSForegroundColorAttributeName : [UIColor dw_tertiaryTextColor], + }]; + [result appendAttributedString:subtitleString]; + } + + [result endEditing]; + + self.detailsLabel.attributedText = result; + self.avatarView.blockchainIdentity = blockchainIdentity; [self setScrollingPercent:0.0]; } @@ -271,20 +326,30 @@ - (void)updateActions { const DSBlockchainIdentityFriendshipStatus friendshipStatus = self.model.friendshipStatus; switch (friendshipStatus) { case DSBlockchainIdentityFriendshipStatus_Unknown: - case DSBlockchainIdentityFriendshipStatus_None: self.actionButton.hidden = YES; - self.pendingLabel.hidden = YES; + self.pendingView.hidden = YES; + + break; + case DSBlockchainIdentityFriendshipStatus_None: + self.actionButton.hidden = NO; + self.pendingView.hidden = YES; + + [self.actionButton setImage:[UIImage imageNamed:@"dp_send_request"] forState:UIControlStateNormal]; + [self.actionButton setTitle:NSLocalizedString(@"Send Contact Request", nil) forState:UIControlStateNormal]; break; case DSBlockchainIdentityFriendshipStatus_Outgoing: self.actionButton.hidden = YES; - self.pendingLabel.hidden = NO; + self.pendingView.hidden = NO; + [self.pendingView setAsPendingRequest]; break; case DSBlockchainIdentityFriendshipStatus_Incoming: case DSBlockchainIdentityFriendshipStatus_Friends: self.actionButton.hidden = NO; - self.pendingLabel.hidden = YES; + self.pendingView.hidden = YES; + + [self.actionButton setTitle:NSLocalizedString(@"Pay", nil) forState:UIControlStateNormal]; break; } @@ -294,21 +359,4 @@ - (void)actionButtonAction:(UIButton *)sender { [self.delegate userProfileHeaderView:self actionButtonAction:sender]; } -+ (NSAttributedString *)pendingInfo { - NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; - - UIImage *image = [UIImage imageNamed:@"dp_pending_contact"]; - NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; - textAttachment.image = image; - textAttachment.bounds = CGRectMake(-3.0, -2.0, image.size.width, image.size.height); - - [result beginEditing]; - [result appendAttributedString:[NSAttributedString attributedStringWithAttachment:textAttachment]]; - [result appendAttributedString:[[NSAttributedString alloc] initWithString:@" "]]; - [result appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedString(@"Contact Request Pending", nil)]]; - [result endEditing]; - - return [result copy]; -} - @end diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.h b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.h index fb2767948..cedb5c8f1 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.h +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.h @@ -19,9 +19,11 @@ NS_ASSUME_NONNULL_BEGIN +@class DSBlockchainIdentity; + @interface DWUserProfileNavigationTitleView : UIView -- (void)updateWithUsername:(NSString *)username; +- (void)updateWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity; - (void)setScrollingPercent:(float)percent; - (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.m index 2339343d3..144fd53cb 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileNavigationTitleView.m @@ -20,6 +20,8 @@ #import "DWDPAvatarView.h" #import "DWUIKit.h" +#import + NS_ASSUME_NONNULL_BEGIN static CGFloat const AVATAR_SIZE = 28.0; @@ -81,9 +83,9 @@ - (CGSize)intrinsicContentSize { return CGSizeMake(UIViewNoIntrinsicMetric, VIEW_HEIGHT); } -- (void)updateWithUsername:(NSString *)username { - self.titleLabel.text = username; - self.avatarView.username = username; +- (void)updateWithBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + self.titleLabel.text = blockchainIdentity.currentDashpayUsername; + self.avatarView.blockchainIdentity = blockchainIdentity; [self setScrollingPercent:0.0]; } diff --git a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileSendRequestCell.m b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileSendRequestCell.m index 6b6662999..61e6cadc9 100644 --- a/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileSendRequestCell.m +++ b/DashWallet/Sources/UI/DashPay/Profile/Views/DWUserProfileSendRequestCell.m @@ -18,7 +18,6 @@ #import "DWUserProfileSendRequestCell.h" #import "dashwallet-Swift.h" -#import "DWShadowView.h" #import "DWUIKit.h" #import "DWUserProfileModel.h" @@ -75,7 +74,7 @@ - (instancetype)initWithFrame:(CGRect)frame { _sendRequestButton = sendRequestButton; // fire up activity indicator in advance to fix reuse issue - UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; activityIndicatorView.color = [UIColor dw_dashBlueColor]; [activityIndicatorView startAnimating]; @@ -104,8 +103,10 @@ - (instancetype)initWithFrame:(CGRect)frame { [NSLayoutConstraint activateConstraints:@[ [shadowView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:verticalPadding], - [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], - [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor], + [shadowView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor + constant:8.0], + [guide.trailingAnchor constraintEqualToAnchor:shadowView.trailingAnchor + constant:8.0], [separatorView.topAnchor constraintEqualToAnchor:shadowView.bottomAnchor constant:separatorTopPadding], @@ -184,7 +185,7 @@ - (void)contentSizeCategoryDidChangeNotification { #pragma mark - Private - (void)reloadAttributedData { - [self updateState:self.model.requestState]; + [self updateState:self.model.sendRequestState]; } - (void)sendRequestButtonAction:(UIButton *)sender { @@ -195,25 +196,29 @@ - (void)sendRequestButtonAction:(UIButton *)sender { - (void)updateState:(DWUserProfileModelState)state { [self updateActions]; - switch (state) { - case DWUserProfileModelState_None: - self.activityIndicatorView.hidden = YES; - - break; - case DWUserProfileModelState_Error: - self.activityIndicatorView.hidden = YES; - - break; - case DWUserProfileModelState_Loading: - self.sendRequestButton.hidden = YES; - self.activityIndicatorView.hidden = NO; - - break; - case DWUserProfileModelState_Done: - self.activityIndicatorView.hidden = YES; - - break; - } + // Redesigned. Action button is not used. + self.activityIndicatorView.hidden = YES; + self.sendRequestButton.hidden = YES; + + // switch (state) { + // case DWUserProfileModelState_None: + // self.activityIndicatorView.hidden = YES; + // + // break; + // case DWUserProfileModelState_Error: + // self.activityIndicatorView.hidden = YES; + // + // break; + // case DWUserProfileModelState_Loading: + // self.sendRequestButton.hidden = YES; + // self.activityIndicatorView.hidden = NO; + // + // break; + // case DWUserProfileModelState_Done: + // self.activityIndicatorView.hidden = YES; + // + // break; + // } } - (void)updateActions { diff --git a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.h b/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.h new file mode 100644 index 000000000..ac876f39d --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDashPayProtocol.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDashPaySetupModel : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.m b/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.m new file mode 100644 index 000000000..1b9a6c8dd --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Setup/DWDashPaySetupModel.m @@ -0,0 +1,71 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDashPaySetupModel.h" + +@implementation DWDashPaySetupModel + +@synthesize blockchainIdentity; + +@synthesize lastRegistrationError; + +@synthesize registrationCompleted; + +@synthesize registrationStatus; + +@synthesize unreadNotificationsCount; + +@synthesize username; + +@synthesize userProfile; + +- (BOOL)canRetry { + return NO; +} + +- (void)completeRegistration { + // nop +} + +- (void)createUsername:(nonnull NSString *)username invitation:(nonnull NSURL *)invitation { + NSAssert(NO, @"Should not be called"); + // nop +} + +- (void)retry { + NSAssert(NO, @"Should not be called"); + // nop +} + +- (void)setHasEnoughBalanceForInvitationNotification:(BOOL)value { + // nop +} + +- (BOOL)shouldPresentRegistrationPaymentConfirmation { + return YES; +} + +- (void)updateUsernameStatus { + // nop +} + +- (void)verifyDeeplink:(nonnull NSURL *)url completion:(nonnull void (^)(BOOL, NSString *_Nullable, NSString *_Nullable))completion { + NSAssert(NO, @"Should not be called"); + // nop +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Usernames/ConfirmRequestViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/ConfirmRequestViewController.swift new file mode 100644 index 000000000..56b05bf87 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/ConfirmRequestViewController.swift @@ -0,0 +1,139 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +class ConfirmRequestViewController: SheetViewController { + private var viewModel: RequestUsernameViewModel = RequestUsernameViewModel.shared + private var proveLink: URL? = nil + private var continueButton: ActionButton! + var onResult: ((Bool) -> ())? + + static func controller(withProve: URL?) -> ConfirmRequestViewController { + let vc = ConfirmRequestViewController() + vc.proveLink = withProve + return vc + } + + override func viewDidLoad() { + super.viewDidLoad() + configureHierarchy() + } + + override func contentViewHeight() -> CGFloat { + return 220 + } +} + +extension ConfirmRequestViewController { + private func configureHierarchy() { + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.contentMode = .center + view.addSubview(stackView) + + let titleLabel = UILabel() + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = UIFont.dw_boldFont(ofSize: 15) + titleLabel.textColor = UIColor.dw_label() + titleLabel.text = NSLocalizedString("Confirm Username Request", comment: "Voting") + titleLabel.textAlignment = .center + stackView.addArrangedSubview(titleLabel) + + let balanceView = BalanceView() + balanceView.translatesAutoresizingMaskIntoConstraints = false + balanceView.dataSource = self + stackView.addArrangedSubview(balanceView) + stackView.setCustomSpacing(40, after: balanceView) + + let buttonStack = UIStackView() + buttonStack.translatesAutoresizingMaskIntoConstraints = false + buttonStack.axis = .horizontal + buttonStack.distribution = .fill + buttonStack.spacing = 10 + stackView.addArrangedSubview(buttonStack) + + let cancelButton = GrayButton() + cancelButton.setTitle(NSLocalizedString("Cancel", comment: ""), for: .normal) + cancelButton.translatesAutoresizingMaskIntoConstraints = false + cancelButton.addAction(.touchUpInside) { [weak self] _ in + self?.dismiss(animated: true) + } + buttonStack.addArrangedSubview(cancelButton) + + let continueButton = ActionButton() + continueButton.setTitle(NSLocalizedString("Confirm", comment: ""), for: .normal) + continueButton.translatesAutoresizingMaskIntoConstraints = false + continueButton.addAction(.touchUpInside) { [weak self] _ in + self?.continueAction() + } + buttonStack.addArrangedSubview(continueButton) + self.continueButton = continueButton + + view.backgroundColor = .dw_background() + + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 15), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -15), + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 5), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10), + + cancelButton.heightAnchor.constraint(equalToConstant: 48), + continueButton.heightAnchor.constraint(equalToConstant: 48) + ]) + } + + private func showError() { + let alert = UIAlertController(title: NSLocalizedString("Something went wrong", comment: ""), message: NSLocalizedString("There was a network error, you can try again at no extra cost", comment: "Usernames"), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Try Again", comment: ""), style: .default, handler: { [weak self] _ in + self?.continueAction() + })) + let cancelAction = UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .cancel, handler: { [weak self] _ in + self?.onResult?(false) + self?.dismiss(animated: true) + }) + alert.addAction(cancelAction) + present(alert, animated: true) + } + + private func continueAction() { + Task { + continueButton.showActivityIndicator() + let result = await self.viewModel.submitUsernameRequest(withProve: self.proveLink) + continueButton.hideActivityIndicator() + + if result { + viewModel.shouldRequestPayment = false + self.dismiss(animated: true) { + self.onResult?(true) + self.viewModel.onFlowComplete(withResult: true) + } + } else { + self.showError() + } + } + } +} + +extension ConfirmRequestViewController: BalanceViewDataSource { + var mainAmountString: String { + viewModel.minimumRequiredBalance + } + + var supplementaryAmountString: String { + viewModel.minimumRequiredBalanceFiat + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/IconAttributedText.swift b/DashWallet/Sources/UI/DashPay/Usernames/IconAttributedText.swift new file mode 100644 index 000000000..aea34f821 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/IconAttributedText.swift @@ -0,0 +1,39 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +func getAttributedTextWith(icon: UIImage, boldText: String, regularText: String, iconSize: CGSize, iconOffsetY: CGFloat) -> NSAttributedString { + let attachment = NSTextAttachment() + attachment.image = icon + attachment.bounds = CGRect(x: 0, y: iconOffsetY, width: iconSize.width, height: iconSize.height) + + let attachmentStr = NSAttributedString(attachment: attachment) + let mediumFontAttribute: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 13) + ] + let textStr = NSAttributedString(string: " \(boldText) ", attributes: mediumFontAttribute) + let regFontAttribute: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_regularFont(ofSize: 13) + ] + let timelineStr = NSAttributedString(string: regularText, attributes: regFontAttribute) + + let combinedStr = NSMutableAttributedString() + combinedStr.append(attachmentStr) + combinedStr.append(textStr) + combinedStr.append(timelineStr) + + return combinedStr +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/RequestDetailsViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/RequestDetailsViewController.swift new file mode 100644 index 000000000..85b1242dd --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/RequestDetailsViewController.swift @@ -0,0 +1,154 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +class RequestDetailsViewController: UIViewController { + private var cancellableBag = Set() + private let viewModel = RequestUsernameViewModel.shared + + @IBOutlet private var titleLabel: UILabel! + @IBOutlet private var subtitleLabel: UILabel! + @IBOutlet private var votingPeriodLabel: UILabel! + @IBOutlet private var voteAmountLabel: UILabel! + + @IBOutlet private var usernameLabel: UILabel! + @IBOutlet private var usernameText: UILabel! + @IBOutlet private var linkLabel: UILabel! + @IBOutlet private var linkText: UILabel! + @IBOutlet private var verifyLabel: UILabel! + @IBOutlet private var identityLabel: UILabel! + @IBOutlet private var identityText: UILabel! + @IBOutlet private var identityConstraint: NSLayoutConstraint! + + @IBOutlet private var continueButton: TintedButton! + + @objc + static func controller() -> RequestDetailsViewController { + vc(RequestDetailsViewController.self, from: sb("UsernameRequests")) + } + + override func viewDidLoad() { + super.viewDidLoad() + + configureLayout() + configureObservers() + viewModel.fetchUsernameRequestData() + } + + @IBAction + func continueAction() { + confirmCancel() + } +} + +extension RequestDetailsViewController { + private func configureLayout() { + let buttonImage = UIImage(systemName: "info.circle") + let button = UIBarButtonItem(image: buttonImage, style: UIBarButtonItem.Style.plain, target: self, action: #selector(infoButtonAction)) + button.tintColor = .dw_dashBlue() + navigationItem.rightBarButtonItem = button + + titleLabel.text = NSLocalizedString("Request details", comment: "Usernames") + subtitleLabel.text = NSLocalizedString("After the voting ends we will notify you about its results", comment: "Usernames") + + let startDate = Date(timeIntervalSince1970: VotingConstants.votingStartTime) + let endDate = Date(timeIntervalSince1970: VotingConstants.votingEndTime) // TODO replace + let startDateStr = DWDateFormatter.sharedInstance.dateOnly(from: startDate) + let endDateStr = DWDateFormatter.sharedInstance.dateOnly(from: endDate) + let regularText = "\(startDateStr) - \(endDateStr)" + votingPeriodLabel.attributedText = getAttributedTextWith(icon: UIImage(systemName: "calendar")!, boldText: NSLocalizedString("Voting:", comment: "Voting"), regularText: regularText, iconSize: CGSize(width: 16, height: 15), iconOffsetY: -3) + + usernameLabel.text = NSLocalizedString("Username", comment: "Usernames") + linkLabel.text = NSLocalizedString("Link", comment: "Usernames") + identityLabel.text = NSLocalizedString("Identity", comment: "Usernames") + + var configuration = UIButton.Configuration.configuration(from: .tinted()) + configuration.baseBackgroundColor = .dw_red().withAlphaComponent(0.08) + configuration.baseForegroundColor = .dw_red() + continueButton.configuration = configuration + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 15) + ] + continueButton.setAttributedTitle(NSAttributedString(string: NSLocalizedString("Cancel Request", comment: ""), attributes: attributes), for: .normal) + } + + private func configureObservers() { + viewModel.$currentUsernameRequest + .receive(on: DispatchQueue.main) + .removeDuplicates() + .filter { $0 != nil } + .sink { [weak self] request in + self?.showUsernameRequestInfo(request: request!) + } + .store(in: &cancellableBag) + } + + private func showUsernameRequestInfo(request: UsernameRequest) { + voteAmountLabel.attributedText = getAttributedTextWith(icon: UIImage(systemName: "hand.thumbsup.fill")!, boldText: NSLocalizedString("Votes:", comment: "Voting"), regularText: String(describing: request.votes), iconSize: CGSize(width: 16, height: 15), iconOffsetY: -3) + + usernameText.text = request.username + + if let link = request.link, !link.isEmpty { + let attributedString = NSAttributedString(string: link, attributes: [NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue]) + linkText.attributedText = attributedString + linkText.textColor = .dw_dashBlue() + verifyLabel.isHidden = true + identityConstraint.constant = 12 + } else { + linkText.text = NSLocalizedString("None", comment: "") + linkText.textColor = .dw_label() + verifyLabel.isHidden = false + identityConstraint.constant = 24 + } + + let linkTap = UITapGestureRecognizer(target: self, action: #selector(onLinkTapped)) + linkText.addGestureRecognizer(linkTap) + let verifyTap = UITapGestureRecognizer(target: self, action: #selector(onLinkTapped)) + verifyLabel.addGestureRecognizer(verifyTap) + + identityText.text = request.identity + } +} + +extension RequestDetailsViewController { + private func confirmCancel() { + let alert = UIAlertController(title: NSLocalizedString("Do you really want to cancel the username request?", comment: "Usernames"), message: NSLocalizedString("If you tap “Cancel Request”, you will still have a chance to request another username without paying again", comment: "Usernames"), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel Request", comment: "Usernames"), style: .destructive, handler: { [weak self] _ in + self?.viewModel.cancelRequest() + self?.viewModel.onFlowComplete(withResult: false) + self?.navigationController?.popViewController(animated: true) + })) + let cancelAction = UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .cancel) + alert.addAction(cancelAction) + present(alert, animated: true) + } + + @objc + private func onLinkTapped() { + if let url = viewModel.currentUsernameRequest?.link { + UIApplication.shared.open(URL(string: url)!) + } else { + self.navigationController?.pushViewController(VerifyIdenityViewController.controller(), animated: true) + } + } + + @objc + private func infoButtonAction() { + self.navigationController?.pushViewController(VotingInfoViewController.controller(goBackOnClose: true), animated: true) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewController.swift new file mode 100644 index 000000000..7b470afde --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewController.swift @@ -0,0 +1,239 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import Combine + +// MARK: - RequestUsernameViewController + +final class RequestUsernameViewController: UIViewController { + private var cancellableBag = Set() + private var usernameField: DashInputField! + private var continueButton: ActionButton! + private var viewModel: RequestUsernameViewModel = RequestUsernameViewModel.shared + + private let noteLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_regularFont(ofSize: 12) + label.textColor = UIColor.dw_secondaryText() + label.numberOfLines = 0 + label.text = NSLocalizedString("This username has already been requested, but you can request it too and let the network vote to decide if you can have it", comment: "Voting") + label.isHidden = true + + return label + }() + + private let minimumBalanceLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_regularFont(ofSize: 12) + label.textColor = UIColor.dw_secondaryText() + label.textAlignment = .center + label.numberOfLines = 0 + label.isHidden = true + + return label + }() + + static func controller() -> RequestUsernameViewController { + RequestUsernameViewController() + } + + override func viewDidLoad() { + super.viewDidLoad() + + configureHierarchy() + configureObservers() + updateView() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + usernameField.becomeFirstResponder() + } +} + +extension RequestUsernameViewController { + private func configureHierarchy() { + view.backgroundColor = .dw_secondaryBackground() + + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.spacing = 15 + view.addSubview(stackView) + + let titleLabel = UILabel() + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = UIFont.dw_boldFont(ofSize: 28) + titleLabel.textColor = UIColor.dw_label() + titleLabel.text = NSLocalizedString("Request your username", comment: "Voting") + stackView.addArrangedSubview(titleLabel) + stackView.setCustomSpacing(8, after: titleLabel) + + let subtitleLabel = UILabel() + subtitleLabel.translatesAutoresizingMaskIntoConstraints = false + subtitleLabel.font = UIFont.dw_regularFont(ofSize: 15) + subtitleLabel.textColor = UIColor.dw_secondaryText() + subtitleLabel.numberOfLines = 0 + subtitleLabel.text = NSLocalizedString("Once the voting ends you can create any username you want as long as it hasn’t already been created", comment: "Voting") + stackView.addArrangedSubview(subtitleLabel) + + let votingTimeline = UILabel() + votingTimeline.translatesAutoresizingMaskIntoConstraints = false + votingTimeline.textColor = .dw_label() + votingTimeline.numberOfLines = 0 + + let iconImage = UIImage(systemName: "calendar")!.withTintColor(.dw_label()) + let labelText = NSLocalizedString("Voting:", comment: "Voting") + let startDate = Date(timeIntervalSince1970: VotingConstants.votingStartTime) + let endDate = Date(timeIntervalSince1970: VotingConstants.votingEndTime) + let startDateStr = DWDateFormatter.sharedInstance.dateOnly(from: startDate) + let endDateStr = DWDateFormatter.sharedInstance.dateOnly(from: endDate) + let regularText = "\(startDateStr) - \(endDateStr)" + votingTimeline.attributedText = getAttributedTextWith(icon: iconImage, boldText: labelText, regularText: regularText, iconSize: CGSize(width: 16, height: 15), iconOffsetY: -3) + + stackView.addArrangedSubview(votingTimeline) + + usernameField = DashInputField() + usernameField.autocorrectionType = .no + usernameField.spellCheckingType = .no + usernameField.autocapitalizationType = .none + usernameField.textDidChange = { [weak self] text in + self?.updateView() + } + usernameField.isEnabled = true + usernameField.placeholder = NSLocalizedString("Username", comment: "Voting") + usernameField.translatesAutoresizingMaskIntoConstraints = false + stackView.addArrangedSubview(usernameField) + stackView.setCustomSpacing(8, after: usernameField) + + let noteContainer = UIView() + noteContainer.translatesAutoresizingMaskIntoConstraints = false + + noteContainer.addSubview(noteLabel) + stackView.addArrangedSubview(noteContainer) + + continueButton = ActionButton() + continueButton.setTitle(NSLocalizedString("Request Username", comment: "Voting"), for: .normal) + continueButton.translatesAutoresizingMaskIntoConstraints = false + continueButton.addAction(.touchUpInside) { [weak self] _ in + self?.continueButtonAction() + } + view.addSubview(continueButton) + view.addSubview(minimumBalanceLabel) + + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20), + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0), + + noteLabel.topAnchor.constraint(equalTo: noteContainer.topAnchor, constant: 0), + noteLabel.bottomAnchor.constraint(equalTo: noteContainer.bottomAnchor, constant: 0), + noteLabel.leadingAnchor.constraint(equalTo: noteContainer.leadingAnchor, constant: 15), + noteLabel.trailingAnchor.constraint(equalTo: noteContainer.trailingAnchor, constant: -15), + + continueButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + continueButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + continueButton.heightAnchor.constraint(equalToConstant: 46), + view.keyboardLayoutGuide.topAnchor.constraint(equalToSystemSpacingBelow: continueButton.bottomAnchor, multiplier: 1.0), + + minimumBalanceLabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + minimumBalanceLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + minimumBalanceLabel.bottomAnchor.constraint(equalTo: continueButton.topAnchor, constant: -15) + ]) + } + + private func updateView() { + let username = usernameField.text + continueButton.isEnabled = !username.isEmpty + + Task { + noteLabel.isHidden = !(await viewModel.hasRequests(for: username)) + } + } + + func configureObservers() { + viewModel.$hasEnoughBalance + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink(receiveValue: { [weak self] hasEnough in + guard let self = self else { return } + self.refreshBalanceWarning(enoughBalance: hasEnough) + }) + .store(in: &cancellableBag) + } + + private func refreshBalanceWarning(enoughBalance: Bool) { + usernameField.isEnabled = enoughBalance + continueButton.isEnabled = enoughBalance + minimumBalanceLabel.isHidden = enoughBalance + minimumBalanceLabel.text = String.localizedStringWithFormat(NSLocalizedString("To request a username on the Dash Network, you need to have more than %@ Dash", comment: "Usernames"), viewModel.minimumRequiredBalance) + } +} + +extension RequestUsernameViewController { + private func continueButtonAction() { + self.viewModel.enteredUsername = self.usernameField.text + + let alert = UIAlertController(title: NSLocalizedString("Verify your identity to enhance your chances of getting your requested username", comment: "Usernames"), message: NSLocalizedString("If somebody else requests the same username as you, we will let the network decide whom to give this username", comment: "Usernames"), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Verify", comment: "Usernames"), style: .default, handler: { [weak self] _ in + self?.navigationController?.pushViewController(VerifyIdenityViewController.controller(), animated: true) + })) + let cancelAction = UIAlertAction(title: NSLocalizedString("Skip", comment: ""), style: .cancel) { [weak self] _ in + self?.submitOrConfirm() + } + alert.addAction(cancelAction) + present(alert, animated: true) + } + + private func submitOrConfirm() { + if viewModel.shouldRequestPayment { + let vc = ConfirmRequestViewController.controller(withProve: nil) + vc.onResult = { result in + if result { + self.navigationController?.popToRootViewController(animated: true) + } + } + self.present(vc, animated: true) + } else { + Task { + continueButton.showActivityIndicator() + let result = await self.viewModel.submitUsernameRequest(withProve: nil) + continueButton.hideActivityIndicator() + + if result { + self.viewModel.onFlowComplete(withResult: true) + self.navigationController?.popToRootViewController(animated: true) + } else { + self.showError() + } + } + } + } + + private func showError() { + let alert = UIAlertController(title: NSLocalizedString("Something went wrong", comment: ""), message: NSLocalizedString("There was a network error, you can try again at no extra cost", comment: "Usernames"), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Try Again", comment: ""), style: .default, handler: { [weak self] _ in + self?.submitOrConfirm() + })) + let cancelAction = UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .cancel) + alert.addAction(cancelAction) + present(alert, animated: true) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewModel.swift b/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewModel.swift new file mode 100644 index 000000000..6a449a78d --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/RequestUsernameViewModel.swift @@ -0,0 +1,156 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +@objc +public class RequestUsernameVMObjcWrapper: NSObject { + @objc + public class func getRootVC(with completionHandler: ((Bool) -> ())?) -> UIViewController { + let vm = RequestUsernameViewModel.shared + vm.completionHandler = completionHandler + + if vm.hasUsernameRequest { + return RequestDetailsViewController.controller() + } else if vm.shouldShowFirstTimeInfo { + return WelcomeToDashPayViewController.controller() + } else { + return RequestUsernameViewController.controller() + } + } +} + +class RequestUsernameViewModel { + private var cancellableBag = Set() + private let dao: UsernameRequestsDAO = UsernameRequestsDAOImpl.shared + private let prefs = VotingPrefs.shared + + var completionHandler: ((Bool) -> ())? + var enteredUsername: String = "" + @Published private(set) var hasEnoughBalance = false + @Published private(set) var currentUsernameRequest: UsernameRequest? = nil + + var minimumRequiredBalance: String { + return DWDP_MIN_BALANCE_TO_CREATE_USERNAME.formattedDashAmount + } + + var minimumRequiredBalanceFiat: String { + let fiat: String + + if let fiatAmount = try? CurrencyExchanger.shared.convertDash(amount: DWDP_MIN_BALANCE_TO_CREATE_USERNAME.dashAmount, to: App.fiatCurrency) { + fiat = NumberFormatter.fiatFormatter.string(from: fiatAmount as NSNumber)! + } else { + fiat = NSLocalizedString("Syncing…", comment: "Balance") + } + + return fiat + } + + var shouldShowFirstTimeInfo: Bool { + get { !prefs.requestInfoShown } + set { prefs.requestInfoShown = !newValue } + } + + var hasUsernameRequest: Bool { + prefs.requestedUsernameId != nil + } + + var shouldRequestPayment: Bool { + get { !prefs.alreadyPaid } + set { prefs.alreadyPaid = !newValue } + } + + public static let shared: RequestUsernameViewModel = .init() + + init() { + observeBalance() + } + + func hasRequests(for username: String) async -> Bool { + return await dao.get(byUsername: username) != nil + } + + func submitUsernameRequest(withProve link: URL?) async -> Bool { + do { + // TODO: simulation of a request. Remove when not needed + + let now = Date().timeIntervalSince1970 + let identityData = withUnsafeBytes(of: UUID().uuid) { Data($0) } + let identity = (identityData as NSData).base58String() + let usernameRequest = UsernameRequest(requestId: UUID().uuidString, username: enteredUsername, createdAt: Int64(now), identity: "\(identity)\(identity)", link: link?.absoluteString, votes: 0, isApproved: false) + + await dao.create(dto: usernameRequest) + prefs.requestedUsernameId = usernameRequest.requestId + prefs.requestedUsername = usernameRequest.username + + let oneSecond = TimeInterval(1_000_000_000) + let delay = UInt64(oneSecond * 2) + try await Task.sleep(nanoseconds: delay) + + return true + } catch { + return false + } + } + + func fetchUsernameRequestData() { + if let id = prefs.requestedUsernameId { + Task { + currentUsernameRequest = await dao.get(byRequestId: id) + enteredUsername = currentUsernameRequest?.username ?? "" + } + } + } + + func cancelRequest() { + if let requestId = prefs.requestedUsernameId { + Task { + currentUsernameRequest = nil + enteredUsername = "" + await dao.delete(by: requestId) + prefs.requestedUsernameId = nil + prefs.requestedUsername = nil + } + } + } + + func updateRequest(with link: URL) { + Task { + if var usernameRequest = currentUsernameRequest { + usernameRequest.link = link.absoluteString + await dao.update(dto: usernameRequest) + currentUsernameRequest = usernameRequest + } + } + } + + func onFlowComplete(withResult: Bool) { + completionHandler?(withResult) + } + + private func observeBalance() { + checkBalance() + NotificationCenter.default.publisher(for: NSNotification.Name.DSWalletBalanceDidChange) + .sink { [weak self] _ in self?.checkBalance() } + .store(in: &cancellableBag) + } + + private func checkBalance() { + let balance = DWEnvironment.sharedInstance().currentAccount.balance + hasEnoughBalance = balance >= DWDP_MIN_BALANCE_TO_CREATE_USERNAME + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/UsernameRequests.storyboard b/DashWallet/Sources/UI/DashPay/Usernames/UsernameRequests.storyboard new file mode 100644 index 000000000..b772f9f29 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/UsernameRequests.storyboard @@ -0,0 +1,891 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/DashPay/Usernames/VerifyIdenityViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/VerifyIdenityViewController.swift new file mode 100644 index 000000000..516a8d5ed --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/VerifyIdenityViewController.swift @@ -0,0 +1,162 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +class VerifyIdenityViewController: UIViewController { + private let viewModel = RequestUsernameViewModel.shared + + @IBOutlet private var titleLabel: UILabel! + @IBOutlet private var subtitleLabel: UILabel! + @IBOutlet private var copyBoxLabel: UILabel! + @IBOutlet private var copyBoxText: UILabel! + @IBOutlet private var copyContainer: UIView! + @IBOutlet private var proveTitle: UILabel! + @IBOutlet private var proveDescription: UILabel! + @IBOutlet private var linkField: DashInputField! + @IBOutlet private var continueButton: ActionButton! + + @objc + static func controller() -> VerifyIdenityViewController { + vc(VerifyIdenityViewController.self, from: sb("UsernameRequests")) + } + + override func viewDidLoad() { + super.viewDidLoad() + configureLayout() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + ka_startObservingKeyboardNotifications() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + ka_stopObservingKeyboardNotifications() + } + + @IBAction + func continueAction() { + if linkField.text.count > 75 { + linkField.errorMessage = NSLocalizedString("Maximum 75 characters", comment: "Usernames") + return + } + + if let url = URL(string: linkField.text), url.scheme != nil { + if viewModel.currentUsernameRequest == nil { + confirmUsernameRequest(link: url) + } else { + viewModel.updateRequest(with: url) + self.navigationController?.popViewController(animated: true) + } + } else { + linkField.errorMessage = NSLocalizedString("Not a valid URL", comment: "Usernames") + } + } + + @IBAction + func sharePost() { + if let text = copyBoxText.text { + let activityViewController = UIActivityViewController(activityItems: [text], applicationActivities: nil) + activityViewController.excludedActivityTypes = [UIActivity.ActivityType.airDrop] + present(activityViewController, animated: true, completion: nil) + } + } +} + +extension VerifyIdenityViewController { + private func configureLayout() { + titleLabel.text = NSLocalizedString("Verify your identity", comment: "Usernames") + subtitleLabel.text = NSLocalizedString("The link you send will be visible to all of the Dash network.", comment: "Usernames") + + copyBoxLabel.text = NSLocalizedString("Example post", comment: "Usernames") + copyBoxText.text = String.localizedStringWithFormat(NSLocalizedString("Please vote to approve my requested Dash username - %@", comment: "Usernames"), viewModel.enteredUsername) + + proveTitle.text = NSLocalizedString("Prove your identity", comment: "Usernames") + proveDescription.text = NSLocalizedString("Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow", comment: "Usernames") + + linkField.autocorrectionType = .no + linkField.spellCheckingType = .no + linkField.autocapitalizationType = .none + linkField.textDidChange = { [weak self] text in + self?.updateView() + } + linkField.isEnabled = true + linkField.placeholder = NSLocalizedString("Paste the link", comment: "Usernames") + linkField.translatesAutoresizingMaskIntoConstraints = false + linkField.keyboardType = .URL + + continueButton.setTitle(NSLocalizedString("Verify", comment: ""), for: .normal) + + view.keyboardLayoutGuide.topAnchor.constraint(equalToSystemSpacingBelow: continueButton.bottomAnchor, multiplier: 1.0).isActive = true + } + + private func updateView() { + continueButton.isEnabled = !linkField.text.isEmpty + linkField.errorMessage = nil + } +} + +extension VerifyIdenityViewController { + func confirmUsernameRequest(link: URL?) { + if viewModel.shouldRequestPayment { + let vc = ConfirmRequestViewController.controller(withProve: link) + vc.onResult = { result in + if result { + self.navigationController?.popToRootViewController(animated: true) + } + } + present(vc, animated: true) + } else { + Task { + continueButton.showActivityIndicator() + let result = await self.viewModel.submitUsernameRequest(withProve: nil) + continueButton.hideActivityIndicator() + + if result { + self.viewModel.onFlowComplete(withResult: true) + self.navigationController?.popToRootViewController(animated: true) + } else { + self.showError() + } + } + } + } + + private func showError() { + let alert = UIAlertController(title: NSLocalizedString("Something went wrong", comment: ""), message: NSLocalizedString("There was a network error, you can try again at no extra cost", comment: "Usernames"), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Try Again", comment: ""), style: .default, handler: { [weak self] _ in + self?.confirmUsernameRequest(link: URL(string: self?.linkField.text ?? "")) + })) + let cancelAction = UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .cancel) + alert.addAction(cancelAction) + present(alert, animated: true) + } +} + +extension VerifyIdenityViewController { + override func ka_keyboardShowOrHideAnimation(withHeight height: CGFloat, animationDuration: TimeInterval, + animationCurve: UIView.AnimationCurve) { + if height == 0 { + // Keyboard hidden, lower layout + view.frame.origin.y = 0 + } else { + let diff = height - view.frame.height + linkField.frame.maxY + continueButton.frame.height + // Raise keyboard a bit. Accounts for not enough space on small screens + view.frame.origin.y = -(60 + max(diff, 0)) + } + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/VotingInfoViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/VotingInfoViewController.swift new file mode 100644 index 000000000..fbb58ed0f --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/VotingInfoViewController.swift @@ -0,0 +1,78 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +class VotingInfoViewController: UIViewController { + private let viewModel = RequestUsernameViewModel.shared + + @IBOutlet private var titleLabel: UILabel! + @IBOutlet private var subtitleLabel: UILabel! + @IBOutlet private var timelineTitle: UILabel! + @IBOutlet private var timelineSubtitle: UILabel! + @IBOutlet private var notApprovedTitle: UILabel! + @IBOutlet private var notApprovedSubtitle: UILabel! + @IBOutlet private var passphraseTitle: UILabel! + @IBOutlet private var passphraseSubtitle: UILabel! + @IBOutlet private var continueButton: UIButton! + + private var goBackOnClose: Bool! + + @objc + static func controller(goBackOnClose: Bool) -> VotingInfoViewController { + let vc = vc(VotingInfoViewController.self, from: sb("UsernameRequests")) + vc.goBackOnClose = goBackOnClose + return vc + } + + override func viewDidLoad() { + super.viewDidLoad() + configureLayout() + } + + @IBAction + func continueAction() { + viewModel.shouldShowFirstTimeInfo = false + + if goBackOnClose { + self.navigationController?.popViewController(animated: true) + } else { + let vc = RequestUsernameViewController.controller() + vc.hidesBottomBarWhenPushed = true + self.navigationController?.replaceLast(2, with: vc, animated: true) + } + } +} + +extension VotingInfoViewController { + private func configureLayout() { + titleLabel.text = NSLocalizedString("What is username voting?", comment: "Usernames") + subtitleLabel.text = NSLocalizedString("The Dash network must vote to approve your username before it is created.", comment: "Usernames") + + timelineTitle.text = NSLocalizedString("Voting will not be required forever", comment: "Usernames") + let endDate = Date(timeIntervalSince1970: VotingConstants.votingEndTime) + timelineSubtitle.text = String.localizedStringWithFormat(NSLocalizedString("After voting is completed on %@ you can create any username that has not already been created", comment: "Usernames"), DWDateFormatter.sharedInstance.shortString(from: endDate)) + + notApprovedTitle.text = NSLocalizedString("In case your request is not approved", comment: "Usernames") + notApprovedSubtitle.text = NSLocalizedString("Pay now and if not approved, you can create a different name without paying again", comment: "Usernames") + + passphraseTitle.text = NSLocalizedString("Keep your passphrase safe", comment: "Usernames") + passphraseSubtitle.text = NSLocalizedString("In case you lose your passphrase you will lose your right to your requested username.", comment: "Usernames") + + continueButton.setTitle(NSLocalizedString("OK", comment: ""), for: .normal) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Usernames/WelcomeToDashpayViewController.swift b/DashWallet/Sources/UI/DashPay/Usernames/WelcomeToDashpayViewController.swift new file mode 100644 index 000000000..d684f875f --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Usernames/WelcomeToDashpayViewController.swift @@ -0,0 +1,79 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +class WelcomeToDashPayViewController: UIViewController { + private var cancellableBag = Set() + private let viewModel = RequestUsernameViewModel.shared + + @IBOutlet private var titleLabel: UILabel! + @IBOutlet private var createUsernameTitle: UILabel! + @IBOutlet private var createUsernameSubtitle: UILabel! + @IBOutlet private var addFriendsTitle: UILabel! + @IBOutlet private var addFriendsSubtitle: UILabel! + @IBOutlet private var profileTitle: UILabel! + @IBOutlet private var profileSubtitle: UILabel! + @IBOutlet private var minimumBalanceLabel: UILabel! + @IBOutlet private var continueButton: UIButton! + + @objc + static func controller() -> WelcomeToDashPayViewController { + vc(WelcomeToDashPayViewController.self, from: sb("UsernameRequests")) + } + + override func viewDidLoad() { + super.viewDidLoad() + configureLayout() + configureObservers() + } + + @IBAction + func continueAction() { + self.navigationController?.pushViewController(VotingInfoViewController.controller(goBackOnClose: false), animated: true) + } +} + +extension WelcomeToDashPayViewController { + private func configureLayout() { + titleLabel.text = NSLocalizedString("Welcome to Dash Pay", comment: "Usernames") + createUsernameTitle.text = NSLocalizedString("Create a username", comment: "Usernames") + createUsernameSubtitle.text = NSLocalizedString("Pay to usernames. No more alphanumeric addresses.", comment: "Usernames") + addFriendsTitle.text = NSLocalizedString("Add your friends & family", comment: "Usernames") + addFriendsSubtitle.text = NSLocalizedString("Invite your family, find your friends by searching their usernames.", comment: "Usernames") + profileTitle.text = NSLocalizedString("Personalise profile", comment: "Usernames") + profileSubtitle.text = NSLocalizedString("Upload your picture, personalize your identity.", comment: "Usernames") + continueButton.setTitle(NSLocalizedString("Continue", comment: "Usernames"), for: .normal) + } + + func configureObservers() { + viewModel.$hasEnoughBalance + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink(receiveValue: { [weak self] hasEnough in + guard let self = self else { return } + self.refreshBalanceWarning(enoughBalance: hasEnough) + }) + .store(in: &cancellableBag) + } + + private func refreshBalanceWarning(enoughBalance: Bool) { + continueButton.isEnabled = enoughBalance + minimumBalanceLabel.isHidden = enoughBalance + minimumBalanceLabel.text = String.localizedStringWithFormat(NSLocalizedString("You should have more than %@ Dash to create a username", comment: "Usernames"), viewModel.minimumRequiredBalance) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.h b/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.h index bc95b7972..515e8eccb 100644 --- a/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.h +++ b/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.h @@ -19,6 +19,10 @@ NS_ASSUME_NONNULL_BEGIN +extern NSString *const DPCropParameterName; + +@class DSBlockchainIdentity; + typedef NS_ENUM(NSUInteger, DWDPAvatarBackgroundMode) { DWDPAvatarBackgroundMode_DashBlue, DWDPAvatarBackgroundMode_Random, @@ -27,9 +31,12 @@ typedef NS_ENUM(NSUInteger, DWDPAvatarBackgroundMode) { @interface DWDPAvatarView : UIView @property (nonatomic, assign) DWDPAvatarBackgroundMode backgroundMode; -@property (nullable, nonatomic, copy) NSString *username; +@property (nullable, nonatomic, copy) DSBlockchainIdentity *blockchainIdentity; @property (nonatomic, assign, getter=isSmall) BOOL small; +- (void)setAsDashPlaceholder; +- (void)configureWithUsername:(NSString *)username; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.m b/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.m index 9562b4caf..fac3338f6 100644 --- a/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.m +++ b/DashWallet/Sources/UI/DashPay/Views/DWDPAvatarView.m @@ -17,14 +17,23 @@ #import "DWDPAvatarView.h" +#import "DWEnvironment.h" #import "DWUIKit.h" #import "UIColor+DWDashPay.h" +#import "UIImageView+DWDPAvatar.h" +#import +#import + NS_ASSUME_NONNULL_BEGIN +NSString *const DPCropParameterName = @"dashpay-profile-pic-zoom"; + @interface DWDPAvatarView () +@property (readonly, nonatomic, strong) UIImageView *imageView; @property (readonly, nonatomic, strong) UILabel *letterLabel; +@property (nonatomic, assign) CGSize imageSize; @end @@ -53,6 +62,7 @@ - (void)layoutSubviews { self.layer.cornerRadius = CGRectGetWidth(self.bounds) / 2.0; + self.imageView.frame = self.bounds; self.letterLabel.frame = self.bounds; } @@ -62,7 +72,45 @@ - (void)setBackgroundMode:(DWDPAvatarBackgroundMode)backgroundMode { [self updateBackgroundColor]; } +- (void)setBlockchainIdentity:(DSBlockchainIdentity *)blockchainIdentity { + _blockchainIdentity = blockchainIdentity; + + [self.imageView sd_cancelCurrentImageLoad]; + + NSString *username = blockchainIdentity.currentDashpayUsername; + NSString *avatarUrlString = [blockchainIdentity.avatarPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + + [self setUsername:username]; + + __block typeof(self) weakSelf = self; + + [self.imageView dw_setAvatarWithURLString:avatarUrlString + completion:^(UIImage *_Nullable image) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (image) { + strongSelf.imageView.hidden = NO; + strongSelf.letterLabel.hidden = YES; + strongSelf.imageView.image = image; + } + else { + [strongSelf setUsername:username]; + } + }]; + +} + +- (void)configureWithUsername:(NSString *)username { + [self setUsername:username]; +} + - (void)setUsername:(NSString *)username { + self.letterLabel.hidden = NO; + self.imageView.hidden = YES; + if (username.length >= 1) { NSString *firstLetter = [username substringToIndex:1]; self.letterLabel.text = [firstLetter uppercaseString]; @@ -75,6 +123,17 @@ - (void)setUsername:(NSString *)username { } } +- (void)setAsDashPlaceholder { + self.letterLabel.hidden = YES; + self.imageView.hidden = NO; + + self.layer.backgroundColor = [UIColor dw_dashBlueColor].CGColor; + + self.imageView.tintColor = [UIColor whiteColor]; + self.imageView.contentMode = UIViewContentModeCenter; + self.imageView.image = [UIImage imageNamed:@"icon_dash_small"]; +} + - (void)setSmall:(BOOL)small { _small = small; @@ -92,12 +151,18 @@ - (void)setup { self.layer.backgroundColor = [UIColor dw_dashBlueColor].CGColor; self.layer.masksToBounds = YES; + UIImageView *imageView = [[UIImageView alloc] init]; + [self addSubview:imageView]; + _imageView = imageView; + UILabel *letterLabel = [[UILabel alloc] init]; letterLabel.font = [UIFont dw_regularFontOfSize:30]; letterLabel.textAlignment = NSTextAlignmentCenter; letterLabel.textColor = [UIColor dw_lightTitleColor]; [self addSubview:letterLabel]; _letterLabel = letterLabel; + + _imageSize = CGSizeMake(256, 256); } - (void)updateBackgroundColor { diff --git a/DashWallet/Sources/UI/DashPay/Views/DWDPSmallContactView.m b/DashWallet/Sources/UI/DashPay/Views/DWDPSmallContactView.m index c0dee4d0e..0c2c79aaa 100644 --- a/DashWallet/Sources/UI/DashPay/Views/DWDPSmallContactView.m +++ b/DashWallet/Sources/UI/DashPay/Views/DWDPSmallContactView.m @@ -70,8 +70,10 @@ - (void)setup_smallContactView { const CGFloat avatarSize = 30.0; + [titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + [NSLayoutConstraint activateConstraints:@[ - [avatarView.leadingAnchor constraintGreaterThanOrEqualToAnchor:self.leadingAnchor], + [avatarView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], [avatarView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:avatarView.bottomAnchor], [avatarView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], @@ -89,7 +91,7 @@ - (void)setup_smallContactView { - (void)setItem:(id)item { _item = item; - self.avatarView.username = item.username; + self.avatarView.blockchainIdentity = item.blockchainIdentity; self.titleLabel.text = item.displayName ?: item.username; } diff --git a/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.h b/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.h new file mode 100644 index 000000000..d285cbb63 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWNetworkUnavailableView : UIView + +@property (nullable, copy, nonatomic) NSString *error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.m b/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.m new file mode 100644 index 000000000..0307345d5 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Views/DWNetworkUnavailableView.m @@ -0,0 +1,89 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2020 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWNetworkUnavailableView.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWNetworkUnavailableView () + +@property (readonly, strong, nonatomic) UILabel *textLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWNetworkUnavailableView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"network_unavailable"]]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:imageView]; + + UILabel *textLabel = [[UILabel alloc] init]; + textLabel.translatesAutoresizingMaskIntoConstraints = NO; + textLabel.textAlignment = NSTextAlignmentCenter; + textLabel.numberOfLines = 0; + [self addSubview:textLabel]; + _textLabel = textLabel; + + [NSLayoutConstraint activateConstraints:@[ + [imageView.topAnchor constraintEqualToAnchor:self.topAnchor], + [imageView.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], + + [textLabel.topAnchor constraintEqualToAnchor:imageView.bottomAnchor + constant:12.0], + [textLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [self.trailingAnchor constraintEqualToAnchor:textLabel.trailingAnchor], + [self.bottomAnchor constraintEqualToAnchor:textLabel.bottomAnchor], + ]]; + } + return self; +} + +- (void)setError:(NSString *)error { + _error = error; + + NSMutableAttributedString *string = [[NSMutableAttributedString alloc] init]; + [string beginEditing]; + + [string appendAttributedString: + [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Network Unavailable", nil) + attributes:@{ + NSForegroundColorAttributeName : [UIColor dw_darkTitleColor], + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline], + }]]; + + [string appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]]; + + [string appendAttributedString: + [[NSAttributedString alloc] initWithString:error + attributes:@{ + NSForegroundColorAttributeName : [UIColor dw_secondaryTextColor], + NSFontAttributeName : [UIFont dw_fontForTextStyle:UIFontTextStyleCallout], + }]]; + + [string endEditing]; + + self.textLabel.attributedText = string; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Voting/CastVoteViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/CastVoteViewController.swift new file mode 100644 index 000000000..86bb29375 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/CastVoteViewController.swift @@ -0,0 +1,104 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import Combine + +// MARK: - CastVoteViewController + +final class CastVoteViewController: UIViewController { + private var cancellableBag = Set() + private var viewModel: VotingViewModel = VotingViewModel.shared + + private var dataSource: DataSource! = nil + @IBOutlet private var tableView: UITableView! + + class func controller() -> CastVoteViewController { + CastVoteViewController.initiate(from: sb("UsernameVoting")) + } + + override func viewDidLoad() { + super.viewDidLoad() + configureHierarchy() + configureDataSource() + configureObservers() + } +} + +extension CastVoteViewController { + private func configureHierarchy() { + tableView.separatorStyle = .none + tableView.allowsSelection = false + } + + private func configureObservers() { + viewModel.$masternodeKeys + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] data in + self?.reloadDataSource(keys: data) + } + .store(in: &cancellableBag) + } +} + +extension CastVoteViewController { + @IBAction + func addMasternodeKey() { + let vc = EnterVotingKeyViewController.controller() + self.navigationController?.pushViewController(vc, animated: true) + } + + @IBAction + func submit() { + if let id = viewModel.selectedRequest?.requestId { + viewModel.vote(for: id) + self.navigationController?.popToViewController(ofType: UsernameVotingViewController.self, animated: true) + } + } +} + +extension CastVoteViewController { + enum Section: CaseIterable { + case main + } + + class DataSource: UITableViewDiffableDataSource { } + + private func configureDataSource() { + dataSource = DataSource(tableView: tableView) { [weak self] + (tableView: UITableView, indexPath: IndexPath, item: MasternodeKey) -> UITableViewCell? in + + guard self != nil else { return UITableViewCell() } + let cell = tableView.dequeueReusableCell(withIdentifier: "MasternodeIPCell", for: indexPath) + + if let ipCell = cell as? MasternodeIPCell { + ipCell.update(with: item.ip) + } + + return cell + } + } + + private func reloadDataSource(keys: [MasternodeKey]) { + var snapshot = NSDiffableDataSourceSnapshot() + snapshot.appendSections([.main]) + snapshot.appendItems(keys) + dataSource.apply(snapshot, animatingDifferences: false) + dataSource.defaultRowAnimation = .none + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/Cells/GroupedRequestCell.swift b/DashWallet/Sources/UI/DashPay/Voting/Cells/GroupedRequestCell.swift new file mode 100644 index 000000000..5acf004e0 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/Cells/GroupedRequestCell.swift @@ -0,0 +1,217 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +let kToogleAreaHeight = CGFloat(50) + +final class GroupedRequestCell: UITableViewCell { + private var model: [UsernameRequest] = [] + private var dataSource: DataSource! = nil + private var containerHeightConstraint: NSLayoutConstraint! + + var onHeightChanged: (() -> ())? + var onRequestSelected: ((UsernameRequest) -> ())? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + configureLayout() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configureLayout() + } + + private let toggleArea: UIControl = { + let view = UIControl() + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + + private let username: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_mediumFont(ofSize: 13) + label.textColor = UIColor.dw_label() + return label + }() + + private let requestsAmount: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_regularFont(ofSize: 13) + label.textColor = UIColor.dw_tertiaryText() + return label + }() + + private let chevron: UIImageView = { + let image = UIImageView(image: UIImage(systemName: "chevron.down")) + image.contentMode = .scaleAspectFill + image.tintColor = .dw_label() + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + private let container: UIStackView = { + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.backgroundColor = .dw_background() + stackView.layer.cornerRadius = 10 + stackView.axis = .vertical + return stackView + }() + + private let tableView: UITableView = { + let tableView = UITableView() + tableView.estimatedRowHeight = 44 + tableView.rowHeight = UITableView.automaticDimension + tableView.isScrollEnabled = false + tableView.separatorStyle = .singleLine + tableView.register(UsernameRequestCell.self, forCellReuseIdentifier: UsernameRequestCell.description()) + tableView.translatesAutoresizingMaskIntoConstraints = false + tableView.tableFooterView = UIView(frame: .zero) + return tableView + }() +} + +private extension GroupedRequestCell { + func configureLayout() { + toggleArea.addTarget(self, action: #selector(expandOrCollapse), for: .touchUpInside) + toggleArea.addSubview(username) + toggleArea.addSubview(chevron) + toggleArea.addSubview(requestsAmount) + container.addArrangedSubview(toggleArea) + containerHeightConstraint = container.heightAnchor.constraint(equalToConstant: kToogleAreaHeight) + + tableView.isHidden = true + tableView.delegate = self + container.addArrangedSubview(tableView) + + contentView.addSubview(container) + contentView.backgroundColor = .dw_secondaryBackground() + + NSLayoutConstraint.activate([ + toggleArea.heightAnchor.constraint(equalToConstant: kToogleAreaHeight), + + tableView.topAnchor.constraint(equalTo: toggleArea.bottomAnchor), + tableView.leadingAnchor.constraint(equalTo: container.leadingAnchor), + tableView.trailingAnchor.constraint(equalTo: container.trailingAnchor), + tableView.bottomAnchor.constraint(equalTo: container.bottomAnchor), + + username.topAnchor.constraint(equalTo: toggleArea.topAnchor, constant: 18), + username.leadingAnchor.constraint(equalTo: toggleArea.leadingAnchor, constant: 15), + + requestsAmount.topAnchor.constraint(equalTo: username.topAnchor), + requestsAmount.trailingAnchor.constraint(equalTo: chevron.leadingAnchor, constant: -10), + requestsAmount.bottomAnchor.constraint(equalTo: username.bottomAnchor), + + chevron.heightAnchor.constraint(equalToConstant: 14), + chevron.widthAnchor.constraint(equalToConstant: 14), + chevron.topAnchor.constraint(equalTo: username.topAnchor), + chevron.trailingAnchor.constraint(equalTo: toggleArea.trailingAnchor, constant: -15), + chevron.bottomAnchor.constraint(equalTo: username.bottomAnchor), + + containerHeightConstraint, + container.topAnchor.constraint(equalTo: contentView.topAnchor), + container.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20), + container.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -20), + container.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -15), + ]) + } + + @objc func expandOrCollapse() { + let shouldExpand = self.tableView.isHidden + toggleCell(expand: shouldExpand) + } + + private func toggleCell(expand: Bool) { + if expand { + updateInnerTableViewHeight() + } + + self.tableView.isHidden = !expand + self.container.setNeedsLayout() + self.onHeightChanged?() + + UIView.transition(with: container, + duration: 0.3, + options: .curveEaseInOut) { [weak self] in + let transform = expand ? CGAffineTransform(rotationAngle: CGFloat.pi) : CGAffineTransform.identity + self?.chevron.transform = transform + } + } +} + +extension GroupedRequestCell { + func configure(withModel model: [UsernameRequest]) { + toggleCell(expand: false) + + self.model = model + self.username.text = model.first?.username + self.requestsAmount.text = String.localizedStringWithFormat(NSLocalizedString("%ld requests", comment: "Voting"), model.count) + self.configureDataSource() + self.reloadDataSource(data: model) + } + + private func updateInnerTableViewHeight() { + let contentHeight = tableView.contentSize.height + containerHeightConstraint.constant = contentHeight + kToogleAreaHeight + self.layoutIfNeeded() + } +} + +extension GroupedRequestCell { + enum Section: CaseIterable { + case main + } + + class DataSource: UITableViewDiffableDataSource { } + + private func configureDataSource() { + dataSource = DataSource(tableView: tableView) { [weak self] + (tableView: UITableView, indexPath: IndexPath, item: UsernameRequest) -> UITableViewCell? in + + guard self != nil else { return UITableViewCell() } + let cell = tableView.dequeueReusableCell(withIdentifier: UsernameRequestCell.description(), for: indexPath) + + if let requestCell = cell as? UsernameRequestCell { + requestCell.configure(withModel: item) + } + + return cell + } + } + + private func reloadDataSource(data: [UsernameRequest]) { + var snapshot = NSDiffableDataSourceSnapshot() + snapshot.appendSections([.main]) + snapshot.appendItems(data) + dataSource.apply(snapshot, animatingDifferences: false) + dataSource.defaultRowAnimation = .none + } +} + + +extension GroupedRequestCell: UITableViewDelegate { + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: false) + let request = model[indexPath.row] + onRequestSelected?(request) + } +} + diff --git a/DashWallet/Sources/UI/DashPay/Voting/Cells/MasternodeIPCell.swift b/DashWallet/Sources/UI/DashPay/Voting/Cells/MasternodeIPCell.swift new file mode 100644 index 000000000..2f9a66886 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/Cells/MasternodeIPCell.swift @@ -0,0 +1,31 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// MARK: - MasternodeIPCell + +class MasternodeIPCell: UITableViewCell { + @IBOutlet var headerLabel: UILabel! + @IBOutlet var ipLabel: UILabel! + @IBOutlet var view: UIView! + + func update(with item: String) { + ipLabel.text = item + headerLabel.text = NSLocalizedString("Masternode IP address", comment: "Voting") + view.layer.borderWidth = 1 + view.layer.borderColor = UIColor.dw_separatorLine().cgColor + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/Cells/UsernameRequestCell.swift b/DashWallet/Sources/UI/DashPay/Voting/Cells/UsernameRequestCell.swift new file mode 100644 index 000000000..f3029efe7 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/Cells/UsernameRequestCell.swift @@ -0,0 +1,131 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class UsernameRequestCell: UITableViewCell { + var model: UsernameRequest? + + private let bullet: UIView = { + let view = UIView() + view.backgroundColor = .dw_label() + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + + private let dateCreated: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_regularFont(ofSize: 12) + label.textColor = UIColor.dw_label() + return label + }() + + private let linkBadge: UIImageView = { + let image = UIImageView(image: UIImage(named: "link.badge")) + image.contentMode = .scaleAspectFit + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + private let votes: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = UIFont.dw_regularFont(ofSize: 12) + label.textColor = UIColor.dw_tertiaryText() + return label + }() + + private let votesBadge: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.layer.cornerRadius = 10 + view.layer.borderWidth = 1 + view.clipsToBounds = true + view.layer.borderColor = UIColor.dw_separatorLine().cgColor + return view + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + configureLayout() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configureLayout() + } +} + +private extension UsernameRequestCell { + func configureLayout() { + contentView.addSubview(dateCreated) + contentView.addSubview(bullet) + contentView.addSubview(linkBadge) + contentView.addSubview(votesBadge) + votesBadge.addSubview(votes) + + NSLayoutConstraint.activate([ + contentView.heightAnchor.constraint(equalToConstant: 44), + + bullet.heightAnchor.constraint(equalToConstant: 3), + bullet.widthAnchor.constraint(equalToConstant: 3), + bullet.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + bullet.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), + + votesBadge.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + votesBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15), + + votes.topAnchor.constraint(equalTo: votesBadge.topAnchor, constant: 3), + votes.leadingAnchor.constraint(equalTo: votesBadge.leadingAnchor, constant: 6), + votes.trailingAnchor.constraint(equalTo: votesBadge.trailingAnchor, constant: -6), + votes.bottomAnchor.constraint(equalTo: votesBadge.bottomAnchor, constant: -3), + + linkBadge.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + linkBadge.trailingAnchor.constraint(equalTo: votesBadge.leadingAnchor, constant: -5), + + dateCreated.topAnchor.constraint(equalTo: contentView.topAnchor), + dateCreated.leadingAnchor.constraint(equalTo: bullet.trailingAnchor, constant: 8), + dateCreated.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + dateCreated.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + ]) + } +} + +extension UsernameRequestCell { + func configure(withModel model: UsernameRequest) { + self.model = model + let unixTimestamp = TimeInterval(model.createdAt) + let date = Date(timeIntervalSince1970: unixTimestamp) + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "dd MMM yyyy · H:mm" + let formattedDate = dateFormatter.string(from: date) + self.dateCreated.text = formattedDate + linkBadge.isHidden = model.link == nil + votes.text = String(describing: model.votes) + + if model.isApproved { + votesBadge.backgroundColor = .dw_dashBlue() + votesBadge.layer.borderColor = UIColor.dw_dashBlue().cgColor + votes.textColor = .white + } else { + votesBadge.backgroundColor = nil + votesBadge.layer.borderColor = UIColor.dw_separatorLine().cgColor + votes.textColor = .dw_tertiaryText() + } + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/Cells/VotingFilterItemSelectableCell.swift b/DashWallet/Sources/UI/DashPay/Voting/Cells/VotingFilterItemSelectableCell.swift new file mode 100644 index 000000000..d21560350 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/Cells/VotingFilterItemSelectableCell.swift @@ -0,0 +1,43 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// MARK: - VotingFilterItemSelectableCell + +class VotingFilterItemSelectableCell: VotingItemCell { + @IBOutlet var checkboxButton: UIButton! + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + checkboxButton.isSelected = selected + } + + override func awakeFromNib() { + super.awakeFromNib() + checkboxButton.isUserInteractionEnabled = false + } +} + + +// MARK: - VotingItemCell + +class VotingItemCell: UITableViewCell { + @IBOutlet var nameLabel: UILabel! + + func update(with item: VotingFilterItem) { + nameLabel.text = item.title + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/EnterVotingKeyViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/EnterVotingKeyViewController.swift new file mode 100644 index 000000000..e18271e6b --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/EnterVotingKeyViewController.swift @@ -0,0 +1,127 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +// MARK: - EnterVotingKeyViewController + +final class EnterVotingKeyViewController: UIViewController { + private var votingKeyField: DashInputField! + private var continueButton: ActionButton! + private var viewModel: VotingViewModel = VotingViewModel.shared + + override func viewWillDisappear(_ animated: Bool) { + votingKeyField.resignFirstResponder() + + super.viewWillDisappear(animated) + } + + + static func controller() -> EnterVotingKeyViewController { + EnterVotingKeyViewController() + } + + override func viewDidLoad() { + super.viewDidLoad() + + configureHierarchy() + updateView() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + votingKeyField.becomeFirstResponder() + } +} + +extension EnterVotingKeyViewController { + private func configureHierarchy() { + view.backgroundColor = .dw_secondaryBackground() + + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.spacing = 8 + view.addSubview(stackView) + + let titleLabel = UILabel() + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = UIFont.dw_boldFont(ofSize: 28) + titleLabel.textColor = UIColor.dw_label() + titleLabel.text = NSLocalizedString("Enter your voting key", comment: "Voting") + stackView.addArrangedSubview(titleLabel) + + let subtitleLabel = UILabel() + subtitleLabel.translatesAutoresizingMaskIntoConstraints = false + subtitleLabel.font = UIFont.dw_regularFont(ofSize: 15) + subtitleLabel.textColor = UIColor.dw_secondaryText() + subtitleLabel.numberOfLines = 0 + subtitleLabel.text = NSLocalizedString("You can enter your key in any of the following formats: WIF/base58/base64/hex", comment: "Voting") + stackView.addArrangedSubview(subtitleLabel) + + stackView.setCustomSpacing(15, after: subtitleLabel) + votingKeyField = DashInputField() + votingKeyField.autocorrectionType = .no + votingKeyField.spellCheckingType = .no + votingKeyField.autocapitalizationType = .none + votingKeyField.textDidChange = { [weak self] _ in + self?.updateView() + } + votingKeyField.isEnabled = true + votingKeyField.placeholder = NSLocalizedString("Masternode Voting Key", comment: "Voting") + votingKeyField.translatesAutoresizingMaskIntoConstraints = false + stackView.addArrangedSubview(votingKeyField) + + continueButton = ActionButton() + continueButton.setTitle(NSLocalizedString("Verify", comment: "Voting"), for: .normal) + continueButton.translatesAutoresizingMaskIntoConstraints = false + continueButton.addAction(.touchUpInside) { [weak self] _ in + self?.continueButtonAction() + } + view.addSubview(continueButton) + + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 15), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -15), + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0), + + continueButton.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), + continueButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor), + continueButton.heightAnchor.constraint(equalToConstant: 46), + view.keyboardLayoutGuide.topAnchor.constraint(equalToSystemSpacingBelow: continueButton.bottomAnchor, multiplier: 1.0), + ]) + } + + private func updateView() { + continueButton.isEnabled = !votingKeyField.text.isEmpty + votingKeyField.errorMessage = nil + } + + private func continueButtonAction() { + if viewModel.addMasternodeKey(key: votingKeyField.text) { + let vc = CastVoteViewController.controller() + + if self.navigationController?.previousController is CastVoteViewController { + self.navigationController?.popViewController(animated: true) + } else { + self.navigationController?.replaceLast(with: vc, animated: true) + } + } else { + votingKeyField.errorMessage = NSLocalizedString("You have entered an invalid key", comment: "Voting") + } + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/QuickVoteViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/QuickVoteViewController.swift new file mode 100644 index 000000000..d4bc143a3 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/QuickVoteViewController.swift @@ -0,0 +1,102 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +class QuickVoteViewController: SheetViewController { + private var viewModel: VotingViewModel = VotingViewModel.shared + private var totalRequests: Int! + + static func controller(_ totalRequests: Int) -> QuickVoteViewController { + let vc = QuickVoteViewController() + vc.totalRequests = totalRequests + return vc + } + + override func viewDidLoad() { + super.viewDidLoad() + configureHierarchy() + } + + override func contentViewHeight() -> CGFloat { + return 210 + } +} + +extension QuickVoteViewController { + private func configureHierarchy() { + let stackView = UIStackView() + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.axis = .vertical + stackView.contentMode = .center + view.addSubview(stackView) + + let titleLabel = UILabel() + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = UIFont.dw_boldFont(ofSize: 22) + titleLabel.textColor = UIColor.dw_label() + titleLabel.text = NSLocalizedString("Quick Voting", comment: "Voting") + titleLabel.textAlignment = .center + stackView.addArrangedSubview(titleLabel) + + let subtitleLabel = UILabel() + subtitleLabel.translatesAutoresizingMaskIntoConstraints = false + subtitleLabel.font = UIFont.dw_regularFont(ofSize: 13) + subtitleLabel.textColor = UIColor.dw_label() + subtitleLabel.numberOfLines = 0 + subtitleLabel.textAlignment = .center + subtitleLabel.text = String.localizedStringWithFormat(NSLocalizedString("By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first", comment: "Voting"), totalRequests) + stackView.addArrangedSubview(subtitleLabel) + stackView.setCustomSpacing(35, after: subtitleLabel) + + let buttonStack = UIStackView() + buttonStack.translatesAutoresizingMaskIntoConstraints = false + buttonStack.axis = .horizontal + buttonStack.distribution = .fill + buttonStack.spacing = 10 + stackView.addArrangedSubview(buttonStack) + + let cancelButton = GrayButton() + cancelButton.setTitle(NSLocalizedString("Cancel", comment: ""), for: .normal) + cancelButton.translatesAutoresizingMaskIntoConstraints = false + cancelButton.addAction(.touchUpInside) { [weak self] _ in + self?.dismiss(animated: true) + } + buttonStack.addArrangedSubview(cancelButton) + + let continueButton = ActionButton() + continueButton.setTitle(NSLocalizedString("Vote for All", comment: "Voting"), for: .normal) + continueButton.translatesAutoresizingMaskIntoConstraints = false + continueButton.addAction(.touchUpInside) { [weak self] _ in + self?.viewModel.voteForAllFirstSubmitted() + self?.dismiss(animated: true) + } + buttonStack.addArrangedSubview(continueButton) + + view.backgroundColor = .dw_background() + + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 15), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -15), + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 25), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10), + + cancelButton.heightAnchor.constraint(equalToConstant: 48), + continueButton.heightAnchor.constraint(equalToConstant: 48) + ]) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/UsernameRequestDetailsViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/UsernameRequestDetailsViewController.swift new file mode 100644 index 000000000..dfad5c576 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/UsernameRequestDetailsViewController.swift @@ -0,0 +1,114 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +class UsernameRequestDetailsViewController: UIViewController { + private var cancellableBag = Set() + private var viewModel: VotingViewModel = VotingViewModel.shared + + @IBOutlet var titleLabel: UILabel! + @IBOutlet var subtitleLabel: UILabel! + @IBOutlet var usernameLabel: UILabel! + @IBOutlet var username: UILabel! + @IBOutlet var linkLabel: UILabel! + @IBOutlet var link: UILabel! + @IBOutlet var linkPanel: UIView! + @IBOutlet var identityLabel: UILabel! + @IBOutlet var identity: UILabel! + @IBOutlet var voteButton: UIButton! + + static func controller(with request: UsernameRequest) -> UsernameRequestDetailsViewController { + let vc = vc(UsernameRequestDetailsViewController.self, from: sb("UsernameVoting")) + vc.setRequest(request) + + return vc + } + + override func viewDidLoad() { + super.viewDidLoad() + configureLayout() + } + + @IBAction + func voteAction() { + let vc: UIViewController + + if viewModel.selectedRequest?.isApproved == true { + viewModel.revokeVote(of: viewModel.selectedRequest!.requestId) + self.navigationController?.popViewController(animated: true) + return + } else if viewModel.masternodeKeys.isEmpty { + vc = EnterVotingKeyViewController.controller() + } else { + vc = CastVoteViewController.controller() + } + + self.navigationController?.pushViewController(vc, animated: true) + } + + private func setRequest(_ request: UsernameRequest) { + viewModel.selectedRequest = request + } +} + + +extension UsernameRequestDetailsViewController { + private func configureLayout() { + titleLabel.text = NSLocalizedString("Request details", comment: "Voting") + subtitleLabel.text = NSLocalizedString("Review the posting below to verify the ownership of this username", comment: "Voting") + usernameLabel.text = NSLocalizedString("Username", comment: "Voting") + linkLabel.text = NSLocalizedString("Link", comment: "Voting") + identityLabel.text = NSLocalizedString("Identity", comment: "Voting") + + if let request = viewModel.selectedRequest { + username.text = request.username + identity.text = request.identity + + if let url = request.link { + link.text = url + linkPanel.isHidden = false + let linkTap = UITapGestureRecognizer(target: self, action: #selector(openLink)) + linkPanel.addGestureRecognizer(linkTap) + } + + voteButton.layer.cornerRadius = 8 + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 15) + ] + + if request.isApproved { + voteButton.backgroundColor = .dw_red().withAlphaComponent(0.1) + voteButton.tintColor = .dw_red() + let attributedTitle = NSAttributedString(string: NSLocalizedString("Cancel Approval", comment: "Voting"), attributes: attributes) + voteButton.setAttributedTitle(attributedTitle, for: .normal) + } else { + voteButton.backgroundColor = .dw_dashBlue() + voteButton.tintColor = .white + let attributedTitle = NSAttributedString(string: NSLocalizedString("Vote to Approve", comment: "Voting"), attributes: attributes) + voteButton.setAttributedTitle(attributedTitle, for: .normal) + } + } + } + + @objc + private func openLink() { + if let url = viewModel.selectedRequest?.link { + UIApplication.shared.open(URL(string: url)!) + } + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/UsernameVoting.storyboard b/DashWallet/Sources/UI/DashPay/Voting/UsernameVoting.storyboard new file mode 100644 index 000000000..5a276965d --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/UsernameVoting.storyboard @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/DashPay/Voting/UsernameVotingViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/UsernameVotingViewController.swift new file mode 100644 index 000000000..3dc1d7f3a --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/UsernameVotingViewController.swift @@ -0,0 +1,247 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import Combine + +class UsernameVotingViewController: UIViewController { + private var cancellableBag = Set() + private var viewModel: VotingViewModel = VotingViewModel.shared + + @IBOutlet private var titleLabel: UILabel! + @IBOutlet private var tableView: UITableView! + @IBOutlet private var filterView: UIView! + @IBOutlet private var filterViewTitle: UILabel! + @IBOutlet private var filterViewSubtitle: UILabel! + private var quickVotingButton: UIBarButtonItem! + + @objc func quickVoteActions() { + present(QuickVoteViewController.controller(viewModel.filteredRequests.count), animated: true) + } + + private var dataSource: DataSource! = nil + + var headerView: VotingHeaderView? { + tableView.tableHeaderView as? VotingHeaderView + } + + @objc + static func controller() -> UsernameVotingViewController { + vc(UsernameVotingViewController.self, from: sb("UsernameVoting")) + } + + override func viewDidLoad() { + super.viewDidLoad() + + viewModel.refresh() + configureLayout() + configureDataSource() + configureObservers() + } + + override func viewDidLayoutSubviews() { + if viewModel.shouldShowFirstTimeInfo { + viewModel.shouldShowFirstTimeInfo = false + + let alert = UIAlertController(title: NSLocalizedString("Vote only on duplicates", comment: "Voting"), message: NSLocalizedString("You can review all requests but you only need to vote on duplicates", comment: "Voting"), preferredStyle: .alert) + let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .cancel) + alert.addAction(okAction) + present(alert, animated: true) + } + } + + @IBAction + func showFilters() { + view.endEditing(true) + + let vc = VotingFiltersViewController.controller() + vc.delegate = self + vc.filters = viewModel.filters + + let nvc = UINavigationController(rootViewController: vc) + present(nvc, animated: true) + } +} + +extension UsernameVotingViewController { + private func configureLayout() { + titleLabel.text = NSLocalizedString("Username voting", comment: "Voting") + titleLabel.isUserInteractionEnabled = true + let tap = UITapGestureRecognizer(target: self, action: #selector(mockData)) + titleLabel.addGestureRecognizer(tap) + + tableView.estimatedRowHeight = 200 + tableView.rowHeight = UITableView.automaticDimension + tableView.separatorStyle = .none + tableView.allowsSelection = false + tableView.keyboardDismissMode = .onDrag + tableView.register(GroupedRequestCell.self, forCellReuseIdentifier: GroupedRequestCell.description()) + + let headerNib = UINib(nibName: "VotingHeaderView", bundle: nil) + + if let headerView = headerNib.instantiate(withOwner: nil, options: nil).first as? VotingHeaderView { + tableView.tableHeaderView = headerView + headerView.filterButtonHandler = { [weak self] in + self?.showFilters() + } + headerView.set(searchQuerytChangedHandler: self) + } + + filterView.addTopBorder(with: UIColor(red: 0.96, green: 0.96, blue: 0.97, alpha: 1), andWidth: 1) + let filterViewTap = UITapGestureRecognizer(target: self, action: #selector(showFilters)) + filterView.addGestureRecognizer(filterViewTap) + filterViewTitle.text = NSLocalizedString("Filtered by", comment: "") + + let button = UIBarButtonItem(title: NSLocalizedString("Quick Voting", comment: "Voting"), style: .plain, target: self, action: #selector(quickVoteActions)) + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 13), + .foregroundColor: UIColor.dw_dashBlue() + ] + button.setTitleTextAttributes(attributes, for: .normal) + button.setTitleTextAttributes(attributes, for: .highlighted) + self.quickVotingButton = button + } + + private func configureObservers() { + viewModel.$filteredRequests + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] data in + self?.updateQuickVoteButton() + self?.headerView?.set(duplicateAmount: data.count) + self?.reloadDataSource(data: data) + } + .store(in: &cancellableBag) + + viewModel.$lastVoteAction + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] action in + switch action { + case .approved: + self?.view.dw_showInfoHUD(withText: NSLocalizedString("Your vote was submitted", comment: "Voting")) + case .revoked: + self?.view.dw_showInfoHUD(withText: NSLocalizedString("Your vote was cancelled", comment: "")) + default: + break + } + self?.viewModel.onVoteActionHandled() + } + .store(in: &cancellableBag) + + viewModel.$masternodeKeys + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.updateQuickVoteButton() + } + .store(in: &cancellableBag) + } + + @objc func mockData() { + viewModel.addMockRequest() + } + + private func updateQuickVoteButton() { + let requests = viewModel.filteredRequests + let keys = viewModel.masternodeKeys + self.navigationItem.rightBarButtonItem = requests.isEmpty || keys.isEmpty ? + nil : self.quickVotingButton + } +} + +extension UsernameVotingViewController: VotingFiltersViewControllerDelegate { + func apply(filters: VotingFilters) { + viewModel.apply(filters: filters) + headerView?.set(filterLabel: filters.filterBy?.localizedString ?? "") + filterViewSubtitle.text = filters.localizedDescription + } +} + +extension UsernameVotingViewController { + enum Section: CaseIterable { + case main + } + + class DataSource: UITableViewDiffableDataSource { } + + private func configureDataSource() { + dataSource = DataSource(tableView: tableView) { [weak self] + (tableView: UITableView, indexPath: IndexPath, item: GroupedUsernames) -> UITableViewCell? in + + guard self != nil else { return UITableViewCell() } + let cell = tableView.dequeueReusableCell(withIdentifier: GroupedRequestCell.description(), for: indexPath) + + if let groupedCell = cell as? GroupedRequestCell { + groupedCell.configure(withModel: item.requests) + groupedCell.onHeightChanged = { + tableView.performBatchUpdates(nil) + } + groupedCell.onRequestSelected = { [weak self] request in + self?.openDetails(for: request) + } + } + + return cell + } + } + + private func reloadDataSource(data: [GroupedUsernames]) { + var snapshot = NSDiffableDataSourceSnapshot() + snapshot.appendSections([.main]) + snapshot.appendItems(data) + dataSource.apply(snapshot, animatingDifferences: false) + dataSource.defaultRowAnimation = .none + } + + private func openDetails(for request: UsernameRequest) { + let vc = UsernameRequestDetailsViewController.controller(with: request) + self.navigationController?.pushViewController(vc, animated: true) + } +} + +extension UsernameVotingViewController: UISearchBarDelegate { + public func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { + viewModel.searchQuery = searchText + } + + func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { + searchBar.resignFirstResponder() + } +} + +extension UITableView { + public override var intrinsicContentSize: CGSize { + layoutIfNeeded() + return contentSize + } + + public override var contentSize: CGSize { + didSet { + invalidateIntrinsicContentSize() + } + } +} + +extension UIView { + func addTopBorder(with color: UIColor, andWidth borderWidth: CGFloat) { + let border = CALayer() + border.backgroundColor = color.cgColor + border.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: borderWidth) + self.layer.addSublayer(border) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/VotingFiltersViewController.swift b/DashWallet/Sources/UI/DashPay/Voting/VotingFiltersViewController.swift new file mode 100644 index 000000000..ed30d1eb1 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/VotingFiltersViewController.swift @@ -0,0 +1,309 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import CoreLocation +import UIKit + +// MARK: - VotingFiltersViewControllerDelegate + +protocol VotingFiltersViewControllerDelegate: AnyObject { + func apply(filters: VotingFilters) +} + +// MARK: - VotingFiltersViewController + +class VotingFiltersViewController: UIViewController { + class DataSource: UITableViewDiffableDataSource { + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + if let identifier = sectionIdentifier(for: section) { + return identifier.title + } + + return nil + } + } + + enum Section: CaseIterable { + case sortBy + case approvedType + case onlyDuplicates + case onlyRequestsWithLinks + case resetFilters + + var title: String? { + switch self { + case .approvedType: return NSLocalizedString("Type", comment: "Voting") + case .sortBy: return NSLocalizedString("Sort by", comment: "Voting") + default: + return nil + } + } + + var items: [VotingFilterItem] { + switch self { + case .sortBy: + return [.dateDesc, .dateAsc, .votesDesc, .votesAsc] + case .approvedType: + return [.typeAll, .typeApproved, .typeNotApproved] + case .onlyDuplicates: + return [.onlyDuplicates] + case .onlyRequestsWithLinks: + return [.onlyRequestsWithLinks] + case .resetFilters: + return [.reset] + } + } + } + + public weak var delegate: VotingFiltersViewControllerDelegate? + + private var model = VotingFiltersModel() + private var dataSource: DataSource! = nil + private var currentSnapshot: NSDiffableDataSourceSnapshot! = nil + private var selectedCells: [VotingFilterItem: UITableViewCell] = [:] + + var filters: VotingFilters? { + didSet { + model.selected = filters?.items ?? [] + model.initialFilters = filters?.items ?? [] + } + } + + @IBOutlet var tableView: UITableView! + @IBOutlet var applyButton: UIBarButtonItem! + @IBOutlet var cancelButton: UIBarButtonItem! + + private weak var resetCell: FilterItemResetCell? + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + @IBAction + func cancelAction() { + dismiss(animated: true) + } + + @IBAction + func applyAction() { + delegate?.apply(filters: model.appliedFilters) + dismiss(animated: true) + } + + override func viewDidLoad() { + super.viewDidLoad() + + configureHierarchy() + configureDataSource() + reloadDataSource() + } + + class func controller() -> VotingFiltersViewController { + VotingFiltersViewController.initiate(from: sb("UsernameVoting")) + } +} + +// MARK: UITableViewDelegate + +extension VotingFiltersViewController: UITableViewDelegate { + func toggleCells(for items: [VotingFilterItem]) { + for item in items { + if let cell = selectedCells[item] { + cell.setSelected(false, animated: false) + selectedCells[item] = nil + } + } + } + + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { + if let filterCell = cell as? VotingFilterItemSelectableCell, let item = dataSource.itemIdentifier(for: indexPath), model.isFilterSelected(item) { + tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) + filterCell.setSelected(true, animated: true) + selectedCells[item] = filterCell + return + } + + if let cell = cell as? FilterItemResetCell { + cell.isEnabled = model.canReset + resetCell = cell + return + } + } + + func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { + if cell is VotingFilterItemSelectableCell, + let item = dataSource.itemIdentifier(for: indexPath) { + selectedCells[item] = nil + } + + if cell is FilterItemResetCell { + resetCell = nil + return + } + } + + func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + if tableView.cellForRow(at: indexPath) is VotingFilterItemSelectableCell, let item = dataSource.itemIdentifier(for: indexPath) { + let deselected = model.toggle(filter: item) + + if !deselected { + tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) + } + updateApplyButton() + updateResetButton() + return + } + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let identifier = dataSource.identifier(for: indexPath.section) + + if let filterCell = tableView.cellForRow(at: indexPath) as? VotingFilterItemSelectableCell, + let item = dataSource.itemIdentifier(for: indexPath) { + selectedCells[item] = filterCell + let selected = model.toggle(filter: item) + + if !selected { + tableView.deselectRow(at: indexPath, animated: true) + } + + updateApplyButton() + updateResetButton() + toggleCells(for: item.itemsToUnselect) + return + } + + if let identifier, identifier == .resetFilters { + model.resetFilters() + updateApplyButton() + updateResetButton() + tableView.reloadData() + return + } + + tableView.deselectRow(at: indexPath, animated: true) + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + guard let dataSource else { return nil } + + let identifier = dataSource.identifier(for: section) + let title = identifier?.title + + let label = UILabel() + label.font = .dw_mediumFont(ofSize: 13) + label.textColor = .dw_tertiaryText() + label.text = title + label.translatesAutoresizingMaskIntoConstraints = false + + let view = UIView() + view.addSubview(label) + + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15), + label.topAnchor.constraint(equalTo: view.topAnchor), + label.trailingAnchor.constraint(equalTo: view.trailingAnchor), + label.bottomAnchor.constraint(equalTo: view.bottomAnchor), + ]) + + return view + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + if section < 2 { + return 30 + } + + return CGFloat.leastNonzeroMagnitude + } +} + +extension VotingFiltersViewController { + private func configureHierarchy() { + title = NSLocalizedString("Filters", comment: "") + + tableView.allowsMultipleSelection = true + tableView.delegate = self + + view.backgroundColor = .dw_secondaryBackground() + + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 14) + ] + cancelButton.setTitleTextAttributes(attributes, for: .normal) + applyButton.setTitleTextAttributes(attributes, for: .normal) + cancelButton.setTitleTextAttributes(attributes, for: .selected) + applyButton.setTitleTextAttributes(attributes, for: .selected) + applyButton.setTitleTextAttributes(attributes, for: .disabled) + + updateApplyButton() + updateResetButton() + } + + private func configureDataSource() { + dataSource = DataSource(tableView: tableView) { [weak self] + (tableView: UITableView, indexPath: IndexPath, item: VotingFilterItem) -> UITableViewCell? in + + guard self != nil else { return UITableViewCell() } + let cell = tableView.dequeueReusableCell(withIdentifier: item.cellIdentifier, for: indexPath) + cell.selectionStyle = .none + + if let filterCell = cell as? VotingFilterItemSelectableCell { + filterCell.update(with: item) + } + + return cell + } + } + + func reloadDataSource() { + let sections: [Section] = [.sortBy, .approvedType, .onlyDuplicates, .onlyRequestsWithLinks, .resetFilters] + + currentSnapshot = NSDiffableDataSourceSnapshot() + currentSnapshot.appendSections(sections) + + for group in sections { + currentSnapshot.appendItems(group.items, toSection: group) + } + + dataSource.apply(currentSnapshot, animatingDifferences: false) + dataSource.defaultRowAnimation = .none + } + + private func updateApplyButton() { + applyButton.isEnabled = model.canApply + } + + private func updateResetButton() { + resetCell?.isEnabled = model.canReset + } +} + + +extension VotingFiltersViewController.DataSource { + final func identifier(for section: Int) -> VotingFiltersViewController.Section? { + let identifier: VotingFiltersViewController.Section? + + if #available(iOS 15.0, *) { + identifier = self.sectionIdentifier(for: section) + } else { + identifier = snapshot().sectionIdentifiers[section] + } + + return identifier + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.swift b/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.swift new file mode 100644 index 000000000..0629d1b19 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.swift @@ -0,0 +1,64 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +class VotingHeaderView: UIView { + var filterButtonHandler: (() -> ())? + + @IBOutlet private var subtitleLabel: UILabel! + @IBOutlet private var filterLabel: UILabel! + @IBOutlet private var amountLabel: UILabel! + @IBOutlet private var filterButton: UIButton! + @IBOutlet private var searchBar: UISearchBar! + + @IBAction + private func onFilterButtonTap() { + filterButtonHandler?() + } + + override func awakeFromNib() { + super.awakeFromNib() + configureLayout() + } + + func set(filterLabel: String) { + self.filterLabel.text = filterLabel + } + + func set(duplicateAmount: Int) { + self.amountLabel.text = String.localizedStringWithFormat(NSLocalizedString("%ld duplicates", comment: "Voting"), duplicateAmount) + } + + func set(searchQuerytChangedHandler: UISearchBarDelegate) { + searchBar.delegate = searchQuerytChangedHandler + } + + private func configureLayout() { + subtitleLabel.text = NSLocalizedString("As a masternode owner you can vote to approve requested usernames before users will be able to create it.", comment: "Voting") + searchBar.placeholder = NSLocalizedString("Search by username", comment: "Voting") + searchBar.searchTextField.font = .dw_regularFont(ofSize: 15) + filterLabel.text = VotingFilters.defaultFilters.filterBy?.localizedString ?? "" + + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont.dw_mediumFont(ofSize: 13), + .foregroundColor: UIColor.dw_dashBlue() + ] + let attributedTitle = NSAttributedString(string: NSLocalizedString("Filter", comment: ""), attributes: attributes) + filterButton.setAttributedTitle(attributedTitle, for: .normal) + } +} diff --git a/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.xib b/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.xib new file mode 100644 index 000000000..fe41b4643 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/VotingHeaderView.xib @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/DashPay/Voting/VotingViewModel.swift b/DashWallet/Sources/UI/DashPay/Voting/VotingViewModel.swift new file mode 100644 index 000000000..e83e7bec0 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Voting/VotingViewModel.swift @@ -0,0 +1,208 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +enum VoteAction { + case none + case approved + case revoked +} + +class VotingViewModel { + private let prefs = VotingPrefs.shared + private var nameCount = 1 + private var dao: UsernameRequestsDAO = UsernameRequestsDAOImpl.shared + private var cancellableBag = Set() + private var groupedRequests: [GroupedUsernames] = [] + private var validKeys: [String] = [ // TODO: temp + "kn2GwaSZkoY8qg6i2dPCpDtDoBCftJWMzZXtHDDJ1w7PjFYfq", + "n6YtJ7pdDYPTa57imEHEp8zinq1oNGUdwZQdnGk1MMpCWBHEq", + "maEiRZeKXNLZovNqoS3HkmZJGmACbro7s3eC8GenExLF7QMQs" + ] + + private(set) var filters = VotingFilters.defaultFilters + @Published private(set) var masternodeKeys: [MasternodeKey] = [] + @Published private(set) var filteredRequests: [GroupedUsernames] = [] + @Published var searchQuery: String = "" + @Published var lastVoteAction: VoteAction = .none + var selectedRequest: UsernameRequest? = nil + + public static let shared: VotingViewModel = .init() + + var shouldShowFirstTimeInfo: Bool { + get { return !prefs.votingInfoShown } + set { prefs.votingInfoShown = !newValue } + } + + init() { + $searchQuery + .throttle(for: .milliseconds(500), scheduler: RunLoop.main, latest: true) + .removeDuplicates() + .sink { [weak self] text in + self?.performSearch(text: text) + } + .store(in: &cancellableBag) + } + + func apply(filters: VotingFilters) { + self.filters = filters + refresh() + } + + func addMasternodeKey(key: String) -> Bool { + if validKeys.contains(key) { + masternodeKeys.append(MasternodeKey(key: key, ip: "182.151.12.\(masternodeKeys.count)")) + return true + } + + return false + } + + func refresh() { + Task { + let requests: [UsernameRequest] + + if filters.onlyDuplicates ?? false { + requests = await dao.duplicates(onlyWithLinks: filters.onlyWithLinks ?? false) + } else { + requests = await dao.all(onlyWithLinks: filters.onlyWithLinks ?? false) + } + + self.groupedRequests = Dictionary(grouping: requests, by: { $0.username }) + .map { GroupedUsernames(username: $0.key, requests: $0.value.sortAndFilter(by: filters)) } + .filter { !$0.requests.isEmpty } + .sorted { $0.username < $1.username } + self.filteredRequests = self.groupedRequests.filter { $0.username.starts(with: searchQuery) } + } + } +} + +// MARK: - Search + +extension VotingViewModel { + private func performSearch(text: String) { + self.filteredRequests = self.groupedRequests.filter { $0.username.starts(with: searchQuery) } + } +} + +// MARK: - Sorting and filtering + +extension [UsernameRequest] { + func sortAndFilter(by filters: VotingFilters) -> [UsernameRequest] { + let sortByOption = filters.sortBy + let sorted: [UsernameRequest] + + switch sortByOption { + case .dateAsc: + sorted = self.sorted { $0.createdAt < $1.createdAt } + case .datesDesc: + sorted = self.sorted { $0.createdAt > $1.createdAt } + case .votesAsc: + sorted = self.sorted { $0.votes < $1.votes } + case .votesDesc: + sorted = self.sorted { $0.votes > $1.votes } + default: + sorted = self + } + + let filterOption = filters.filterBy + let result: [UsernameRequest] + + switch filterOption { + case .approved: + result = sorted.filter { $0.isApproved } + case .notApproved: + result = sorted.filter { !$0.isApproved } + default: + result = sorted + } + + return result + } +} + +// MARK: - Voting + +extension VotingViewModel { + func vote(for requestId: String) { + Task { + if var copy = await dao.get(byRequestId: requestId) { + copy.votes += masternodeKeys.count + copy.isApproved = true + await dao.update(dto: copy) + lastVoteAction = .approved + refresh() + } + } + } + + func revokeVote(of requestId: String) { + Task { + if var copy = await dao.get(byRequestId: requestId) { + copy.votes = max(copy.votes - masternodeKeys.count, 0) + copy.isApproved = false + await dao.update(dto: copy) + lastVoteAction = .revoked + refresh() + } + } + } + + func voteForAllFirstSubmitted() { + Task { + let submittedFirst = filteredRequests.compactMap { group in + group.requests + .sorted { $0.createdAt < $1.createdAt } + .first?.requestId + } + await dao.vote(for: submittedFirst, voteIncrement: masternodeKeys.count) + lastVoteAction = .approved + refresh() + } + } + + func onVoteActionHandled() { + lastVoteAction = .none + } +} + + +// TODO: remove when not needed + +extension VotingViewModel { + func addMockRequest() { + Task { + nameCount += 1 + let now = Date().timeIntervalSince1970 + let from: TimeInterval = 1658290321 + let randomValue = Double.random(in: from.. + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPWelcomeCollectionViewController : UIViewController + +- (BOOL)canSwitchToNext; +- (void)switchToNext; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeCollectionViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeCollectionViewController.m new file mode 100644 index 000000000..2c5d9c91d --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeCollectionViewController.m @@ -0,0 +1,228 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPWelcomeCollectionViewController.h" + +#import "DWControllerCollectionView.h" +#import "DWDPWelcomePageViewController.h" +#import "DWPassthroughStackView.h" +#import "DWPassthroughView.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const SPACE_BEFORE_PAGE = 225; + +@interface DWDPWelcomeCollectionViewController () + +@property (null_resettable, nonatomic, strong) DWControllerCollectionView *controllerCollectionView; +@property (null_resettable, nonatomic, strong) NSArray *controllers; +@property (nullable, nonatomic, strong) NSIndexPath *prevIndexPathAtCenter; +@property (null_resettable, nonatomic, strong) UIPageControl *pageControl; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPWelcomeCollectionViewController + +- (BOOL)canSwitchToNext { + return [self currentIndexPath].item < self.controllers.count - 1; +} + +- (void)switchToNext { + NSAssert([self canSwitchToNext], @"Inconsistent state"); + + NSIndexPath *indexPath = [NSIndexPath indexPathForItem:[self currentIndexPath].item + 1 inSection:0]; + [self scrollToIndexPath:indexPath animated:YES]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_backgroundColor]; + + [self.view addSubview:self.controllerCollectionView]; + + DWPassthroughView *imageLikeView = [[DWPassthroughView alloc] init]; + imageLikeView.translatesAutoresizingMaskIntoConstraints = NO; + + DWPassthroughStackView *stack = [[DWPassthroughStackView alloc] initWithArrangedSubviews:@[ imageLikeView, self.pageControl ]]; + stack.translatesAutoresizingMaskIntoConstraints = NO; + stack.spacing = 35; + stack.axis = UILayoutConstraintAxisVertical; + [self.view addSubview:stack]; + + UIView *parent = self.view; + CGFloat padding = 20; + [NSLayoutConstraint activateConstraints:@[ + [self.controllerCollectionView.topAnchor constraintEqualToAnchor:parent.topAnchor], + [self.controllerCollectionView.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor], + [parent.trailingAnchor constraintEqualToAnchor:self.controllerCollectionView.trailingAnchor], + [parent.bottomAnchor constraintEqualToAnchor:self.controllerCollectionView.bottomAnchor], + + [stack.topAnchor constraintGreaterThanOrEqualToAnchor:parent.topAnchor], + [parent.bottomAnchor constraintGreaterThanOrEqualToAnchor:stack.bottomAnchor], + [stack.centerYAnchor constraintEqualToAnchor:parent.centerYAnchor], + + [stack.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor + constant:padding], + [parent.trailingAnchor constraintEqualToAnchor:stack.trailingAnchor + constant:padding], + + [imageLikeView.heightAnchor constraintEqualToConstant:SPACE_BEFORE_PAGE], + ]]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleDefault; +} + +- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + + self.prevIndexPathAtCenter = [self currentIndexPath]; + + [coordinator + animateAlongsideTransition:nil + completion:^(id _Nonnull context) { + [self.controllerCollectionView.collectionViewLayout invalidateLayout]; + [self scrollToIndexPath:self.prevIndexPathAtCenter animated:NO]; + }]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self.controllerCollectionView reloadData]; +} + +#pragma mark UICollectionViewDelegateFlowLayout + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + return collectionView.bounds.size; +} + +- (CGPoint)collectionView:(UICollectionView *)collectionView targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset { + NSIndexPath *indexPath = self.prevIndexPathAtCenter; + if (!indexPath) { + return proposedContentOffset; + } + + UICollectionViewLayoutAttributes *attributes = + [collectionView layoutAttributesForItemAtIndexPath:indexPath]; + if (!attributes) { + return proposedContentOffset; + } + + const CGPoint newOriginForOldCenter = attributes.frame.origin; + return newOriginForOldCenter; +} + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + const CGFloat offset = scrollView.contentOffset.x; + const CGFloat pageWidth = CGRectGetWidth(scrollView.bounds); + if (pageWidth == 0.0) { + return; + } + const NSInteger pageCount = self.pageControl.numberOfPages; + const NSInteger page = floor((offset - pageWidth / pageCount) / pageWidth) + 1; + self.pageControl.currentPage = page; +} + +#pragma mark - Private + +- (nullable NSIndexPath *)currentIndexPath { + const CGPoint center = [self.view convertPoint:self.controllerCollectionView.center toView:self.controllerCollectionView]; + NSIndexPath *indexPath = [self.controllerCollectionView indexPathForItemAtPoint:center]; + + return indexPath; +} + +- (void)scrollToIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated { + NSParameterAssert(indexPath); + if (!indexPath) { + return; + } + + [self.controllerCollectionView scrollToItemAtIndexPath:indexPath + atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally + animated:animated]; +} + +#pragma mark - DWControllerCollectionViewDataSource + +- (NSInteger)numberOfItemsInControllerCollectionView:(DWControllerCollectionView *)view { + return self.controllers.count; +} + +- (UIViewController *)controllerCollectionView:(DWControllerCollectionView *)view + controllerForIndexPath:(NSIndexPath *)indexPath { + return self.controllers[indexPath.item]; +} + +- (DWControllerCollectionView *)controllerCollectionView { + if (_controllerCollectionView == nil) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.sectionInset = UIEdgeInsetsZero; + layout.minimumLineSpacing = 0; + layout.minimumInteritemSpacing = 0; + + DWControllerCollectionView *collectionView = + [[DWControllerCollectionView alloc] initWithFrame:self.view.bounds + collectionViewLayout:layout]; + collectionView.translatesAutoresizingMaskIntoConstraints = NO; + collectionView.controllerDataSource = self; + collectionView.backgroundColor = [UIColor dw_backgroundColor]; + collectionView.delegate = self; + collectionView.pagingEnabled = YES; + collectionView.containerViewController = self; + collectionView.showsHorizontalScrollIndicator = NO; + _controllerCollectionView = collectionView; + } + return _controllerCollectionView; +} + +- (UIPageControl *)pageControl { + if (_pageControl == nil) { + _pageControl = [[UIPageControl alloc] init]; + _pageControl.translatesAutoresizingMaskIntoConstraints = NO; + _pageControl.numberOfPages = self.controllers.count; + _pageControl.currentPage = 0; + _pageControl.currentPageIndicatorTintColor = [UIColor dw_dashBlueColor]; + _pageControl.pageIndicatorTintColor = [UIColor dw_lightBlueColor]; + _pageControl.userInteractionEnabled = NO; + } + return _pageControl; +} + +- (NSArray *)controllers { + if (_controllers == nil) { + _controllers = @[ + [[DWDPWelcomePageViewController alloc] initWithIndex:0], + [[DWDPWelcomePageViewController alloc] initWithIndex:1], + [[DWDPWelcomePageViewController alloc] initWithIndex:2], + ]; + } + return _controllers; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.h b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.h new file mode 100644 index 000000000..e2827c78a --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPWelcomePageViewController : UIViewController + +- (instancetype)initWithIndex:(NSUInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.m new file mode 100644 index 000000000..7bc9bb068 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomePageViewController.m @@ -0,0 +1,134 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPWelcomePageViewController.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPWelcomePageViewController () + +@property (readonly, assign, nonatomic) NSUInteger index; + +@property (null_resettable, strong, nonatomic) UIImageView *imageView; +@property (null_resettable, strong, nonatomic) UILabel *titleLabel; +@property (null_resettable, strong, nonatomic) UILabel *descLabel; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPWelcomePageViewController + +- (instancetype)initWithIndex:(NSUInteger)index { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _index = index; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_backgroundColor]; + + UIStackView *stack = [[UIStackView alloc] initWithArrangedSubviews:@[ + self.imageView, + self.titleLabel, + self.descLabel, + ]]; + stack.translatesAutoresizingMaskIntoConstraints = NO; + stack.axis = UILayoutConstraintAxisVertical; + stack.spacing = 8; + [stack setCustomSpacing:68 afterView:self.imageView]; + [self.view addSubview:stack]; + + UIView *parent = self.view; + CGFloat padding = 20; + [NSLayoutConstraint activateConstraints:@[ + [stack.topAnchor constraintGreaterThanOrEqualToAnchor:parent.topAnchor], + [parent.bottomAnchor constraintGreaterThanOrEqualToAnchor:stack.bottomAnchor], + [stack.centerYAnchor constraintEqualToAnchor:parent.centerYAnchor], + + [stack.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor + constant:padding], + [parent.trailingAnchor constraintEqualToAnchor:stack.trailingAnchor + constant:padding], + ]]; +} + +- (UIImageView *)imageView { + if (_imageView == nil) { + UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dp_welcome_%ld", self.index]]; + _imageView = [[UIImageView alloc] initWithImage:image]; + _imageView.translatesAutoresizingMaskIntoConstraints = NO; + _imageView.contentMode = UIViewContentModeCenter; + } + return _imageView; +} + +- (UILabel *)titleLabel { + if (_titleLabel == nil) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + _titleLabel.font = [UIFont dw_mediumFontOfSize:20]; + _titleLabel.textColor = [UIColor dw_darkTitleColor]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + _titleLabel.numberOfLines = 0; + _titleLabel.adjustsFontForContentSizeCategory = YES; + NSString *text = nil; + if (self.index == 0) { + text = NSLocalizedString(@"Get your Username", nil); + } + else if (self.index == 1) { + text = NSLocalizedString(@"Add your Friends & Family", nil); + } + else { + text = NSLocalizedString(@"Personalize", nil); + } + _titleLabel.text = text; + } + return _titleLabel; +} + +- (UILabel *)descLabel { + if (_descLabel == nil) { + _descLabel = [[UILabel alloc] init]; + _descLabel.translatesAutoresizingMaskIntoConstraints = NO; + _descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + _descLabel.textColor = [UIColor dw_subheaderTextColor]; + _descLabel.textAlignment = NSTextAlignmentCenter; + _descLabel.numberOfLines = 0; + _descLabel.adjustsFontForContentSizeCategory = YES; + NSString *text = nil; + if (self.index == 0) { + text = NSLocalizedString(@"Pay to usernames. No more alphanumeric addresses", nil); + } + else if (self.index == 1) { + text = NSLocalizedString(@"Invite your family, find your friends by searching their usernames", nil); + } + else { + text = NSLocalizedString(@"Upload your picture, personalize your identity", nil); + } + _descLabel.text = text; + } + return _descLabel; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.h b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.h new file mode 100644 index 000000000..417335e98 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.h @@ -0,0 +1,38 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButtonViewController.h" + +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWDPWelcomeViewController; + +@protocol DWDPWelcomeViewControllerDelegate + +- (void)welcomeViewControllerDidFinish:(DWDPWelcomeViewController *)controller; + +@end + +@interface DWDPWelcomeViewController : DWBaseActionButtonViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.m new file mode 100644 index 000000000..7ca8f3f94 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWDPWelcomeViewController.m @@ -0,0 +1,73 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDPWelcomeViewController.h" + +#import "DWDPWelcomeCollectionViewController.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDPWelcomeViewController () + +@property (nonatomic, strong) DWDPWelcomeCollectionViewController *collection; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWDPWelcomeViewController + ++ (BOOL)isActionButtonInNavigationBar { + return NO; +} + +- (NSString *)actionButtonTitle { + return NSLocalizedString(@"Continue", nil); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.actionButton.enabled = YES; + self.view.backgroundColor = [UIColor dw_backgroundColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self setupContentView:contentView]; + + DWDPWelcomeCollectionViewController *collection = [[DWDPWelcomeCollectionViewController alloc] init]; + [self dw_embedChild:collection inContainer:contentView]; + self.collection = collection; +} + +- (void)actionButtonAction:(id)sender { + if ([self.collection canSwitchToNext]) { + [self.collection switchToNext]; + } + else { + [self.delegate welcomeViewControllerDidFinish:self]; + } +} + +#pragma mark - DWNavigationFullscreenable + +- (BOOL)requiresNoNavigationBar { + return YES; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.h b/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.h new file mode 100644 index 000000000..3be168517 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.h @@ -0,0 +1,38 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWInvitationFlowViewController; + +@protocol DWInvitationFlowViewControllerDelegate + +- (void)invitationFlowViewControllerDidFinish:(DWInvitationFlowViewController *)controller; + +@end + +@interface DWInvitationFlowViewController : UIViewController + +@property (nullable, nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.m new file mode 100644 index 000000000..d0d37feb0 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/DWInvitationFlowViewController.m @@ -0,0 +1,82 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationFlowViewController.h" + +#import "DWDPWelcomeViewController.h" +#import "DWGetStartedViewController.h" +#import "DWUIKit.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationFlowViewController () + +@property (nonatomic, strong) DWNavigationController *navController; + +@end + +NS_ASSUME_NONNULL_END + +@implementation DWInvitationFlowViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_backgroundColor]; + + DWDPWelcomeViewController *welcomeController = [[DWDPWelcomeViewController alloc] init]; + welcomeController.delegate = self; + DWNavigationController *navController = [[DWNavigationController alloc] initWithRootViewController:welcomeController]; + [self dw_embedChild:navController]; + self.navController = navController; +} + +#pragma mark - DWNavigationFullscreenable + +- (BOOL)requiresNoNavigationBar { + return YES; +} + +#pragma mark - DWDPWelcomeViewControllerDelegate + +- (void)welcomeViewControllerDidFinish:(DWDPWelcomeViewController *)controller { + DWGetStartedViewController *getStarted = [[DWGetStartedViewController alloc] initWithPage:DWGetStartedPage_1]; + getStarted.delegate = self; + [self.navController setViewControllers:@[ getStarted ] animated:YES]; +} + +#pragma mark - DWGetStartedViewControllerDelegate + +- (void)getStartedViewControllerDidContinue:(DWGetStartedViewController *)controller { + if (controller.page == DWGetStartedPage_1) { + DWGetStartedViewController *getStarted = [[DWGetStartedViewController alloc] initWithPage:DWGetStartedPage_2]; + getStarted.delegate = self; + [self.navController setViewControllers:@[ getStarted ] animated:YES]; + } + else if (controller.page == DWGetStartedPage_2) { + DWGetStartedViewController *getStarted = [[DWGetStartedViewController alloc] initWithPage:DWGetStartedPage_3]; + getStarted.delegate = self; + [self.navController setViewControllers:@[ getStarted ] animated:YES]; + } + else { + [self.delegate invitationFlowViewControllerDidFinish:self]; + } +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStarted.h b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStarted.h new file mode 100644 index 000000000..97caab04d --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStarted.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef DWGetStarted_h +#define DWGetStarted_h + +typedef NS_ENUM(NSUInteger, DWGetStartedPage) { + DWGetStartedPage_1, + DWGetStartedPage_2, + DWGetStartedPage_3, +}; + + +#endif /* DWGetStarted_h */ diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.h b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.h new file mode 100644 index 000000000..bbeeea5e9 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.h @@ -0,0 +1,32 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "DWGetStarted.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWGetStartedContentViewController : UIViewController + +@property (readonly, nonatomic, assign) DWGetStartedPage page; + +- (instancetype)initWithPage:(DWGetStartedPage)page; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.m new file mode 100644 index 000000000..5f3dcb4b8 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedContentViewController.m @@ -0,0 +1,171 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWGetStartedContentViewController.h" + +#import "DWGetStartedItemView.h" +#import "DWUIKit.h" + +@implementation DWGetStartedContentViewController + +- (instancetype)initWithPage:(DWGetStartedPage)page { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _page = page; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + titleLabel.textColor = [UIColor dw_secondaryTextColor]; + titleLabel.text = NSLocalizedString(@"Welcome to DashPay", nil); + titleLabel.numberOfLines = 0; + titleLabel.adjustsFontForContentSizeCategory = YES; + [self.view addSubview:titleLabel]; + + UILabel *subtitleLabel = [[UILabel alloc] init]; + subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO; + subtitleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleLargeTitle]; + subtitleLabel.textColor = [UIColor dw_darkTitleColor]; + subtitleLabel.text = NSLocalizedString(@"Let’s Get Started", nil); + subtitleLabel.numberOfLines = 0; + subtitleLabel.adjustsFontForContentSizeCategory = YES; + [self.view addSubview:subtitleLabel]; + + UIView *lineView = [[UIView alloc] init]; + lineView.translatesAutoresizingMaskIntoConstraints = NO; + lineView.backgroundColor = [UIColor dw_tertiaryTextColor]; + [self.view addSubview:lineView]; + + + UIView *blueView = [[UIView alloc] init]; + blueView.translatesAutoresizingMaskIntoConstraints = NO; + blueView.backgroundColor = [UIColor dw_lightBlueColor]; + [self.view addSubview:blueView]; + + NSMutableArray *itemViews = [NSMutableArray array]; + NSArray *items = [self items]; + NSArray *completedItems = [self completedItems]; + for (NSUInteger i = 0; i < 3; i++) { + NSNumber *item = items[i]; + NSNumber *completed = completedItems[i]; + + if (i == 1) { + blueView.hidden = !completed.boolValue; + } + + DWGetStartedItemView *itemView = + [[DWGetStartedItemView alloc] initWithItemType:item.unsignedIntegerValue + completed:completed.boolValue]; + itemView.translatesAutoresizingMaskIntoConstraints = NO; + [itemViews addObject:itemView]; + } + + UIStackView *stack = [[UIStackView alloc] initWithArrangedSubviews:itemViews]; + stack.translatesAutoresizingMaskIntoConstraints = NO; + stack.spacing = 60; + stack.axis = UILayoutConstraintAxisVertical; + [self.view addSubview:stack]; + + UIView *parent = self.view; + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:parent.topAnchor + constant:44], + [titleLabel.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor], + [parent.trailingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor], + + [subtitleLabel.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor], + [subtitleLabel.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor], + [parent.trailingAnchor constraintEqualToAnchor:subtitleLabel.trailingAnchor], + + [stack.topAnchor constraintEqualToAnchor:subtitleLabel.bottomAnchor + constant:40], + [stack.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor], + [parent.trailingAnchor constraintEqualToAnchor:stack.trailingAnchor], + + [lineView.topAnchor constraintEqualToAnchor:stack.topAnchor], + [stack.bottomAnchor constraintEqualToAnchor:lineView.bottomAnchor], + [lineView.leadingAnchor constraintEqualToAnchor:parent.leadingAnchor + constant:30], + [lineView.widthAnchor constraintEqualToConstant:3], + + [blueView.topAnchor constraintEqualToAnchor:lineView.topAnchor], + [blueView.leadingAnchor constraintEqualToAnchor:lineView.leadingAnchor], + [blueView.widthAnchor constraintEqualToConstant:3], + [blueView.heightAnchor constraintEqualToAnchor:lineView.heightAnchor + multiplier:0.5], + ]]; +} + +- (NSArray *)items { + switch (self.page) { + case DWGetStartedPage_1: + return @[ + @(DWGetStartedItemType_1), + @(DWGetStartedItemType_Inactive2), + @(DWGetStartedItemType_Inactive3), + ]; + + case DWGetStartedPage_2: + return @[ + @(DWGetStartedItemType_1), + @(DWGetStartedItemType_Active2), + @(DWGetStartedItemType_Inactive3), + ]; + + case DWGetStartedPage_3: + return @[ + @(DWGetStartedItemType_1), + @(DWGetStartedItemType_Active2), + @(DWGetStartedItemType_Active3), + ]; + } +} + +- (NSArray *)completedItems { + switch (self.page) { + case DWGetStartedPage_1: + return @[ + @NO, + @NO, + @NO, + ]; + + case DWGetStartedPage_2: + return @[ + @YES, + @NO, + @NO, + ]; + + case DWGetStartedPage_3: + return @[ + @YES, + @YES, + @NO, + ]; + } +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.h b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.h new file mode 100644 index 000000000..de60e7e17 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.h @@ -0,0 +1,41 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButtonViewController.h" +#import "DWGetStarted.h" +#import "dashwallet-Swift.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DWGetStartedViewController; + +@protocol DWGetStartedViewControllerDelegate + +- (void)getStartedViewControllerDidContinue:(DWGetStartedViewController *)controller; + +@end + +@interface DWGetStartedViewController : DWBaseActionButtonViewController + +@property (readonly, nonatomic, assign) DWGetStartedPage page; +@property (nullable, nonatomic, weak) id delegate; + +- (instancetype)initWithPage:(DWGetStartedPage)page; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.m b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.m new file mode 100644 index 000000000..583fd64e1 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/DWGetStartedViewController.m @@ -0,0 +1,68 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWGetStartedViewController.h" + +#import "DWGetStartedContentViewController.h" +#import "DWUIKit.h" + +@interface DWGetStartedViewController () + +@end + +@implementation DWGetStartedViewController + ++ (BOOL)isActionButtonInNavigationBar { + return NO; +} + +- (NSString *)actionButtonTitle { + return NSLocalizedString(@"Continue", nil); +} + +- (BOOL)requiresNoNavigationBar { + return YES; +} + +- (instancetype)initWithPage:(DWGetStartedPage)page { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _page = page; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.actionButton.enabled = YES; + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + UIView *contentView = [[UIView alloc] init]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self setupContentView:contentView]; + + DWGetStartedContentViewController *content = [[DWGetStartedContentViewController alloc] initWithPage:self.page]; + [self dw_embedChild:content inContainer:contentView]; +} + +- (void)actionButtonAction:(id)sender { + [self.delegate getStartedViewControllerDidContinue:self]; +} + + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.h b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.h new file mode 100644 index 000000000..82d43fc36 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.h @@ -0,0 +1,36 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, DWGetStartedItemType) { + DWGetStartedItemType_1, + DWGetStartedItemType_Inactive2, + DWGetStartedItemType_Active2, + DWGetStartedItemType_Inactive3, + DWGetStartedItemType_Active3, +}; + +@interface DWGetStartedItemView : UIView + +- (instancetype)initWithItemType:(DWGetStartedItemType)itemType completed:(BOOL)completed; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.m b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.m new file mode 100644 index 000000000..c9105cfff --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/GetStarted/Views/DWGetStartedItemView.m @@ -0,0 +1,173 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWGetStartedItemView.h" + +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWGetStartedItemView () + +@end + +static UIImage *ItemTypeImage(DWGetStartedItemType itemType) { + switch (itemType) { + case DWGetStartedItemType_1: + return [UIImage imageNamed:@"dp_get_started_1"]; + case DWGetStartedItemType_Inactive2: + return [UIImage imageNamed:@"dp_get_started_2_dim"]; + case DWGetStartedItemType_Active2: + return [UIImage imageNamed:@"dp_get_started_2"]; + case DWGetStartedItemType_Inactive3: + return [UIImage imageNamed:@"dp_get_started_3_dim"]; + case DWGetStartedItemType_Active3: + return [UIImage imageNamed:@"dp_get_started_3"]; + } +} + +static NSAttributedString *StepText(DWGetStartedItemType itemType, BOOL completed) { + NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; + NSUInteger step; + switch (itemType) { + case DWGetStartedItemType_1: + step = 1; + break; + case DWGetStartedItemType_Inactive2: + case DWGetStartedItemType_Active2: + step = 2; + break; + case DWGetStartedItemType_Inactive3: + case DWGetStartedItemType_Active3: + step = 3; + break; + } + NSString *prefix = [NSString stringWithFormat:NSLocalizedString(@"Step %ld", @"Step 1"), step]; + NSAttributedString *attPrefix = [[NSAttributedString alloc] initWithString:prefix]; + [result appendAttributedString:attPrefix]; + if (completed) { + NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; + attachment.image = [UIImage imageNamed:@"dp_get_started_check"]; + attachment.bounds = CGRectMake(0, -4, 16, 16); + [result appendAttributedString:[[NSAttributedString alloc] initWithString:@" "]]; + [result appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]]; + } + + return result; +} + +static NSString *NameText(DWGetStartedItemType itemType) { + switch (itemType) { + case DWGetStartedItemType_1: + return NSLocalizedString(@"Choose Your Username", nil); + case DWGetStartedItemType_Inactive2: + case DWGetStartedItemType_Active2: + return NSLocalizedString(@"Set Your PIN", nil); + case DWGetStartedItemType_Inactive3: + case DWGetStartedItemType_Active3: + return NSLocalizedString(@"Secure Your Wallet", nil); + } +} + +static UIColor *NameColor(DWGetStartedItemType itemType) { + switch (itemType) { + case DWGetStartedItemType_1: + return [UIColor dw_darkTitleColor]; + case DWGetStartedItemType_Inactive2: + return [UIColor dw_tertiaryTextColor]; + case DWGetStartedItemType_Active2: + return [UIColor dw_darkTitleColor]; + case DWGetStartedItemType_Inactive3: + return [UIColor dw_tertiaryTextColor]; + case DWGetStartedItemType_Active3: + return [UIColor dw_darkTitleColor]; + } +} + +NS_ASSUME_NONNULL_END + +@implementation DWGetStartedItemView + +- (instancetype)initWithItemType:(DWGetStartedItemType)itemType completed:(BOOL)completed { + self = [super initWithFrame:CGRectZero]; + if (self) { + UIView *rectView = [[UIView alloc] init]; + rectView.translatesAutoresizingMaskIntoConstraints = NO; + rectView.backgroundColor = [UIColor dw_backgroundColor]; + rectView.layer.cornerRadius = 8; + rectView.layer.masksToBounds = YES; + [self addSubview:rectView]; + + UIImageView *icon = [[UIImageView alloc] initWithImage:ItemTypeImage(itemType)]; + icon.translatesAutoresizingMaskIntoConstraints = NO; + icon.contentMode = UIViewContentModeCenter; + [rectView addSubview:icon]; + + UIView *container = [[UIView alloc] init]; + container.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:container]; + + UILabel *stepLabel = [[UILabel alloc] init]; + stepLabel.translatesAutoresizingMaskIntoConstraints = NO; + stepLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; + stepLabel.textColor = [UIColor dw_tertiaryTextColor]; + stepLabel.attributedText = StepText(itemType, completed); + [container addSubview:stepLabel]; + + UILabel *nameLabel = [[UILabel alloc] init]; + nameLabel.translatesAutoresizingMaskIntoConstraints = NO; + nameLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + nameLabel.textColor = NameColor(itemType); + nameLabel.adjustsFontForContentSizeCategory = YES; + nameLabel.numberOfLines = 0; + nameLabel.text = NameText(itemType); + [container addSubview:nameLabel]; + + [NSLayoutConstraint activateConstraints:@[ + [rectView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [rectView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + [rectView.widthAnchor constraintEqualToConstant:60], + [rectView.heightAnchor constraintEqualToConstant:60], + [rectView.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:rectView.bottomAnchor], + + [icon.topAnchor constraintEqualToAnchor:rectView.topAnchor], + [icon.leadingAnchor constraintEqualToAnchor:rectView.leadingAnchor], + [rectView.trailingAnchor constraintEqualToAnchor:icon.trailingAnchor], + [rectView.bottomAnchor constraintEqualToAnchor:icon.bottomAnchor], + + [stepLabel.topAnchor constraintEqualToAnchor:container.topAnchor], + [stepLabel.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], + [container.trailingAnchor constraintEqualToAnchor:stepLabel.trailingAnchor], + + [nameLabel.topAnchor constraintEqualToAnchor:stepLabel.bottomAnchor], + [nameLabel.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], + [container.trailingAnchor constraintEqualToAnchor:nameLabel.trailingAnchor], + [container.bottomAnchor constraintEqualToAnchor:nameLabel.bottomAnchor], + + [container.leadingAnchor constraintEqualToAnchor:rectView.trailingAnchor + constant:12.0], + [self.trailingAnchor constraintEqualToAnchor:container.trailingAnchor], + [container.centerYAnchor constraintEqualToAnchor:self.centerYAnchor], + [container.topAnchor constraintGreaterThanOrEqualToAnchor:self.topAnchor], + [self.bottomAnchor constraintGreaterThanOrEqualToAnchor:container.bottomAnchor], + ]]; + } + return self; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.h b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.h new file mode 100644 index 000000000..746ac2a51 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPassthroughStackView : UIStackView + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.m b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.m new file mode 100644 index 000000000..9608bf933 --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughStackView.m @@ -0,0 +1,27 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPassthroughStackView.h" + +@implementation DWPassthroughStackView + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + UIView *view = [super hitTest:point withEvent:event]; + return view == self ? nil : view; +} + +@end diff --git a/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.h b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.h new file mode 100644 index 000000000..009ebe7fa --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPassthroughView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.m b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.m new file mode 100644 index 000000000..de82ee5cb --- /dev/null +++ b/DashWallet/Sources/UI/DashPay/Welcome/Views/DWPassthroughView.m @@ -0,0 +1,27 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPassthroughView.h" + +@implementation DWPassthroughView + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + UIView *view = [super hitTest:point withEvent:event]; + return view == self ? nil : view; +} + +@end diff --git a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h b/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h index 8d837471c..fee552f27 100644 --- a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h +++ b/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h @@ -15,12 +15,12 @@ // limitations under the License. // -#import "dashwallet-Swift.h" #import NS_ASSUME_NONNULL_BEGIN @class DWExploreTestnetViewController; +@protocol DWNavigationFullscreenable; @protocol DWExploreTestnetViewControllerDelegate diff --git a/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.h b/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.h index f073e6523..e265d7675 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.h +++ b/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.h @@ -24,6 +24,8 @@ NS_ASSUME_NONNULL_BEGIN @interface DWHomeViewController (DWShortcuts) - (void)performActionForShortcut:(DWShortcutAction *)action sender:(UIView *)sender; +- (void)showCreateUsernameWithInvitation:(nullable NSURL *)invitationURL + definedUsername:(nullable NSString *)definedUsername; @end diff --git a/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.m b/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.m index 6899936e8..c0347fb91 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.m +++ b/DashWallet/Sources/UI/Home/DWHomeViewController+DWShortcuts.m @@ -19,7 +19,10 @@ #import +#if DASHPAY #import "DWDashPaySetupFlowController.h" +#endif + #import "DWExploreTestnetViewController.h" #import "DWGlobalOptions.h" #import "DWHomeViewController+DWImportPrivateKeyDelegateImpl.h" @@ -92,7 +95,7 @@ - (void)performActionForShortcut:(DWShortcutAction *)action sender:(UIView *)sen break; } case DWShortcutActionTypeCreateUsername: { - [self showCreateUsername]; + [self showCreateUsernameWithInvitation:nil definedUsername:nil]; break; } case DWShortcutActionTypeReceive: { @@ -167,11 +170,16 @@ - (void)showImportPrivateKey { [self presentControllerModallyInNavigationController:controller]; } -- (void)showCreateUsername { +- (void)showCreateUsernameWithInvitation:(nullable NSURL *)invitationURL + definedUsername:(nullable NSString *)definedUsername { +#if DASHPAY DWDashPaySetupFlowController *controller = [[DWDashPaySetupFlowController alloc] - initWithDashPayModel:self.model.dashPayModel]; + initWithDashPayModel:self.model.dashPayModel + invitation:nil + definedUsername:nil]; controller.modalPresentationStyle = UIModalPresentationFullScreen; [self presentViewController:controller animated:YES completion:nil]; +#endif } - (void)showExploreDash { diff --git a/DashWallet/Sources/UI/Home/DWHomeViewController.h b/DashWallet/Sources/UI/Home/DWHomeViewController.h index 6c17b5b47..51dbfdc18 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewController.h +++ b/DashWallet/Sources/UI/Home/DWHomeViewController.h @@ -29,6 +29,10 @@ NS_ASSUME_NONNULL_BEGIN @property (strong, nonatomic) id model; @property (nullable, nonatomic, weak) id delegate; +#if DASHPAY +- (void)handleDeeplink:(NSURL *)url definedUsername:(nullable NSString *)definedUsername; +#endif + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Home/DWHomeViewController.m b/DashWallet/Sources/UI/Home/DWHomeViewController.m index d1b7ce007..7c90ad31f 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewController.m +++ b/DashWallet/Sources/UI/Home/DWHomeViewController.m @@ -23,18 +23,33 @@ #import "DWHomeViewController+DWBackupReminder.h" #import "DWHomeViewController+DWJailbreakCheck.h" #import "DWHomeViewController+DWShortcuts.h" -#import "DWModalUserProfileViewController.h" -#import "DWNotificationsViewController.h" +#import "DWRootEditProfileViewController.h" #import "DWWindow.h" #import "UIViewController+DWTxFilter.h" #import "UIWindow+DSUtils.h" #import "dashwallet-Swift.h" +#if DASHPAY +#import "DWNotificationsViewController.h" +#import "DWModalUserProfileViewController.h" +#import "DPAlertViewController.h" +#import "DWInvitationSetupState.h" +#import "DWDashPaySetupFlowController.h" +#endif + NS_ASSUME_NONNULL_BEGIN -@interface DWHomeViewController () +@interface DWHomeViewController () @property (strong, nonatomic) DWHomeView *view; +#if DASHPAY +@property (strong, nonatomic) DWInvitationSetupState *invitationSetup; +@property (strong, nonatomic) DWDPAvatarView *avatarView; +#endif @end @@ -94,6 +109,51 @@ - (void)viewWillDisappear:(BOOL)animated { [self.view hideBalanceIfNeeded]; } +#if DASHPAY +- (void)handleDeeplink:(NSURL *)url definedUsername:(nullable NSString *)definedUsername { + if (self.model.dashPayModel.blockchainIdentity != nil) { + NSString *title = NSLocalizedString(@"Username already found", nil); + NSString *message = NSLocalizedString(@"You cannot claim this invite since you already have a Dash username", nil); + DPAlertViewController *alert = + [[DPAlertViewController alloc] initWithIcon:[UIImage imageNamed:@"icon_invitation_error"] + title:title + description:message]; + [self presentViewController:alert animated:YES completion:nil]; + + return; + } + + if (SyncingActivityMonitor.shared.state != SyncingActivityMonitorStateSyncDone) { + DWInvitationSetupState *state = [[DWInvitationSetupState alloc] init]; + state.invitation = url; + state.chosenUsername = definedUsername; + _invitationSetup = state; + [SyncingActivityMonitor.shared addObserver:self]; + + return; + } + + __weak typeof(self) weakSelf = self; + [self.model handleDeeplink:url completion:^(BOOL success, NSString *_Nullable errorTitle, NSString *_Nullable errorMessage) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + if (success) { + [strongSelf showCreateUsernameWithInvitation:url definedUsername:definedUsername]; + } + else { + DPAlertViewController *alert = + [[DPAlertViewController alloc] initWithIcon:[UIImage imageNamed:@"icon_invitation_error"] + title:errorTitle + description:errorMessage]; + [strongSelf presentViewController:alert animated:YES completion:nil]; + } + }]; +} +#endif + #pragma mark - DWHomeViewDelegate - (void)homeView:(DWHomeView *)homeView showTxFilter:(UIView *)sender { @@ -105,11 +165,18 @@ - (void)homeView:(DWHomeView *)homeView showSyncingStatus:(UIView *)sender { [self presentViewController:controller animated:YES completion:nil]; } -- (void)homeView:(DWHomeView *)homeView profileButtonAction:(UIControl *)sender { - DWNotificationsViewController *controller = [[DWNotificationsViewController alloc] init]; - [self.navigationController pushViewController:controller animated:YES]; +#if DASHPAY +- (void)homeView:(DWHomeView * _Nonnull)homeView didUpdateProfile:(DSBlockchainIdentity * _Nullable)identity unreadNotifications:(NSUInteger)unreadNotifications { + + self.avatarView.blockchainIdentity = identity; + BOOL hasIdentity = identity != nil; + BOOL hasNotifications = unreadNotifications > 0; + self.avatarView.hidden = !hasIdentity; + [self refreshNotificationBell:hasIdentity hasNotifications:hasNotifications]; } +#endif + - (void)homeView:(DWHomeView *)homeView didSelectTransaction:(DSTransaction *)transaction { [self presentTransactionDetails:transaction]; } @@ -141,8 +208,45 @@ - (void)shortcutsView:(UIView *)view didSelectAction:(DWShortcutAction *)action [self performActionForShortcut:action sender:sender]; } +#pragma mark - SyncingActivityMonitorObserver + +- (void)syncingActivityMonitorProgressDidChange:(double)progress { + // pass +} + +- (void)syncingActivityMonitorStateDidChangeWithPreviousState:(SyncingActivityMonitorState)previousState state:(SyncingActivityMonitorState)state { + +#if DASHPAY + if (state == SyncingActivityMonitorStateSyncDone) { + if (_invitationSetup != nil) { + [self handleDeeplink:_invitationSetup.invitation definedUsername:_invitationSetup.chosenUsername]; + _invitationSetup = nil; + } + + [SyncingActivityMonitor.shared removeObserver:self]; + } +#endif +} + +#pragma mark - DWRootEditProfileViewControllerDelegate + +#if DASHPAY +- (void)editProfileViewController:(DWRootEditProfileViewController *)controller + updateDisplayName:(NSString *)rawDisplayName + aboutMe:(NSString *)rawAboutMe + avatarURLString:(nullable NSString *)avatarURLString { + [self.model.dashPayModel.userProfile.updateModel updateWithDisplayName:rawDisplayName aboutMe:rawAboutMe avatarURLString:avatarURLString]; + [controller dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)editProfileViewControllerDidCancel:(DWRootEditProfileViewController *)controller { + [controller dismissViewControllerAnimated:YES completion:nil]; +} +#endif + #pragma mark - Private +#if DASHPAY - (void)payViewControllerDidHidePaymentResultToContact:(nullable id)contact { if (!contact) { return; @@ -155,6 +259,39 @@ - (void)payViewControllerDidHidePaymentResultToContact:(nullable id)payModel { return self.model.payModel; } @@ -185,6 +322,18 @@ - (void)setupView { [contentView addSubview:imageView]; self.navigationItem.titleView = contentView; + +#if DASHPAY + DWDPAvatarView *avatarView = [[DWDPAvatarView alloc] initWithFrame:(CGRect){{0.0, 0.0}, CGSizeMake(30.0, 30.0)}]; + avatarView.small = YES; + avatarView.hidden = YES; + avatarView.backgroundMode = DWDPAvatarBackgroundMode_Random; + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(profileAction)]; + [avatarView addGestureRecognizer:tapRecognizer]; + _avatarView = avatarView; + UIBarButtonItem *avatarButton = [[UIBarButtonItem alloc] initWithCustomView:avatarView]; + self.navigationItem.leftBarButtonItem = avatarButton; +#endif self.view.model = self.model; } @@ -206,15 +355,13 @@ - (void)showReclassifyYourTransactionsIfPossibleWithTransaction:(DSTransaction * } - (void)presentTransactionDetails:(DSTransaction *)transaction { - TxDetailModel *model = [[TxDetailModel alloc] initWithTransaction:transaction]; - TXDetailViewController *controller = [[TXDetailViewController alloc] initWithModel:model]; + DWTxDetailModel *model = [[DWTxDetailModel alloc] initWithTransaction:transaction]; + DWTxDetailViewController *controller = [[DWTxDetailViewController alloc] initWithModel:model]; DWNavigationController *nvc = [[DWNavigationController alloc] initWithRootViewController:controller]; [self presentViewController:nvc animated:YES completion:nil]; } - - @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Home/Models/DWDashPayModel.m b/DashWallet/Sources/UI/Home/Models/DWDashPayModel.m index 7e836961c..866f9ef9b 100644 --- a/DashWallet/Sources/UI/Home/Models/DWDashPayModel.m +++ b/DashWallet/Sources/UI/Home/Models/DWDashPayModel.m @@ -17,6 +17,7 @@ #import "DWDashPayModel.h" +#import "DWCurrentUserProfileModel.h" #import "DWDPRegistrationStatus.h" #import "DWDashPayConstants.h" #import "DWEnvironment.h" @@ -28,18 +29,22 @@ NS_ASSUME_NONNULL_BEGIN NSNotificationName const DWDashPayRegistrationStatusUpdatedNotification = @"DWDashPayRegistrationStatusUpdatedNotification"; +NSNotificationName const DWDashPaySentContactRequestToInviter = @"kDWDashPaySentContactRequestToInviter"; @interface DWDashPayModel () @property (nullable, nonatomic, strong) DWDPRegistrationStatus *registrationStatus; @property (nullable, nonatomic, strong) NSError *lastRegistrationError; - +@property (nonatomic, assign) BOOL isInvitationNotificationAllowed; +@property (nullable, nonatomic, strong) NSURL *invitation; @end NS_ASSUME_NONNULL_END @implementation DWDashPayModel +@synthesize userProfile = _userProfile; + - (instancetype)init { self = [super init]; if (self) { @@ -47,6 +52,8 @@ - (instancetype)init { DSBlockchainIdentity *blockchainIdentity = wallet.defaultBlockchainIdentity; NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + _userProfile = [[DWCurrentUserProfileModel alloc] init]; + if (blockchainIdentity) { if (username == nil) { [DWGlobalOptions sharedInstance].dashpayUsername = blockchainIdentity.currentDashpayUsername; @@ -54,8 +61,7 @@ - (instancetype)init { } // username can be nil at this point - [self updateRegistrationStatusForBlockchainIdentity:blockchainIdentity - username:username]; + [self updateRegistrationStatusForBlockchainIdentity:blockchainIdentity username:username]; } DSLogPrivate(@"DWDP: Current username: %@", [DWGlobalOptions sharedInstance].dashpayUsername); @@ -74,7 +80,24 @@ - (instancetype)init { } - (NSString *)username { - return [DWGlobalOptions sharedInstance].dashpayUsername; + if (MOCK_DASHPAY) { + return [DWGlobalOptions sharedInstance].dashpayUsername; + } + + DSBlockchainIdentity *blockchainIdentity = [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; + return blockchainIdentity.currentDashpayUsername ?: [DWGlobalOptions sharedInstance].dashpayUsername; +} + +- (DSBlockchainIdentity *)blockchainIdentity { + if (MOCK_DASHPAY) { + NSString *username = [DWGlobalOptions sharedInstance].dashpayUsername; + + if (username != nil) { + return [[DWEnvironment sharedInstance].currentWallet createBlockchainIdentityForUsername:username]; + } + } + + return [DWEnvironment sharedInstance].currentWallet.defaultBlockchainIdentity; } - (BOOL)registrationCompleted { @@ -82,6 +105,11 @@ - (BOOL)registrationCompleted { } - (NSUInteger)unreadNotificationsCount { + if (self.isInvitationNotificationAllowed && + [DWGlobalOptions sharedInstance].shouldShowInvitationsBadge) { + return 1; + } + return [DWNotificationsProvider sharedInstance].data.unreadItems.count; } @@ -91,11 +119,50 @@ - (BOOL)shouldPresentRegistrationPaymentConfirmation { return blockchainIdentity == nil; } -- (void)createUsername:(NSString *)username { +- (void)createUsername:(NSString *)username invitation:(NSURL *)invitationURL { + self.invitation = invitationURL; self.lastRegistrationError = nil; [DWGlobalOptions sharedInstance].dashpayUsername = username; DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + + if (invitationURL != nil) { + DSBlockchainInvitation *invitation = [[DSBlockchainInvitation alloc] initWithInvitationLink:invitationURL.absoluteString inWallet:wallet]; + + __weak typeof(self) weakSelf = self; + [invitation + acceptInvitationUsingWalletIndex:0 + setDashpayUsername:username + authenticationPrompt:NSLocalizedString(@"Would you like to accept the invitation?", nil) + identityRegistrationSteps:[self invitationSteps] + stepCompletion:^(DSBlockchainIdentityRegistrationStep stepCompleted) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf handleSteps:stepCompleted error:nil]; + } + completion:^(DSBlockchainIdentityRegistrationStep stepsCompleted, NSError *_Nonnull error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + NSLog(@">>> completed invitation %@ - %@", @(stepsCompleted), error); + + [strongSelf handleSteps:stepsCompleted error:error]; + + if(!error) + { + [strongSelf sendContactRequestToInviterUsingInvitationURL:invitationURL]; + } + } + completionQueue:dispatch_get_main_queue()]; + + return; + } + DSBlockchainIdentity *blockchainIdentity = wallet.defaultBlockchainIdentity; if (blockchainIdentity) { @@ -119,16 +186,65 @@ - (void)createUsername:(NSString *)username { } } +- (void)sendContactRequestToInviterUsingInvitationURL:(NSURL *)invitationURL +{ + NSURLComponents *components = [NSURLComponents componentsWithURL:invitationURL resolvingAgainstBaseURL:NO]; + NSString *username; + + for (NSURLQueryItem *item in components.queryItems) { + if ([item.name isEqualToString:@"du"]) { + username = item.value; + break; + } + } + + if (!username) { + return; + } + + DSIdentitiesManager *manager = [DWEnvironment sharedInstance].currentChainManager.identitiesManager; + __weak typeof(self) weakSelf = self; + [manager searchIdentityByDashpayUsername:username withCompletion:^(BOOL success, DSBlockchainIdentity * _Nullable blockchainIdentity, NSError * _Nullable error) { + if (success) { + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + + [myBlockchainIdentity sendNewFriendRequestToBlockchainIdentity:blockchainIdentity + completion:^(BOOL success, NSArray *_Nullable errors) { + DSLog(@"Friend request sent %i", success); + }]; + } + }]; +} + +- (void)sendContactRequestToBlockchainIdentity:(DSBlockchainIdentity *) blockchainIdentity { + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSBlockchainIdentity *myBlockchainIdentity = wallet.defaultBlockchainIdentity; + [myBlockchainIdentity sendNewFriendRequestToBlockchainIdentity:blockchainIdentity + completion:^(BOOL success, NSArray *_Nullable errors) { + + }]; +} + - (BOOL)canRetry { return self.username != nil; } - (void)retry { - [self createUsername:self.username]; + [self createUsername:self.username invitation:self.invitation]; } - (void)completeRegistration { + [DWGlobalOptions sharedInstance].shouldShowInvitationsBadge = YES; [DWGlobalOptions sharedInstance].dashpayRegistrationCompleted = YES; + + if (!MOCK_DASHPAY) { + [DWGlobalOptions sharedInstance].dashpayUsername = nil; + } + + NSAssert(self.username != nil, @"Default DSBlockchainIdentity has an empty username"); self.registrationStatus = nil; [[NSNotificationCenter defaultCenter] postNotificationName:DWDashPayRegistrationStatusUpdatedNotification object:nil]; } @@ -151,6 +267,53 @@ - (void)updateUsernameStatus { [self didChangeValueForKey:key]; } +- (void)setHasEnoughBalanceForInvitationNotification:(BOOL)value { + self.isInvitationNotificationAllowed = ([DWGlobalOptions sharedInstance].dpInvitationFlowEnabled && value); +} + +- (void)verifyDeeplink:(NSURL *)url + completion:(void (^)(BOOL success, + NSString *_Nullable errorTitle, + NSString *_Nullable errorMessage))completion { + if (MOCK_DASHPAY) { + completion(YES, nil, nil); + return; + } + + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + [DSBlockchainInvitation + verifyInvitationLink:url.absoluteString + onChain:chain + completion:^(DSTransaction *_Nonnull transaction, bool spent, NSError *_Nonnull error) { + NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; + NSString *username = @""; + for (NSURLQueryItem *item in components.queryItems) { + if ([item.name isEqualToString:@"du"]) { + username = item.value; + break; + } + } + if (transaction != nil) { + completion(YES, nil, nil); + } + else { + if (spent) { + completion( + NO, + NSLocalizedString(@"Invitation already claimed", nil), + [NSString stringWithFormat:NSLocalizedString(@"Your invitation from %@ has been already claimed", nil), username]); + } + else { + completion( + NO, + NSLocalizedString(@"Invalid Inviation", nil), + [NSString stringWithFormat:NSLocalizedString(@"Your invitation from %@ is not valid", nil), username]); + } + } + } + completionQueue:dispatch_get_main_queue()]; +} + #pragma mark - Notifications - (void)notificationsWillUpdate { @@ -183,20 +346,25 @@ - (void)createFundingPrivateKeyForBlockchainIdentity:(DSBlockchainIdentity *)blo } - (void)registerIdentity:(DSBlockchainIdentity *)blockchainIdentity { + if (MOCK_DASHPAY) { + [self handleSteps:DSBlockchainIdentityRegistrationStep_All error:nil]; + return; + } + DSAccount *account = [DWEnvironment sharedInstance].currentAccount; __weak typeof(self) weakSelf = self; [blockchainIdentity registerOnNetwork:[self steps] withFundingAccount:account forTopupAmount:DWDP_MIN_BALANCE_TO_CREATE_USERNAME + pinPrompt:@"Would you like to create this user?" stepCompletion:^(DSBlockchainIdentityRegistrationStep stepCompleted) { __strong typeof(weakSelf) strongSelf = weakSelf; if (!strongSelf) { return; } - [strongSelf handleSteps:stepCompleted - error:nil]; + [strongSelf handleSteps:stepCompleted error:nil]; } completion:^(DSBlockchainIdentityRegistrationStep stepsCompleted, NSError *_Nonnull error) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -216,14 +384,14 @@ - (void)continueRegistering:(DSBlockchainIdentity *)blockchainIdentity { [blockchainIdentity continueRegisteringOnNetwork:[self steps] withFundingAccount:account forTopupAmount:DWDP_MIN_BALANCE_TO_CREATE_USERNAME + pinPrompt:@"Would you like to create this user?" stepCompletion:^(DSBlockchainIdentityRegistrationStep stepCompleted) { __strong typeof(weakSelf) strongSelf = weakSelf; if (!strongSelf) { return; } - [strongSelf handleSteps:stepCompleted - error:nil]; + [strongSelf handleSteps:stepCompleted error:nil]; } completion:^(DSBlockchainIdentityRegistrationStep stepsCompleted, NSError *_Nonnull error) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -240,6 +408,12 @@ - (DSBlockchainIdentityRegistrationStep)steps { return DSBlockchainIdentityRegistrationStep_RegistrationStepsWithUsername; } +- (DSBlockchainIdentityRegistrationStep)invitationSteps { + return (DSBlockchainIdentityRegistrationStep_LocalInWalletPersistence | + DSBlockchainIdentityRegistrationStep_Identity | + DSBlockchainIdentityRegistrationStep_Username); +} + - (void)handleSteps:(DSBlockchainIdentityRegistrationStep)stepsCompleted error:(nullable NSError *)error { NSAssert([NSThread isMainThread], @"Main thread is assumed here"); @@ -254,9 +428,15 @@ - (void)handleSteps:(DSBlockchainIdentityRegistrationStep)stepsCompleted error:( self.lastRegistrationError = error; } - DWDPRegistrationState state = [self stateForCompletedSteps:stepsCompleted]; - const BOOL failed = error != nil; + + if(failed && self.blockchainIdentity.isFromIncomingInvitation) { + [self cancel]; + [self.blockchainIdentity unregisterLocally]; + return; + } + + DWDPRegistrationState state = [self stateForCompletedSteps:stepsCompleted]; self.registrationStatus = [[DWDPRegistrationStatus alloc] initWithState:state failed:failed username:self.username]; [[NSNotificationCenter defaultCenter] postNotificationName:DWDashPayRegistrationStatusUpdatedNotification object:nil]; @@ -281,6 +461,10 @@ - (void)updateRegistrationStatusForBlockchainIdentity:(DSBlockchainIdentity *)bl if (isDone) { [DWGlobalOptions sharedInstance].dashpayRegistrationCompleted = YES; + [DWGlobalOptions sharedInstance].dashpayUsername = nil; + NSAssert(self.username != nil, @"Default DSBlockchainIdentity has an empty username"); + + [self.userProfile update]; } } } diff --git a/DashWallet/Sources/UI/Home/Models/DWHomeModel.m b/DashWallet/Sources/UI/Home/Models/DWHomeModel.m index e901ca15f..5f1b4ff6c 100644 --- a/DashWallet/Sources/UI/Home/Models/DWHomeModel.m +++ b/DashWallet/Sources/UI/Home/Models/DWHomeModel.m @@ -23,9 +23,12 @@ #import #import "AppDelegate.h" +#if DASHPAY #import "DWDashPayConstants.h" #import "DWDashPayContactsUpdater.h" #import "DWDashPayModel.h" +#endif + #import "DWEnvironment.h" #import "DWGlobalOptions.h" #import "DWPayModel.h" @@ -66,6 +69,7 @@ @implementation DWHomeModel @synthesize allDataSource = _allDataSource; @synthesize allowedToShowReclassifyYourTransactions = _allowedToShowReclassifyYourTransactions; + - (instancetype)init { self = [super init]; if (self) { @@ -85,7 +89,7 @@ - (instancetype)init { _dataProvider = [[DWTransactionListDataProvider alloc] init]; -#if DASHPAY_ENABLED +#if DASHPAY _dashPayModel = [[DWDashPayModel alloc] init]; #endif /* DASHPAY_ENABLED */ @@ -119,10 +123,7 @@ - (instancetype)init { selector:@selector(chainWalletsDidChangeNotification:) name:DSChainWalletsDidChangeNotification object:nil]; - [notificationCenter addObserver:self - selector:@selector(dashPayRegistrationStatusUpdatedNotification) - name:DWDashPayRegistrationStatusUpdatedNotification - object:nil]; + [notificationCenter addObserver:self selector:@selector(willWipeWalletNotification) name:DWWillWipeWalletNotification @@ -132,6 +133,13 @@ - (instancetype)init { name:DWApp.fiatCurrencyDidChangeNotification object:nil]; +#if DASHPAY + [notificationCenter addObserver:self + selector:@selector(dashPayRegistrationStatusUpdatedNotification) + name:DWDashPayRegistrationStatusUpdatedNotification + object:nil]; +#endif + [self reloadTxDataSource]; NSDate *date = [NSDate new]; @@ -273,7 +281,7 @@ - (BOOL)performOnSetupUpgrades { } - (void)walletDidWipe { -#if DASHPAY_ENABLED +#if DASHPAY self.dashPayModel = [[DWDashPayModel alloc] init]; #endif /* DASHPAY_ENABLED */ } @@ -290,15 +298,16 @@ - (void)checkCrowdNodeState { } -#pragma mark - DWShortcutsModelDataSource +#pragma mark - DWDashPayReadyProtocol +#if DASHPAY - (BOOL)shouldShowCreateUserNameButton { if (self.reachability.networkReachabilityStatus == DSReachabilityStatusNotReachable) { return NO; } DSChain *chain = [DWEnvironment sharedInstance].currentChain; - if (chain.isEvolutionEnabled == NO) { + if (chain.isEvolutionEnabled == NO && !MOCK_DASHPAY) { return NO; } @@ -320,6 +329,14 @@ - (BOOL)shouldShowCreateUserNameButton { return canRegisterUsername && isSynced && isEnoughBalance; } +- (void)handleDeeplink:(NSURL *)url + completion:(void (^)(BOOL success, + NSString *_Nullable errorTitle, + NSString *_Nullable errorMessage))completion { + [self.dashPayModel verifyDeeplink:url completion:completion]; +} +#endif + #pragma mark - Notifications - (void)reachabilityDidChangeNotification { @@ -361,12 +378,15 @@ - (void)chainWalletsDidChangeNotification:(NSNotification *)notification { - (void)dashPayRegistrationStatusUpdatedNotification { [self reloadTxDataSource]; - +#if DASHPAY [[DWDashPayContactsUpdater sharedInstance] beginUpdating]; +#endif } - (void)willWipeWalletNotification { +#if DASHPAY [[DWDashPayContactsUpdater sharedInstance] endUpdating]; +#endif } #pragma mark - Private @@ -540,7 +560,9 @@ - (void)syncingActivityMonitorStateDidChangeWithPreviousState:(enum SyncingActiv if (self.dashPayModel.username != nil) { [self.receiveModel updateReceivingInfo]; +#if DASHPAY [[DWDashPayContactsUpdater sharedInstance] beginUpdating]; +#endif } [self checkCrowdNodeState]; diff --git a/DashWallet/Sources/UI/Home/Models/TransactionListDataSource.swift b/DashWallet/Sources/UI/Home/Models/TransactionListDataSource.swift index 078697a84..26242c82d 100644 --- a/DashWallet/Sources/UI/Home/Models/TransactionListDataSource.swift +++ b/DashWallet/Sources/UI/Home/Models/TransactionListDataSource.swift @@ -142,7 +142,7 @@ final class TransactionListDataSource: NSObject, UITableViewDataSource { let tx = _items[indexPath.row] switch tx { case .crowdnode(let txs): - let cellId = CNCreateAccountCell.dw_reuseIdentifier + let cellId = "CNCreateAccountCell" let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! CNCreateAccountCell cell.update(with: txs) return cell diff --git a/DashWallet/Sources/UI/Home/Models/Transactions/DWBaseTransactionListDataProvider.m b/DashWallet/Sources/UI/Home/Models/Transactions/DWBaseTransactionListDataProvider.m index 62f5dc6a4..98e657068 100644 --- a/DashWallet/Sources/UI/Home/Models/Transactions/DWBaseTransactionListDataProvider.m +++ b/DashWallet/Sources/UI/Home/Models/Transactions/DWBaseTransactionListDataProvider.m @@ -17,7 +17,6 @@ #import "DWBaseTransactionListDataProvider.h" -#import "DWDateFormatter.h" #import "DWEnvironment.h" #import "DWTransactionListDataItem.h" #import "dashwallet-Swift.h" diff --git a/DashWallet/Sources/UI/Home/Protocols/DWDashPayProtocol.h b/DashWallet/Sources/UI/Home/Protocols/DWDashPayProtocol.h index 3fe934ad3..40556481f 100644 --- a/DashWallet/Sources/UI/Home/Protocols/DWDashPayProtocol.h +++ b/DashWallet/Sources/UI/Home/Protocols/DWDashPayProtocol.h @@ -17,26 +17,39 @@ #import +#import "DWCurrentUserProfileModel.h" + NS_ASSUME_NONNULL_BEGIN extern NSNotificationName const DWDashPayRegistrationStatusUpdatedNotification; +extern NSNotificationName const DWDashPaySentContactRequestToInviter; @class DWDPRegistrationStatus; +@class DSBlockchainIdentity; +@class DWCurrentUserProfileModel; @protocol DWDashPayProtocol @property (nullable, readonly, nonatomic, copy) NSString *username; +@property (nullable, readonly, nonatomic, strong) DSBlockchainIdentity *blockchainIdentity; @property (nullable, readonly, nonatomic, strong) DWDPRegistrationStatus *registrationStatus; +@property (readonly, nonatomic, strong) DWCurrentUserProfileModel *userProfile; @property (nullable, readonly, nonatomic, strong) NSError *lastRegistrationError; @property (readonly, nonatomic, assign) BOOL registrationCompleted; @property (readonly, nonatomic, assign) NSUInteger unreadNotificationsCount; - (BOOL)shouldPresentRegistrationPaymentConfirmation; -- (void)createUsername:(NSString *)username; +- (void)createUsername:(NSString *)username invitation:(NSURL *)invitation; - (BOOL)canRetry; - (void)retry; - (void)completeRegistration; - (void)updateUsernameStatus; +- (void)setHasEnoughBalanceForInvitationNotification:(BOOL)value; + +- (void)verifyDeeplink:(NSURL *)url + completion:(void (^)(BOOL success, + NSString *_Nullable errorTitle, + NSString *_Nullable errorMessage))completion; @end diff --git a/DashWallet/Sources/UI/Home/Protocols/DWHomeProtocol.h b/DashWallet/Sources/UI/Home/Protocols/DWHomeProtocol.h index 0d6497628..cc5b20497 100644 --- a/DashWallet/Sources/UI/Home/Protocols/DWHomeProtocol.h +++ b/DashWallet/Sources/UI/Home/Protocols/DWHomeProtocol.h @@ -19,6 +19,7 @@ #import "DWDashPayProtocol.h" #import "DWTxDisplayModeProtocol.h" +#import "DWDashPayReadyProtocol.h" NS_ASSUME_NONNULL_BEGIN @@ -42,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)homeModelWantToReloadShortcuts:(id)model; @end -@protocol DWHomeProtocol +@protocol DWHomeProtocol @property (nullable, nonatomic, weak) id updatesObserver; @@ -70,6 +71,14 @@ NS_ASSUME_NONNULL_BEGIN - (void)retrySyncing; - (void)checkCrowdNodeState; + +#if DASHPAY +- (void)handleDeeplink:(NSURL *)url + completion:(void (^)(BOOL success, + NSString *_Nullable errorTitle, + NSString *_Nullable errorMessage))completion; +#endif + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Home/Syncing Views/Alert/SyncingAlertContentView.swift b/DashWallet/Sources/UI/Home/Syncing Views/Alert/SyncingAlertContentView.swift index ae199d1bd..6e6c0cf35 100644 --- a/DashWallet/Sources/UI/Home/Syncing Views/Alert/SyncingAlertContentView.swift +++ b/DashWallet/Sources/UI/Home/Syncing Views/Alert/SyncingAlertContentView.swift @@ -113,9 +113,8 @@ final class SyncingAlertContentView: UIView { let atTheEndOfSyncBlocksAndSyncingMasternodeList = chain.lastSyncBlockHeight >= chain.estimatedBlockHeight - 6 && chainManager.masternodeManager .masternodeListRetrievalQueueCount > 0 && chainManager.syncPhase == .synced if atTheEndOfInitialTerminalBlocksAndSyncingMasternodeList || atTheEndOfSyncBlocksAndSyncingMasternodeList { - subtitleLabel.text = String(format: NSLocalizedString("masternode list #%d of %d", comment: ""), - chainManager.masternodeManager.masternodeListRetrievalQueueMaxAmount - chainManager.masternodeManager.masternodeListRetrievalQueueCount, - chainManager.masternodeManager.masternodeListRetrievalQueueMaxAmount) + let remaining = max(0, chainManager.masternodeManager.masternodeListRetrievalQueueMaxAmount - chainManager.masternodeManager.masternodeListRetrievalQueueCount) + subtitleLabel.text = String(format: NSLocalizedString("masternode list #%d of %d", comment: ""), remaining, chainManager.masternodeManager.masternodeListRetrievalQueueMaxAmount) } else { if chainManager.syncPhase == .initialTerminalBlocks { subtitleLabel.text = String(format: NSLocalizedString("header #%d of %d", comment: ""), chain.lastTerminalBlockHeight, chain.estimatedBlockHeight) @@ -141,7 +140,7 @@ final class SyncingAlertContentView: UIView { } func update(with progress: Double) { - titleLabel.text = String(format: "%@ %.1f%%", NSLocalizedString("Syncing", comment: ""), progress * 100.0) + titleLabel.text = String(format: "%@ %.1f%%", NSLocalizedString("Syncing", comment: ""), min(max(progress, 0), 1) * 100.0) } func showAnimation() { diff --git a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib b/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib index 211d095c0..1606ef926 100644 --- a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib +++ b/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib @@ -3,7 +3,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -95,7 +95,7 @@ - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + - - + + + + + + + - + + + + + + + diff --git a/DashWallet/Sources/UI/Portal/BuySellPortal.storyboard b/DashWallet/Sources/UI/Portal/BuySellPortal.storyboard index 9d2abbd0a..b028e5f02 100644 --- a/DashWallet/Sources/UI/Portal/BuySellPortal.storyboard +++ b/DashWallet/Sources/UI/Portal/BuySellPortal.storyboard @@ -1,9 +1,9 @@ - + - + @@ -74,13 +74,13 @@ - diff --git a/DashWallet/Sources/UI/Portal/IntegrationViewController.swift b/DashWallet/Sources/UI/Portal/IntegrationViewController.swift index 54d66ea42..da06ca7ad 100644 --- a/DashWallet/Sources/UI/Portal/IntegrationViewController.swift +++ b/DashWallet/Sources/UI/Portal/IntegrationViewController.swift @@ -62,8 +62,6 @@ final class IntegrationViewController: BaseViewController, NetworkReachabilityHa override func viewDidLoad() { super.viewDidLoad() - - configureModel() configureHierarchy() networkStatusDidChange = { [weak self] _ in @@ -74,6 +72,7 @@ final class IntegrationViewController: BaseViewController, NetworkReachabilityHa override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + configureModel() model.refresh() } @@ -217,10 +216,13 @@ extension IntegrationViewController { let title = error.failureReason let message = error.localizedDescription let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) - let confirmAction = UIAlertAction(title: error.recoverySuggestion, style: .default) { [weak self] _ in - self?.model.handle(error: error) + + if let action = error.recoverySuggestion { + let confirmAction = UIAlertAction(title: action, style: .default) { [weak self] _ in + self?.model.handle(error: error) + } + alert.addAction(confirmAction) } - alert.addAction(confirmAction) let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) alert.addAction(cancelAction) diff --git a/DashWallet/Sources/UI/Portal/Model/BaseIntegrationModel.swift b/DashWallet/Sources/UI/Portal/Model/BaseIntegrationModel.swift index 729267b66..028fd3f0e 100644 --- a/DashWallet/Sources/UI/Portal/Model/BaseIntegrationModel.swift +++ b/DashWallet/Sources/UI/Portal/Model/BaseIntegrationModel.swift @@ -23,7 +23,7 @@ import Combine enum IntegrationItemType: CaseIterable { case buyDash case sellDash - case convertCrypto +// case convertCrypto // disabled per MO-103 case transferDash } @@ -34,8 +34,8 @@ extension IntegrationItemType { return NSLocalizedString("Buy Dash", comment: "Integration Entry Point") case .sellDash: return NSLocalizedString("Sell Dash", comment: "Integration Entry Point") - case .convertCrypto: - return NSLocalizedString("Convert Crypto", comment: "Integration Entry Point") +// case .convertCrypto: +// return NSLocalizedString("Convert Crypto", comment: "Integration Entry Point") case .transferDash: return NSLocalizedString("Transfer Dash", comment: "Integration Entry Point") } @@ -47,8 +47,8 @@ extension IntegrationItemType { return "integration.buy" case .sellDash: return "integration.sell" - case .convertCrypto: - return "integration.convert" +// case .convertCrypto: +// return "integration.convert" case .transferDash: return "integration.transfer" } diff --git a/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.h b/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.h index e71e46249..38179bb84 100644 --- a/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.h +++ b/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)setLaunchingAsDeferredController; +#if DASHPAY +- (void)handleDeeplink:(NSURL *)url; +#endif - (void)handleURL:(NSURL *)url; - (void)handleFile:(NSData *)file; diff --git a/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.m b/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.m index 002039947..591006f44 100644 --- a/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.m +++ b/DashWallet/Sources/UI/RootNavigation/DWAppRootViewController.m @@ -28,6 +28,10 @@ #import "DWURLRequestHandler.h" #import "dashwallet-Swift.h" +#if DASHPAY +#import "DWInvitationSetupState.h" +#endif + NS_ASSUME_NONNULL_BEGIN static NSTimeInterval const UNLOCK_ANIMATION_DURATION = 0.25; @@ -46,6 +50,10 @@ @interface DWAppRootViewController () @property (nonatomic, assign) BOOL launchingWasDeferred; @property (nullable, nonatomic, strong) DWAppRootViewController *rootController; +#if DASHPAY +@property (nullable, nonatomic, strong) NSURL *deferredDeeplink; +#endif + @end @implementation DWInitialViewController @@ -68,6 +72,17 @@ - (void)setLaunchingAsDeferredController { [self.rootController setLaunchingAsDeferredController]; } +#if DASHPAY +- (void)handleDeeplink:(NSURL *)url { + if (self.rootController) { + [self.rootController handleDeeplink:url]; + } + else { + self.deferredDeeplink = url; + } +} +#endif + - (void)handleURL:(NSURL *)url { [self.rootController handleURL:url]; } @@ -102,6 +117,13 @@ - (DWAppRootViewController *)createRootController { if (self.launchingWasDeferred) { [controller setLaunchingAsDeferredController]; } + +#if DASHPAY + if (self.deferredDeeplink) { + [controller handleDeeplink:self.deferredDeeplink]; + self.deferredDeeplink = nil; + } +#endif return controller; } diff --git a/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.h b/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.h new file mode 100644 index 000000000..54666d41c --- /dev/null +++ b/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWInvitationSetupState : NSObject + +@property (nullable, nonatomic, strong) NSURL *invitation; +@property (nullable, nonatomic, copy) NSString *chosenUsername; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.m b/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.m new file mode 100644 index 000000000..a68043757 --- /dev/null +++ b/DashWallet/Sources/UI/RootNavigation/DWInvitationSetupState.m @@ -0,0 +1,22 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWInvitationSetupState.h" + +@implementation DWInvitationSetupState + +@end diff --git a/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift b/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift index fb56981f6..71fa242ec 100644 --- a/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift +++ b/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift @@ -19,7 +19,7 @@ import Foundation // MARK: - TxDetailModel -@objc +@objc(DWTxDetailModel) class TxDetailModel: NSObject { var transaction: Transaction var transactionId: String @@ -181,9 +181,13 @@ extension TxDetailModel { return [] } + #if DASHPAY let user = DWDPUserObject(blockchainIdentity: blockchainIdentity) let model = DWTitleDetailCellModel(title: title, userItem: user, copyableData: nil) return [model] + #endif + + return [] } private func destinationUsers(with title: String, font: UIFont) -> [DWTitleDetailItem] { @@ -191,11 +195,16 @@ extension TxDetailModel { return [] } + #if DASHPAY let user = DWDPUserObject(blockchainIdentity: blockchainIdentity) let model = DWTitleDetailCellModel(title: title, userItem: user, copyableData: nil) return [model] + #endif + + return [] } + func inputAddresses(with font: UIFont) -> [DWTitleDetailItem] { if !shouldDisplayInputAddresses { return [] diff --git a/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift b/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift index 14ca8bccf..f16db7cab 100644 --- a/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift +++ b/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift @@ -100,7 +100,7 @@ extension BaseTxDetailsViewController: UITableViewDelegate { // MARK: - TXDetailViewController -@objc +@objc(DWTxDetailViewController) class TXDetailViewController: BaseTxDetailsViewController { @objc var model: TxDetailModel! diff --git a/DashWallet/Sources/UI/Uphold/Transfer/Confirm/UpholdConfirmViewController.swift b/DashWallet/Sources/UI/Uphold/Transfer/Confirm/UpholdConfirmViewController.swift index 187a4da3f..a2802e274 100644 --- a/DashWallet/Sources/UI/Uphold/Transfer/Confirm/UpholdConfirmViewController.swift +++ b/DashWallet/Sources/UI/Uphold/Transfer/Confirm/UpholdConfirmViewController.swift @@ -90,7 +90,9 @@ extension UpholdConfirmViewController: ConfirmPaymentViewControllerDelegate { } func confirmPaymentViewControllerDidConfirm(_ controller: ConfirmPaymentViewController) { - upholdModel.confirm(withOTPToken: nil) + controller.dismiss(animated: true) { [weak self] in + self?.upholdModel.confirm(withOTPToken: nil) + } } } diff --git a/DashWallet/Sources/UI/Views/BalanceView/BalanceView.swift b/DashWallet/Sources/UI/Views/BalanceView/BalanceView.swift index a7bd872b4..f059b7120 100644 --- a/DashWallet/Sources/UI/Views/BalanceView/BalanceView.swift +++ b/DashWallet/Sources/UI/Views/BalanceView/BalanceView.swift @@ -73,6 +73,9 @@ extension BalanceView { } private func reloadView() { + guard let dashBalanceLabel, + let fiatBalanceLabel else { return } + let mainAmountString = dataSource?.mainAmountString ?? NumberFormatter.dashFormatter.string(from: 0)! let supplementaryAmountString = dataSource?.supplementaryAmountString ?? NumberFormatter.fiatFormatter.string(from: 0)! diff --git a/DashWallet/Sources/UI/Views/CustomHUDView.swift b/DashWallet/Sources/UI/Views/CustomHUDView.swift new file mode 100644 index 000000000..e76451a74 --- /dev/null +++ b/DashWallet/Sources/UI/Views/CustomHUDView.swift @@ -0,0 +1,70 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2023 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +@objc(DWCustomHUDView) +class CustomHUDView: UIView { + let iconImageView: UIImageView + let textLabel: UILabel + + override init(frame: CGRect) { + iconImageView = UIImageView(frame: .zero) + textLabel = UILabel(frame: .zero) + + super.init(frame: frame) + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.contentMode = .scaleAspectFit + + textLabel.translatesAutoresizingMaskIntoConstraints = false + textLabel.textColor = .white + textLabel.font = .dw_regularFont(ofSize: 14) + + addSubview(iconImageView) + addSubview(textLabel) + + setupConstraints() + + backgroundColor = UIColor.black + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupConstraints() { + NSLayoutConstraint.activate([ + iconImageView.heightAnchor.constraint(equalToConstant: 18), + iconImageView.widthAnchor.constraint(equalToConstant: 18), + iconImageView.centerYAnchor.constraint(equalTo: centerYAnchor), + iconImageView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 0), + + textLabel.leadingAnchor.constraint(equalTo: iconImageView.trailingAnchor, constant: 8), + textLabel.centerYAnchor.constraint(equalTo: centerYAnchor), + textLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0) + ]) + } + + @objc func setText(_ text: String) { + textLabel.text = text + } + + @objc func setIconImage(_ image: UIImage) { + iconImageView.image = image + } +} diff --git a/DashWallet/Sources/UI/Views/DWUIKit.h b/DashWallet/Sources/UI/Views/DWUIKit.h index 03eed6ce1..6bf81a216 100644 --- a/DashWallet/Sources/UI/Views/DWUIKit.h +++ b/DashWallet/Sources/UI/Views/DWUIKit.h @@ -29,4 +29,7 @@ #import "UIViewController+DWEmbedding.h" +#import "NSLayoutConstraint+DWAutolayout.h" +#import "UIView+DWAutolayout.h" + #endif /* DWUIKit_h */ diff --git a/DashWallet/Sources/UI/Views/DashInputField.swift b/DashWallet/Sources/UI/Views/DashInputField.swift index f253ffb30..a049ff2df 100644 --- a/DashWallet/Sources/UI/Views/DashInputField.swift +++ b/DashWallet/Sources/UI/Views/DashInputField.swift @@ -192,7 +192,7 @@ class DashInputField: UIView { addSubview(borderView) backgroundView = UIView() - backgroundView.backgroundColor = .clear + backgroundView.backgroundColor = .dw_background() backgroundView.layer.cornerRadius = 10 backgroundView.borderWidth = 1 addSubview(backgroundView) @@ -268,7 +268,7 @@ class DashInputField: UIView { backgroundView.backgroundColor = .systemRed.withAlphaComponent(0.1) } else { backgroundView.borderColor = isEditing ? .dw_dashBlue() : .darkGray.withAlphaComponent(0.5) - backgroundView.backgroundColor = .clear + backgroundView.backgroundColor = .dw_background() } } else { borderView.isHidden = true diff --git a/DashWallet/Sources/UI/Views/Navigation/BaseNavigationController.swift b/DashWallet/Sources/UI/Views/Navigation/BaseNavigationController.swift index 99ed643b0..63a94cb9a 100644 --- a/DashWallet/Sources/UI/Views/Navigation/BaseNavigationController.swift +++ b/DashWallet/Sources/UI/Views/Navigation/BaseNavigationController.swift @@ -218,6 +218,19 @@ extension UINavigationController { func controller(by type: T.Type) -> UIViewController? { viewControllers.first(where: { $0 is T }) } + + func replaceLast(_ n: Int = 1, with controller: UIViewController, animated: Bool = true) { + var viewControllers = viewControllers + viewControllers.removeLast(n) + viewControllers.append(controller) + setViewControllers(viewControllers, animated: animated) + } + + func popToViewController(ofType type: T.Type, animated: Bool) { + if let controller = controller(by: type) { + popToViewController(controller, animated: animated) + } + } } extension UIViewController { diff --git a/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.h b/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.h new file mode 100644 index 000000000..c340f5ca6 --- /dev/null +++ b/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.h @@ -0,0 +1,31 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + UIButton with Dynamic type support + */ +@interface DWButton : UIButton + +- (void)setInsetsForContentPadding:(UIEdgeInsets)contentPadding imageTitlePadding:(CGFloat)imageTitlePadding; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.m b/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.m new file mode 100644 index 000000000..d7861bb74 --- /dev/null +++ b/DashWallet/Sources/UI/Views/SharedViews/Buttons/DWButton.m @@ -0,0 +1,62 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWButton.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWButton + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self dwButton_setup]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self dwButton_setup]; + } + return self; +} + +- (void)dwButton_setup { + self.titleLabel.adjustsFontForContentSizeCategory = YES; + self.titleLabel.adjustsFontSizeToFitWidth = YES; + self.titleLabel.minimumScaleFactor = 0.5; + self.titleLabel.lineBreakMode = NSLineBreakByClipping; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(setNeedsLayout) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; +} + +- (void)setInsetsForContentPadding:(UIEdgeInsets)contentPadding imageTitlePadding:(CGFloat)imageTitlePadding { + self.contentEdgeInsets = UIEdgeInsetsMake(contentPadding.top, + contentPadding.left, + contentPadding.bottom, + contentPadding.right + imageTitlePadding); + self.titleEdgeInsets = UIEdgeInsetsMake(0, imageTitlePadding, 0, -imageTitlePadding); +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Views/SharedViews/DWShadowView.m b/DashWallet/Sources/UI/Views/SharedViews/DWShadowView.m deleted file mode 100644 index 409ed918b..000000000 --- a/DashWallet/Sources/UI/Views/SharedViews/DWShadowView.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWShadowView.h" - -#import "DWUIKit.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation DWShadowView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self shadowView_commonInit]; - } - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self shadowView_commonInit]; - } - return self; -} - -- (void)shadowView_commonInit { - self.backgroundColor = [UIColor clearColor]; - - [self.layer dw_applyShadowWithColor:[UIColor dw_shadowColor] alpha:0.02 x:0.0 y:0.0 blur:5.0]; - self.layer.shouldRasterize = YES; - self.layer.rasterizationScale = [UIScreen mainScreen].scale; - - _spread = 1.0; -} - -- (void)setSpread:(CGFloat)spread { - _spread = spread; - - [self setNeedsLayout]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - if (self.spread == 0 || self.isHidden) { - self.layer.shadowPath = nil; - } - else { - const CGFloat dx = -self.spread; - const CGRect rect = CGRectInset(self.bounds, dx, dx); - self.layer.shadowPath = [UIBezierPath bezierPathWithRect:rect].CGPath; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Views/SharedViews/ShadowView.swift b/DashWallet/Sources/UI/Views/SharedViews/ShadowView.swift new file mode 100644 index 000000000..4cd3e327d --- /dev/null +++ b/DashWallet/Sources/UI/Views/SharedViews/ShadowView.swift @@ -0,0 +1,59 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +@objc(DWShadowView) +class ShadowView: UIView { + var spread: CGFloat = 1.0 { + didSet { + setNeedsLayout() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + commonInit() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + commonInit() + } + + private func commonInit() { + backgroundColor = UIColor.clear + + layer.dw_applyShadow(with: .dw_shadow(), alpha: 0.02, x: 0.0, y: 0.0, blur: 5.0) + layer.shouldRasterize = true + layer.rasterizationScale = UIScreen.main.scale + + spread = 1.0 + } + + override func layoutSubviews() { + super.layoutSubviews() + + if spread == 0 || isHidden { + layer.shadowPath = nil + } else { + let dx = -spread + let rect = bounds.insetBy(dx: dx, dy: dx) + layer.shadowPath = UIBezierPath(rect: rect).cgPath + } + } +} diff --git a/DashWallet/Sources/UI/Views/SharedViews/TitleDetailCell/DWTitleDetailCellView.m b/DashWallet/Sources/UI/Views/SharedViews/TitleDetailCell/DWTitleDetailCellView.m index 3f801c223..0aaf0c027 100644 --- a/DashWallet/Sources/UI/Views/SharedViews/TitleDetailCell/DWTitleDetailCellView.m +++ b/DashWallet/Sources/UI/Views/SharedViews/TitleDetailCell/DWTitleDetailCellView.m @@ -17,7 +17,10 @@ #import "DWTitleDetailCellView.h" +#if DASHPAY #import "DWDPSmallContactView.h" +#endif + #import "DWUIKit.h" #import @@ -31,7 +34,9 @@ @interface DWTitleDetailCellView () @property (readonly, nonatomic, strong) UILabel *titleLabel; @property (readonly, nonatomic, strong) UILabel *detailLabel; +#if DASHPAY @property (readonly, nonatomic, strong) DWDPSmallContactView *contactView; +#endif @property (readonly, nonatomic, strong) UIStackView *stackView; @property (readonly, nonatomic, strong) CALayer *separatorLayer; @@ -84,11 +89,14 @@ - (void)titleDetailCellViewCommonInit { detailLabel.textColor = [UIColor dw_secondaryTextColor]; _detailLabel = detailLabel; +#if DASHPAY DWDPSmallContactView *contactView = [[DWDPSmallContactView alloc] initWithFrame:CGRectZero]; contactView.translatesAutoresizingMaskIntoConstraints = NO; _contactView = contactView; - UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ titleLabel, detailLabel, contactView ]]; +#else + UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ titleLabel, detailLabel ]]; +#endif stackView.translatesAutoresizingMaskIntoConstraints = NO; stackView.axis = UILayoutConstraintAxisHorizontal; stackView.alignment = UIStackViewAlignmentCenter; @@ -169,6 +177,7 @@ - (void)setModel:(nullable id)model { self.detailLabel.hidden = YES; } +#if DASHPAY if (model.userItem) { self.contactView.hidden = NO; self.contactView.item = model.userItem; @@ -176,7 +185,8 @@ - (void)setModel:(nullable id)model { else { self.contactView.hidden = YES; } - +#endif + self.detailLabel.textAlignment = model.detailAlignment; } diff --git a/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.h b/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.h index f17466b02..a383360ea 100644 --- a/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.h +++ b/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.h @@ -25,6 +25,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) DWModalPopupAppearanceStyle appearanceStyle; +- (instancetype)initWithInteractiveTransitionAllowed:(BOOL)interactiveTransitionAllowed; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.m b/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.m index 8b0bfc960..2e05a5a55 100644 --- a/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.m +++ b/DashWallet/Sources/UI/Views/Transitions/Popup/DWModalPopupTransition.m @@ -33,9 +33,14 @@ @interface DWModalPopupTransition () @implementation DWModalPopupTransition - (instancetype)init { + return [self initWithInteractiveTransitionAllowed:YES]; +} + +- (instancetype)initWithInteractiveTransitionAllowed:(BOOL)interactiveTransitionAllowed { self = [super init]; if (self) { _interactiveTransition = [[DWModalInteractiveTransition alloc] init]; + _interactiveTransition.interactiveTransitionAllowed = interactiveTransitionAllowed; } return self; } diff --git a/DashWallet/Sources/UI/Views/UIButton+Dash.swift b/DashWallet/Sources/UI/Views/UIButton+Dash.swift index a1458c719..2d08245ac 100644 --- a/DashWallet/Sources/UI/Views/UIButton+Dash.swift +++ b/DashWallet/Sources/UI/Views/UIButton+Dash.swift @@ -267,7 +267,7 @@ class ActionButton: ActivityIndicatorButton { var container = incoming container.foregroundColor = foregroundColor - container.font = .title3 + container.font = .dw_mediumFont(ofSize: 15) return container } } @@ -317,7 +317,7 @@ final class GrayButton: ActivityIndicatorButton { var container = incoming container.foregroundColor = foregroundColor - container.font = .title3 + container.font = .dw_mediumFont(ofSize: 15) return container } } diff --git a/DashWallet/Sources/UI/Views/UIColor+DWStyle.h b/DashWallet/Sources/UI/Views/UIColor+DWStyle.h index acdae2e4d..f924c8c55 100644 --- a/DashWallet/Sources/UI/Views/UIColor+DWStyle.h +++ b/DashWallet/Sources/UI/Views/UIColor+DWStyle.h @@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN + (UIColor *)dw_secondaryTextColor; + (UIColor *)dw_tertiaryTextColor; + (UIColor *)dw_quaternaryTextColor; ++ (UIColor *)dw_subheaderTextColor; + (UIColor *)dw_redColor; + (UIColor *)dw_darkBlueColor; + (UIColor *)dw_greenColor; @@ -70,6 +71,12 @@ NS_ASSUME_NONNULL_BEGIN + (UIColor *)dw_blueGradientStartColor; ++ (UIColor *)dw_lightBlueColor; + ++ (UIColor *)dw_buttonBlackColor; + ++ (UIColor *)dw_buttonBlackTitleColor; + + (UIColor *)dw_grayButtonColor; @end diff --git a/DashWallet/Sources/UI/Views/UIColor+DWStyle.m b/DashWallet/Sources/UI/Views/UIColor+DWStyle.m index 5df7121a0..01717eea7 100644 --- a/DashWallet/Sources/UI/Views/UIColor+DWStyle.m +++ b/DashWallet/Sources/UI/Views/UIColor+DWStyle.m @@ -87,6 +87,12 @@ + (UIColor *)dw_quaternaryTextColor { return color; } ++ (UIColor *)dw_subheaderTextColor { + UIColor *color = [UIColor colorNamed:@"SubheaderTextColor"]; + NSParameterAssert(color); + return color; +} + + (UIColor *)dw_redColor { UIColor *color = [UIColor colorNamed:@"RedColor"]; NSParameterAssert(color); @@ -219,6 +225,24 @@ + (UIColor *)dw_blueGradientStartColor { return color; } ++ (UIColor *)dw_lightBlueColor { + UIColor *color = [UIColor colorNamed:@"LightBlueColor"]; + NSParameterAssert(color); + return color; +} + ++ (UIColor *)dw_buttonBlackColor { + UIColor *color = [UIColor colorNamed:@"ButtonBlackColor"]; + NSParameterAssert(color); + return color; +} + ++ (UIColor *)dw_buttonBlackTitleColor { + UIColor *color = [UIColor colorNamed:@"ButtonBlackTitleColor"]; + NSParameterAssert(color); + return color; +} + + (UIColor *)dw_grayButtonColor { UIColor *color = [UIColor colorNamed:@"GrayButtonColor"]; NSParameterAssert(color); diff --git a/DashWallet/Sources/UI/Views/UIView+DWHUD.h b/DashWallet/Sources/UI/Views/UIView+DWHUD.h index d527d796f..a504ca656 100644 --- a/DashWallet/Sources/UI/Views/UIView+DWHUD.h +++ b/DashWallet/Sources/UI/Views/UIView+DWHUD.h @@ -27,6 +27,7 @@ extern NSTimeInterval const DW_INFO_HUD_DISPLAY_TIME; - (void)dw_hideProgressHUD; - (void)dw_showInfoHUDWithText:(NSString *)text; +- (void)dw_showInfoHUDWithText:(NSString *)text offsetForNavBar:(BOOL)shouldOffset; @end diff --git a/DashWallet/Sources/UI/Views/UIView+DWHUD.m b/DashWallet/Sources/UI/Views/UIView+DWHUD.m index 90904ec9a..72c3e7787 100644 --- a/DashWallet/Sources/UI/Views/UIView+DWHUD.m +++ b/DashWallet/Sources/UI/Views/UIView+DWHUD.m @@ -21,6 +21,7 @@ #import #import "DWUIKit.h" +#import "dashwallet-Swift.h" NS_ASSUME_NONNULL_BEGIN @@ -44,13 +45,28 @@ - (void)dw_hideProgressHUD { } - (void)dw_showInfoHUDWithText:(NSString *)text { - MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self]; + [self dw_showInfoHUDWithText:text offsetForNavBar:NO]; +} + +- (void)dw_showInfoHUDWithText:(NSString *)text offsetForNavBar:(BOOL)shouldOffset { + MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self animated:YES]; hud.removeFromSuperViewOnHide = YES; - hud.mode = MBProgressHUDModeText; - hud.label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; - hud.label.adjustsFontForContentSizeCategory = YES; - hud.label.numberOfLines = 0; - hud.label.text = text; + hud.mode = MBProgressHUDModeCustomView; + + DWCustomHUDView *customView = [[DWCustomHUDView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), 28)]; + [customView setText:text]; + [customView setIconImage:[UIImage imageNamed:@"checkmark.circle.white"]]; + + hud.customView = customView; + hud.bezelView.layer.cornerRadius = 8.0f; + hud.bezelView.clipsToBounds = YES; + hud.bezelView.color = [UIColor colorWithWhite:0.0f alpha:0.9f]; + hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; + + CGFloat yOffset = CGRectGetHeight(self.bounds) / 2 - CGRectGetHeight(customView.bounds) - (shouldOffset ? 85 : 35); + hud.offset = CGPointMake(0.0f, yOffset); + hud.userInteractionEnabled = NO; + __weak typeof(self) weakSelf = self; hud.completionBlock = ^{ __strong typeof(weakSelf) strongSelf = weakSelf; diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 33c7fa78b..fa2510890 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "عن"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "استرجاع الحساب"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "عنوان"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "الأمن المتقدم"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "الكل"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "هل انت متأكد ؟ "; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "رصيد"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "كن جزءًا من Dash Masternode مع CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "بين محفظة داش و كوين بيس."; +"Between Dash Wallet and Coinbase" = "بين محفظة داش و كوين اكس"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "بين محفظة داش وحساب Coinbase الخاص بك"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "شراء داش عن طريق فيات"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "شراء داش من حساب أفلود"; +/* Dash Portal */ +"Buy Dash · No account needed" = "قم بشراء داش - لا حساب لازم"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "شراء بطاقات الهدايا مع داش الخاص بك"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "شراء/بيع"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "إلغاء "; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "قم بتغيير الرقم السري"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "افحص اتصالك"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "اغلاق"; +/* CrowdNode */ +"Close and notify when it’s done" = "أغلق وأبلغ عند الانتهاء"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "رسوم كوين بيس"; -/* No comment provided by engineer. */ -"Confirm" = "تأكد"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "تأكد"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "تأكيد الرقم السري"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "يتم التأكيد"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "تم الاتصال"; +/* CrowdNode */ +"Connected Dash address" = "عنوان داش متصل"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "نسخ"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "تعذر العثور على سعر الصرف."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "انشاء محفظة جديدة"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "إنشاء حساب"; +/* CrowdNode */ +"Create an online CrowdNode account" = "قم بإنشاء حساب CrowdNode عبر الإنترنت"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "إنشاء حساب على الإنترنت"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "بطاقة إئتمان"; /* Crowdnode */ "CrowdNode Account" = "حساب CrowdNode "; +/* CrowdNode */ +"CrowdNode benefits" = "فوائد CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "دعم CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "يستخدم CrowdNode هذا العنوان باعتباره معرف حسابك. ستفقد الوصول إلى أموالك داخل هذه المحفظة وحساب CrowdNode الخاص بك إذا فقدت عبارة المرور المرتبطة بهذا العنوان."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "حدود السحب CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "داش"; +/* No comment provided by engineer. */ +"Dash address" = "عنوان داش"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ -"Dash balance on Coinbase" = "Dash balance on Coinbase"; +"Dash balance on Coinbase" = "رصيد داش على كوين بيس"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "رصيد داش على Uphold "; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash payments can't be less than %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "محفظة داش على هذا الجهاز"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "تاريخ"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "العملة الافتراضية ، الاختصارات ، حول ..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "افصل حساب كوين بيس"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "الغاء اتصال حساب Uphold "; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "تم قطع الاتصال"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "مسافة"; /* No comment provided by engineer. */ "Do not take a screenshot" = "لا تأخذ لقطة شاشة"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "تم"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "على سبيل المثال johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "قم بستاك داش بسهولة واكسب دخلًا سلبيًا ببضع نقرات بسيطة."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "أدخل رمز 2FA الخاص بك أدناه"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "خطأ"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "رسوم مشتريات العملات المشفرة"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "تصفية المعاملات"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "تمت تصفيتها بواسطة:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ابحث عن التجار الذين يقبلون الداش، وأماكن شرائها وكيفية كسب الدخل منها."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "ابحث عن التجار الذين يقبلون داش كوسيلة للدفع."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "من Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "من Uphold الى محفظة داش"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "من Uphold إلى محفظة داش"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "احصل على مكافآت من الودائع في Dash Masternodes بأقل من 0.5 داش."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "احصل على السعر"; +/* CrowdNode */ +"Get Rewards Instantly" = "احصل على المكافآت على الفور"; + /* No comment provided by engineer. */ "Get Started" = "البدء"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "الشروع في العمل مع CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "ساعدنا على تحسين تجربتك"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "مرتفع"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "التاريخ"; +/* CrowdNode */ +"How CrowdNode staking works" = "كيف يعمل CrowdNode Staking"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "كيفية تأكيد عنوان API Dash الخاص بك"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "كيفية استخدام بطاقة الهدايا"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "المعرف الشخصي التابع لعقدة Evolution"; /* No comment provided by engineer. */ "I Accept" = "I Accept"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "كتبتها"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "إذا فقدت عبارة مرورك في أي وقت ، فيمكنك إثبات هويتك بوسائل أخرى لاستعادة الوصول إلى أموال CrowdNode الخاصة بك."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "إذا فقدت عبارة مرورك لهذه المحفظة وفقدت هذا الجهاز أو ألغيت تثبيت Dash Wallet ، فستفقد إمكانية الوصول إلى أموالك على CrowdNode والأموال الموجودة في هذه المحفظة."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "إذا كنت لا تزال ترغب في مسحها ، فيرجى إدخال: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "حالاً"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "تحت المعالجة…"; /* No comment provided by engineer. */ "Income" = "دخل"; +/* CrowdNode */ +"Information about your online account" = "معلومات حول حسابك على الإنترنت"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "رصيد غير كاف"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "تم النقل الداخلي إلى"; +/* CrowdNode */ +"Introducing Staking" = "نقدم لكم ستاكنج"; + /* Invalid transaction */ "Invalid" = "غير صالحة"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "قد يستغرق تحديث رصيدك دقيقة."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "الانضمام إلى المجموعة"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "معرف المفتاح"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "ربط حساب Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "ربط حساب موجود"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "ربط حساب CrowdNode الحالي"; @@ -870,7 +1209,7 @@ "Link Uphold account" = "رابط حساب أفلود"; /* Buy Sell Portal */ -"Link your account" = "Link your account"; +"Link your account" = "قم بايصال حسابك"; /* Dash Service Overview */ "Link your Coinbase account" = "اربط حسابك على Coinbase"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "سجّل الدخول إلى CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "تسجيل الخروج"; - /* No comment provided by engineer. */ "Log out from Uphold" = "تسجيل الخروج من Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "منخفض"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "إدارة إذن GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "مفاتيح ماسترنود"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "ماسترنود"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "الحد الأقصى"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "متوسط"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "الأعضاء أحرار في مغادرة المسبح ويمكنهم في أغلب الأحيان المغادرة على الفور."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "يعمل بحث التاجر بشكل أفضل مع تشغيل خدمات الموقع."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "المزيد"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "المزيد من التحكم"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "تم النقل من"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "حساب CrowdNode جديد"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "لا تقبل جميع المتاجر داش مباشرةً ، ولكن يمكنك شراء بطاقة هدايا باستخدام داش."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "حسنا"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "عبر الانترنت"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "مفاتيح المشغل"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "معاينة الطلب"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "مفاتيح المالك"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "دفع"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "ادفع من خلال"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "خيارات الدفع"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "لكل معاملة"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "مطلوب الرقم السري دائمًا لإجراء الدفع"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "يرجى التحقق من اتصال الشبكة الخاص بك"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "يرجى ملاحظة أن البريد الإلكتروني لا يتم حفظه بواسطة محفظة داش ويتم إرساله فقط إلى CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "الرجاء الانتظار"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "يرجى كتابتها"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "مفاتيح خاصة / عمومية (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "حماية مدخراتك"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "شراء"; /* No comment provided by engineer. */ "Quick Receive" = "إستقبال سريع"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1221,7 +1677,10 @@ "Receive directly into Coinbase" = "Receive directly into Coinbase"; /* Coinbase Entry Point */ -"Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +"Receive directly into Dash Wallet" = "استلم مباشرةً إلى محفظة داش"; + +/* CrowdNode */ +"Receive your share of rewards daily." = "احصل على حصتك من المكافآت يوميًا."; /* Received transaction */ "Received" = "تم الاستلام"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "استلام المكافآت"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "إعادة تفحص"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "مسح"; /* No comment provided by engineer. */ "Scan Private Key" = "مسح المفتاح الخاص"; +/* No comment provided by engineer. */ +"Scan QR" = "مسح QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "الماسح الضوئي لرمز QR "; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "تكون لقطات الشاشة مرئية للتطبيقات والأجهزة الأخرى. إنشاء كلمة الإستراد جديدة والحفاظ على سريتها."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "أمان"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "مشاهدة في أفلود"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "اختر عملة "; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "اختر عملة "; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "إرسال تقرير"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "إرسال الى"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "جاري الإرسال"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "إرسال إلى"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "قم بتعيين الرقم السري"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "الإعدادات"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "مشاركة"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ -"Show content in the clipboard" = "Show content in the clipboard"; +"Show content in the clipboard" = "اظهر المحتوى في لوحة الملاحظات "; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "إظهار QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "اظهر جملة الاسترداد"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "ستاكنج"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,8 +2064,14 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ -"Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; +"Tap the address from the clipboard to paste it" = "اضغط على العنوان من لوحة الملاحظات للصقه"; /* No comment provided by engineer. */ "Tap to hide balance" = "اضغط لاخفاء الرصيد"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "فئة الضريبة"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "السلسلة قيد المزامنة ..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "الرمز غير صحيح. يرجى مراجعة وحاول مرة أخرى!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "يمثل هذا النسبة المئوية السنوية الحالية لعائد ماسترنود كامل مطروحًا منه رسوم CrowdNode البالغة 15٪. إنه ليس معدل عائد مضمون وقد يرتفع أو ينخفض بناءً على حجم مجمعات CrowdNode وسعر داش."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "هذه المحفظة ليست فارغة أو لم تنتهِ المزامنة ، ولا يجوز مسحها بدون كلمة الإستراد"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "لبدء التخزين ، أنشئ حسابًا على CrowdNode أو اتصل بحساب موجود."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "إلى عنوان Dash المخصص لحساب CrowdNode الخاص بك في Dash Wallet على هذا الجهاز"; + /* No comment provided by engineer. */ "Tools" = "ادوات"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "المجموع"; /* No comment provided by engineer. */ "Touch ID limit" = "إلمس لمعرفة الحد"; +/* CrowdNode */ +"Transaction History" = "تاريخ المعاملات"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "تحويل داش"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "نقل داش من حسابك في أفلود لهذه المحفظة"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "غير قادر على الاتصال"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "مجهول"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "تحديث السعر"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "دعم"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "التحقق من صحة العنوان ..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "التحقق من صحة العنوان ..."; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "تخقق"; +/* CrowdNode */ +"Verify your API Dash address" = "تحقق من عنوان API Dash الخاص بك"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "مرتفع جداً"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "سيتم إرسال كميات صغيرة جدًا من داش من وإلى CrowdNode للتحقق من أنك مالك عنوان المحفظة هذا."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "عرض عبارة الاسترداد"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "مفاتيح التصويت"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "انتظر حتى تتم مزامنة السلسلة بالكامل ، حتى نتمكن من مراجعة سجل معاملاتك. قم بزيارة موقع CrowdNode لتسجيل الدخول أو التسجيل."; @@ -1749,7 +2430,7 @@ "Wait until wallet is synced to complete the transaction" = "Wait until wallet is synced to complete the transaction"; /* Enter Address Screen */ -"Wallet Address" = "Wallet Address"; +"Wallet Address" = "عنوان المحفظة "; /* No comment provided by engineer. */ "Wallet disabled" = "المحفظة معطلة"; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "قمنا بالترقية"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "سنكتشف تلقائيًا هذه المعاملة ونحول نفس المبلغ إلى حساب CrowdNode الخاص بك. بعد ذلك ستتمكن من إجراء عمليات الإيداع والسحب في Dash Wallet على هذا الجهاز."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "مرحباً"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "عندما يتم تأكيد المعاملة ، ستكون المحفظة الأخرى عديمة القيمة ويجب عدم إعادة استخدامها لأسباب تتعلق بالسلامة."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "لماذا أرى كل هذه المعاملات؟"; +/* CrowdNode */ +"Why do you need an online account?" = "لماذا تحتاج إلى حساب على الإنترنت؟"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "لماذا لا يجب علي التقاط لقطة شاشة؟"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "طلب سحب"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "يمكنك تغيير كيفية / وقت دفع أرباح المكافآت لك."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "يمكنك الاطلاع على معلومات مفصلة حول الإيداعات والسحوبات وأرباح المكافآت."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "ليس لديك رصيد كافي"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "لقد تجاوزت حد التفويض على كوين بيس."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "يجب عليك الاحتفاظ بنسخة احتياطية من عبارة مرورك في Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "ستحتاج أيضًا إلى تسجيل الخروج من موقع Uphold باستخدام متصفحك"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "ستحتاج إلى عبارة الاسترداد هذه للوصول إلى أموالك في حالة فقد هذا الجهاز أو تلفه."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "ستتلقى مدفوعات جزئية تلقائيًا وسيتم إعادة استثمارها افتراضيًا ، ومع ذلك ، من السهل أيضًا إعداد عمليات سحب تلقائية لتلقي دفعات متكررة."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "حساب CrowdNode الخاص بك قيد الإنشاء ..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "تم استلام الإيداع الخاص بك إلى CrowdNode."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "عنوان داش الأساسي الذي تستخدمه حاليًا لحساب CrowdNode الخاص بك"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "رصيد داش في حسابك في أفلود هو"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "محفظتك مؤمنة الآن. يمكنك استخدام عبارة الاسترداد في أي وقت لاسترداد حسابك على جهاز آخر."; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index e6de44880..ad263ed1c 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ не е разрешен достъпа до Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Относно"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Адрес"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Разширена сигурност"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Всички"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Сигурен ли си ?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Баланс"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Купи Dash с Uphold акаунт"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Чрез изтриването на това устройство вече няма да имате достъп до средства на това устройство. Това трябва да се направи само, ако вече нямате достъп до фразата за възстановяване си и сте забравили своя ПИН код."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Отказ"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Промяна на ПИН"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Проверете връзката"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Изчисти"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Затвори"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Затвори приложението"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Потвърди"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Потвърди"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Потвърди ПИН"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Потвърждаване"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Свързани пиъри: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Копирай"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Копирай логовете"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Не може да намери обменните курсове."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Плащането не може да се изпълни"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Не може да бъде излъчено плащането към Dash мрежата"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Създай нов портфейл"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash адрес"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Дата"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Валута по подразбиране,преки пътища, относно..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Завършено"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Въведете вашият 2FA код по-долу"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Грешка"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Изход"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Филтър на транзакциите "; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Първи стъпки"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Помогнете ни да подобрим вашето преживяване"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Високо"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "История"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Написах го долу"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Ако все още искате да го изтриете, моля въведете: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Игнорирай"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Незабавно"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Недостатъчно средства"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Вътрешен трансфер"; /* No comment provided by engineer. */ "Internally moved to" = "Вътрешно преместени към"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Невалиден"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Невалидно искане за плащанеt"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Излез от профила"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Излез от Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Ниско"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode обновяване"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Максимум"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Средно"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Още"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Повече контрол"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Преместено от"; /* No comment provided by engineer. */ "Moved to Address" = "Преместено в адрес"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC устройство"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Не е валиден Dash адрес"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Операторски ключове"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Ключове на собственика"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Плати"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "ПИН се изисква винаги при правене на плащания"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Моля въведете ПИН за обновяване на портфейла"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Моля изчакайте"; /* No comment provided by engineer. */ "Please wait" = "Моля изчакайте"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Моля запишете го долу"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Адрес на досавчика"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Бързо получаване"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Кворумите са утвърдени: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Получени"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Получени от"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Докладвай проблем"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Повторно сканиране"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Ревю & Оценка на приложението"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Възнаграждение"; /* No comment provided by engineer. */ "Rewards" = "Възнаграждения"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Сканирай"; /* No comment provided by engineer. */ "Scan Private Key" = "Сканирай частен ключ"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Сканирай QR кода"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Снимките на екрана са видими от други приложения и устройства. Генерирайте нова фраза за възстановяване и го запазете в тайна."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Сигурност"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Виж Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Изпрати на"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Изпраща"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Постави ПИН"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Настройки"; /* No comment provided by engineer. */ "Setup Wallet" = "Конфигуриране на портфейла"; +/* CrowdNode */ +"Share" = "Сподели"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Покажи Masternode ключове"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Покажи фраза за възстановяване"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Този портфейл не е празен или синхронизирането не е приключило, не можете да го изтриете без фразата за възстановяване"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Инструменти"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Общо"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID лимит"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Транзакция id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Прехвърлете Dash от вашият Uphold акаунт към този портфейл"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Опитай отново"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Включи парола за устройството"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Не може да се свърже"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Не може да получи нов QR код"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Непознат"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Неподдържан url"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Обновено: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Актуализиране на цената"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Провери"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Много високо"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Виж фразата за възстановяване"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Адрес за гласуване"; /* No comment provided by engineer. */ "Voting Keys" = "Ключове за гласуване"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Надградихме"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Добре дошли"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Когато транзакцията бъде потвърдена, другият портфейл ще бъде безполезен и не бива да се използва повторно от съображения за безопасност."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "На път сте да изпразните този портфейл от това устройство. Средствата, свързани с този портфейл, могат да бъдат изтеглени само ако имате фраза за възстановяване."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Можете да се удостоверите с Face ID за плащания по-долу"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Можете да се удостоверите с Touch ID за плащания по-долу"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Трябва да въведете своя ПИН, за да влезете в Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Необходимо е също да излезете от уебсайта на Uphold, чрез вашият браузър"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Вашата транзакция беше изпратена и сумата би трябвало да се появи във вашият портфейл до няколко минути."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Вашият Dash баланс в Uphold  е"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Вашата транзакция беше изпратена и сумата би трябвало да се появи във вашият портфейл до няколко минути."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Вашият портфейл сега е защитен. Можете да използвате вашата фраза за възстановяване по всяко време, за да възстановите акаунта си на друго устройство."; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index 0c4112a64..30b863ee1 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Quant a"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adreça"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel·la"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copia"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "No es pot trobar el preu de canvi."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "D'acord"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Escanejar"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Ajustaments"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Comparteix"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 3494934fb..204136627 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nemá přístup k Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Platba se zpracovává"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "O aplikaci"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Přijmout"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Přijímá DASH"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Aktivita"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Přidat nový kontakt"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresa"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Pokročilé zabzpečení"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Vše"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Jste si tím jistí?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Bilance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Nakoupit Dash přes Uphold účet"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Nákup dárkových poukazů za Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Nákup/Prodej"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Vymazáním přijdete o prostředky na tomto zařízení. Mělo by být provedeno, pouze pokud nemáte frázi pro obnovení a zapomněli jste také PIN kód."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Zrušit"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Změnit PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Zkontrolujte vaše připojení"; /* Choose your Dash username */ "Choose your" = "Vyberte váš"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Odstranit"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Zavřít"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Zavřít aplikaci"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Potvrdit"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Potvrdit a zaplatit"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Potvrdit"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Potvrdit PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Konfirmace"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Připojeno"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Přípojených peerů: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopírovat"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Kopírovat logy"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Nelze se připojit k síti Dash, zkontrolujte prosím, zda jste připojeni k internetu."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Nelze najít směnný kurz."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Platbu nelze provést"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Platbu nelze odeslat do sítě Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Vytvořit novou peněženku"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Vytvořit účet"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Kreditní karta"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Účet"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash adresa"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade poplatek"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Výchozí měna, zkratky, o aplikaci"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Odpojeno"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Vzdálenost"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Nesnímejte obrazovku"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Hotovo"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Dřívější"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Jednoduše Dash úročte a získejte pasivní příjem pomocí několika kliknutí."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "např.: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Vložte váš 2FA kód níže"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Chyba"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Chyba při aktualizaci"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Odejít"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtrovat transakce"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtrováno:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Najdi uživatele na Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generovat rozšířený veřejný klíč?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Jdu na to"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Začínáme s CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Pomozte nám aplikaci vylepšit"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Vysoká"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Historie"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Jak použít dárkový poukaz"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Mám poznamenáno"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Pokud jej přesto chcete vymazat, zadejte: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignorovat"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Okamžitě"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Nedostatečný zůstatek"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interní transakce"; /* No comment provided by engineer. */ "Internally moved to" = "Interně přesunuto do"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Neplatná"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Neplatný platební požadavek"; /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Pokoušíte se obnovit peněženku pomocí 12 slovní fráze pro obnovení, ale zadali jste pouze 10 slov, chcete automaticky obnovit chybějící slova? Může to trvat až hodinu. Doporočujeme připojit zařízení ke zdroji."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Pokoušíte se obnovit peněženku pomocí 12 slovní fráze pro obnovení, ale zadali jste pouze 11 slov, chcete automaticky obnovit chybějící slova?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Připojte se k Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Dejte mi vědět, až to bude hotové"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Pouze písmena a číslice"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Připojit existující účet"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Přihlásit do CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Odhlásit"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Odhlásit z účtu Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Nízká"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Spravovat GPS oprávnění"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizace masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximálně %ld znaků"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Střední"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Vyhledávání obchodníků funguje lépe se zapnutým určením polohy."; -/* Validation rule */ -"Minimum 3 characters" = "Minimálně 3 znaky"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Více"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Lepší správa"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Přesunuto z"; /* No comment provided by engineer. */ "Moved to Address" = "Přesunuto na adresu"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Moje kontakty"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nový"; +/* CrowdNode */ +"New CrowdNode Account" = "Nový CrowdNode Účet"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC zařízení"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Není platnou Dash adresou"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Ne všechny obchody přijímají přímo DASH, můžete si ale za Dash koupit dárkový poukaz."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Až %@ přijme váší žádost, budete pro platby moci použít uživatelské jméno"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Klíče operátora"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Klíče majitele"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Platit"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Plaťte na uživatelské jméno"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Pro platby je vždy vyžadován PIN"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Zkontrolujte připojení k síti"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Pro aktualizaci peněženky zadejte PIN kód"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Zkuste skenování ještě jednou."; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Čekejte prosím"; /* No comment provided by engineer. */ "Please wait" = "Čekejte prosím"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Poznamenejte si ji"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Adresa poskytovatele"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Přijmout"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Validovaných kvór: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Přijato"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Přijato od"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Obnovit"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Nahlásit problém"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Znovu skenovat"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Ohodnotit aplikaci"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Odměna"; /* No comment provided by engineer. */ "Rewards" = "Odměny"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skenovat"; /* No comment provided by engineer. */ "Scan Private Key" = "Skenovat privátní klíč"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Skenovat QR kód"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Snímky obrazovky jsou dostupné pro ostatní aplikace a zařízení. Vygenerujte novou frázi pro obnovení a udržujte ji v tajnosti."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Vyhledat kontakt"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Hledání uživatele %@ na Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Zabezpečení"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Prohlédnout na Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Odeslat žádost o přidání mezi kontakty"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Odeslat prostřednictvím"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Odesílání"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Odesílání"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Nastavit PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Nastavení"; /* No comment provided by engineer. */ "Setup Wallet" = "Vytvořit peněženku"; +/* CrowdNode */ +"Share" = "Sdílet"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Zobrazit klíče masternode"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobrazit frázi pro obnovení"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Úročení"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Podpora"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Žádná nová oznámení"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Žádní uživatelé neodpovídají jménu %@ ve vašich kontaktech"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Peněženka není prázdná nebo synchronizace se sítí není ještě dokončena, nesmíte ji smazat bez fráze pro obnovení."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Abyste mohli začít službu používat, vytvořte si účet CrowdNode nebo připojte již existující."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Nástroje"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Celkem"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "ID transakce"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Převeďte Dash z Uphold účtu do peněženky."; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Zkusit to znovu"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Zapněte bezpečnostní kód zařízení"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Nelze se připojit"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Nelze získat nový QR kód"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Neznámý"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Nepodporovaná URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aktualizováno: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Aktualizace ceny"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade poplatek"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgraduji na DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Uživatelské jméno už není dostupné"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Ověření uživatelské jméno hotovo"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Ověření uživatelské jméno selhalo"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Ověřit"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Vělmi vysoká"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "Zobrazit vše"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobrazit frázi pro obnovení"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Adresa pro hlasování"; /* No comment provided by engineer. */ "Voting Keys" = "Klíče pro hlasování"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Vylepšovali jsme"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Vítej"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Po potvrzení transakce bude druhá peněženka bezcenná, z bezpečnostních důvodů by neměla být znovu používána."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Proč bych neměl pořizovat snímek obrazovky?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Chystáte se smazat tuto peněženku ze zařízení. Prostředky spojené s touto peněženkou budou moci být opětovně získány pouze pokud máte frázi pro obnovení."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Pro placení se níže můžete ověřit přes Face ID"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Pro placení se níže můžete ověřit přes Touch ID"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Jako uživatelské jméno jste si vybrali „%@“. Vaše uživatelské jméno nelze po registraci změnit."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Pro otevření Dash Wallet musíte zadat váš PIN."; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Je také nutné se odhlásit z webové stránky Uphold pomocí vašeho prohlížeče."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transakce byla odeslána a částka by se měla objevit v pěněžence během pár minut."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Zůstatek Dash na účtu Uphold je"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transakce byla odeslána a částka by se měla objevit v pěněžence během pár minut."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tvoje uživatelské jméno %@ bylo úspěšně vytvořeno na Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Vytváření tvého uživatelské jména %@ na Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Peněženka je teď zabezpečena. Frázi pro obnovení můžete kdykoliv použít pro obnovení na jiném zařízení."; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index 9d0b927fe..1b3a94737 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Om"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresse"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Annullér"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiér"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Kunne ikke finde vekselkurs."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash-adresse"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Fejl"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Jeg skrev den ned"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "O.k."; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Betal"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "scan QR-kode"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Skærmbilleder er synlige for andre apps og enheder. Lav en ny gendannelsessætning og hold den hemmelig."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Indstillinger"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Del"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/dashwallet-Bridging-Header.h b/DashWallet/dashwallet-Bridging-Header.h index 1eac70b8b..a40671c81 100644 --- a/DashWallet/dashwallet-Bridging-Header.h +++ b/DashWallet/dashwallet-Bridging-Header.h @@ -32,7 +32,6 @@ static const bool _SNAPSHOT = 0; #import "DWGlobalOptions.h" #import "DWUIKit.h" #import "DWAboutModel.h" -#import "DWDateFormatter.h" #import "DWBaseActionButtonViewController.h" #import "DWNumberKeyboardInputViewAudioFeedback.h" #import "DWInputValidator.h" @@ -101,6 +100,14 @@ static const bool _SNAPSHOT = 0; #import "DWDPRegistrationErrorRetryDelegate.h" #import "DWDPUserObject.h" #import "DWModalUserProfileViewController.h" +#import "DWDPWelcomeView.h" +#import "DWInvitationActionsView.h" +#import "DWInvitationPreviewViewController.h" +#import "DWInvitationLinkBuilder.h" +#import "DWSuccessInvitationView.h" +#import "DWInvitationMessageView.h" +#import "DWScrollingViewController.h" +#import "UIView+DWEmbedding.h" //MARK: CrowdNode #import "DWCheckbox.h" @@ -116,3 +123,11 @@ static const bool _SNAPSHOT = 0; #import "DWPayModel.h" #import "DWHomeViewControllerDelegate.h" #import "DWMainMenuViewControllerDelegate.h" +#import "DWExploreTestnetViewController.h" + +#if DASHPAY +#import "DWDashPayConstants.h" +#import "DWRootContactsViewController.h" +#import "DWNotificationsProvider.h" +#import "DWContactsViewController.h" +#endif diff --git a/DashWallet/dashwallet.entitlements b/DashWallet/dashwallet.entitlements index 6f921ce9c..120550dd4 100644 --- a/DashWallet/dashwallet.entitlements +++ b/DashWallet/dashwallet.entitlements @@ -4,6 +4,10 @@ aps-environment development + com.apple.developer.associated-domains + + applinks:invitations.dashpay.io + com.apple.developer.icloud-container-identifiers iCloud.org.dash.dashwallet diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 78d6cebb5..62be276d0 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ darf nicht auf die Touch ID zugreifen"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Verarbeite Zahlung"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Über"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Akzeptieren"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "DASH direkt akzeptieren"; +/* CrowdNode */ +"Account Recovery" = "Kontowiederherstellung"; + /* No comment provided by engineer. */ "Activity" = "Aktivität"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Neuen Kontakt hinzufügen"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresse"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Erweiterte Sicherheit"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Alles"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "und"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Bist du sicher, dass du die Transaktion abbrechen möchtest?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Sind Sie sicher?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Die Suche nach Automaten funktioniert besser, wenn der Standortdienst angeschaltet ist."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Guthaben"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Guthaben:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Banküberweisung"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Werde Teil eines Dash Masternodes mit CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Zwischen Dash Wallet und Coinbase."; +"Between Dash Wallet and Coinbase" = "Zwischen der Dash Wallet und Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Zwischen Dash Wallet und deinem Coinbase Konto"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Dash mit Fiatwährung kaufen"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Dash über Uphold-Konto kaufen"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Dash kaufen. Es wird kein Konto benötigt."; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kaufe Gutscheinkarten mit Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Kaufen/Verkaufen"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Durch das Zurücksetzen des Gerätes, geht das gespeicherte Guthaben verloren. Dies sollte nur geschehen, wenn kein Zugang mehr zur Passphrase besteht und der PIN-Code vergessen wurde."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Abbrechen"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Die Stornierung dieser Transaktion führt nicht zur Stornierung des Handelsauftrags. Du wirst deine DASH in Kürze auf deinem Coinbase Konto erhalten."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "PIN ändern"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Verbindung überprüfen"; /* Choose your Dash username */ "Choose your" = "Wähle deinen"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Löschen"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Schließen"; +/* CrowdNode */ +"Close and notify when it’s done" = "Schließen und benachrichtigen, wenn abgeschlossen"; + /* No comment provided by engineer. */ "Close App" = "App schließen"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Gebühr"; -/* No comment provided by engineer. */ -"Confirm" = "Bestätigen"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Bestätigen & Bezahlen"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Bestätigen(%@)"; +"Confirm" = "Bestätigen"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Bestätigen(%1$d %2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "PIN bestätigen"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Bestätige"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Verbunden"; +/* CrowdNode */ +"Connected Dash address" = "Dash Adresse verknüpfen"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Verbundene Peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopieren"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Log kopieren"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Verbindung zum Dash-Netzwerk konnte nicht hergestellt werden. Überprüfe bitte, ob du mit dem Internet verbunden bist."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Kann Wechselkurs nicht finden."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Zahlung konnte nicht durchgeführt werden"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Zahlung konnte nicht an das Dash-Netzwerk übermittelt werden"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Neue Wallet erstellen"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Konto erstellen"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Einen neues CrowdNode online Konto erstellen"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Online Konto erstellen"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Kreditkarte"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode-Konto"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode Leistungen"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "Crowdnode nutzt die Adresse als deine Konto ID. Wenn du die zugehörige Passphrase zu der Adresse verlierst, wirst du auch keinen Zugriff auf dein Guthaben und dein Crowdnode Konto mehr besitzen."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode Auszahlungslimits"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash-Adresse"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash Guthaben auf Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Dash Guthaben auf Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash-Zahlungen können nicht kleiner als %@ sein"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet auf diesem Gerät"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay-Upgradegebühr"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Standardwährung, Shortcuts, über..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Coinbase Konto trennen"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Die Verbindung zu deinem Uphold Konto auflösen"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Verbindung getrennt"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Entfernung"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Keinen Screenshot aufnehmen"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Fertig"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "z.B. maxmustermann@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Früher"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Dash staken und passives Einkommen generieren."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "zB: maxmuster"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Trage den 2FA-Code unten ein"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Fehler"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Fehler beim Aktualisieren"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Beenden"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Gebühren bei Kryptowährungskäufen"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Informationen abrufen"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Konto"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Transaktionen filtern"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Gefiltert nach:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Finde einen Benutzer des Dash-Netzwerks"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Finde Händler die Dash akzeptieren, Orte wo du Dash kaufen kannst und Wege wie du Einkommen damit erzielen kannst."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Finde Händler, die Dash als Zahlungsmethode akzeptieren."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Die erste Einzahlung sollte größer als %@ sein."; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Du wurdest zu deiner Sicherheit abgemeldet."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "von Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Von Uphold zur Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Von Uphold auf deine Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "von deinem Coinbase Konto"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Erhalte Erträge für Einzahlungen in Dash Masternodes bereits ab 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Erweiterten öffentlichen Schlüssel generieren?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Angebot einholen"; +/* CrowdNode */ +"Get Rewards Instantly" = "Rewards direkt erhalten"; + /* No comment provided by engineer. */ "Get Started" = "Beginnen"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Mit CrowdNode loslegen"; + /* Explore Dash: Filters */ "Gift Card" = "Gutscheinkarte"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Hilf uns, deine Erfahrung zu verbessern"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Hoch"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Verlauf"; +/* CrowdNode */ +"How CrowdNode staking works" = "Wie CrowdNode Staking funktioniert"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Wie du deine API Dash Adresse bestätigst"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Wie man eine Gutscheinkarte verwendet"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Ich stimme CrowdNode zu."; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Ich habe es aufgeschrieben"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Solltest du deine Passphrase verlieren, kannst du dich auf andere Weise verifizieren um den Zugriff auf dein CrowdNode-Guthaben wieder zu erlangen."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Wenn du die Passphrase für diese Wallet verlierst und das Gerät verloren geht oder die Dash Wallet deinstalliert wird, wirst du auch den Zugang zu Crowdnode und all dein Guthaben verlieren."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Wenn Sie es immer noch entleeren möchten, geben Sie es bitte ein: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Wenn du manuell reklassifizierte Transaktionstypen speichern möchtest, solltest du einen CSV-Datei exportieren."; /* No comment provided by engineer. */ "Ignore" = "Ignorieren"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Sofort"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Zusätzlich zu den angezeigten Coinbase-Gebühren wird ein Spread in den Preis eingerechnet. Bei der Verwendung von Advanced Trade ist kein Spread enthalten, da Sie direkt mit dem Orderbuch interagieren.\n\nDie Märkte für Kryptowährungen sind volatil, und dies ermöglicht es uns, vorübergehend einen Preis für die Handelsausführung festzulegen."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In Bearbeitung"; /* No comment provided by engineer. */ "Income" = "Einnahmen"; +/* CrowdNode */ +"Information about your online account" = "Informationen über dein Online Konto"; + /* Buy Sell Portal */ "Initializing" = "Initialisierung"; /* No comment provided by engineer. */ "Insufficient funds" = "Guthaben nicht ausreichend"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interne Transaktion"; /* No comment provided by engineer. */ "Internally moved to" = "Intern verschoben nach"; +/* CrowdNode */ +"Introducing Staking" = "Einführung in das Staking"; + /* Invalid transaction */ "Invalid" = "Ungültig"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Ungültige Eingabe"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Ungültige Zahlungsanforderung"; /* No comment provided by engineer. */ "Invalid QR Code" = "Ungültiger QR-Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Es kann eine Minute dauern, bis dein Guthaben aktualisiert wird."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Es kann bis zu 10 Minuten dauern, Dash von Coinbase zur Dash Wallet auf diesem Gerät zu übertragen."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Anscheinend versuchst du deine Wallet mit einer Wiederherstellungsphrase aus 12 Wörtern wiederherzustellen, allerdings hast du nur 10 Wörter eingegeben. Möchtest du die fehlenden Worte automatisch wiederherstellen? Dies kann bis zu einer Stunde in Anspruch nehmen. Wir empfehlen dir, dein Gerät an den Strom anzuschließen."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Anscheinend versuchst du deine Wallet mit einer Wiederherstellungsphrase aus 12 Wörtern wiederherzustellen, allerdings hast du nur 11 Wörter eingegeben. Möchtest du das fehlende Wort automatisch wiederherstellen?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "An Evolution teilnehmen"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Eintritt in den Pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Schlüssel als Zeichenkette"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Mehr erfahren..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Benachrichtige mich, wenn dies abgeschlossen ist"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Nur Buchstaben und Zahlen"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Coinbase Konto verknüpfen"; +/* CrowdNode */ +"Link Existing Account" = "Bestehendes Konto verbinden"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Bestehendes CrowdNode-Konto verbinden"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Bei CrowdNode anmelden"; -/* No comment provided by engineer. */ -"Log Out" = "Abmelden"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Aus Uphold abmelden"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Niedrig"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS-Erlaubnis verwalten"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Karte"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode-Schlüssel"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode-Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximal %ld Zeichen"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Mittel"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Den Mitgliedern steht es frei, den Pool zu verlassen, und sie können es in den meisten Fällen sofort vollziehen."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Die Händlersuche funktioniert besser, wenn die Standortdienste aktiviert sind."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 Zeichen"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Mehr"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Mehr Kontrolle"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Verschoben von"; /* No comment provided by engineer. */ "Moved to Address" = "Verschoben zur Adresse"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Meine Kontakte"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Neu"; +/* CrowdNode */ +"New CrowdNode Account" = "Neues Crowdnode Konto"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC-Gerät"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Kein aktiver Nutzer"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Keine Zahlungsmethode"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Keine gültige Dash-Adresse"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nicht alle Geschäfte akzeptieren DASH direkt, aber du kannst mit deinen Dash auch einen Gutschein kaufen."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Sobald %@ deine Anfrage angenommen hat, kannst du Zahlungen direkt an seinen Benutzernamen senden"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Händler"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Betreiber-Schlüssel"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vorschau bestellen"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Besitzer-Schlüssel"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Zahlen"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Direkt an Benutzernamen senden"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Bezahle mit"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Zahlungsart"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Auszahlungsoptionen"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "pro Transaktion"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN ist für jede Zahlung notwendig"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Bitte überprüfe deine Netzwerksverbindung"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "PIN eingeben zum upgraden der Wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Bitte beachte, dass diese E-Mail nicht in der Dash Wallet gespeichert wird sondern nur an CrowdNode gesendet wird"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Bitte beachte, dass du dein Guthaben nicht von CrowdNode abheben kannst solange dies niedriger als %@ Dash ist."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Bitte versuche erneut zu scannen"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Bitte warten"; /* No comment provided by engineer. */ "Please wait" = "Bitte warten"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Bitte warte, bis die Wallet vollständig synchronisiert ist, bevor du deinen Transaktionsverlauf exportierst."; /* No comment provided by engineer. */ "Please write it down" = "Bitte aufschreiben"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Vorher benutzt von:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Privater/ Öffentlicher Schlüssel (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Sichere deine Sparanlagen"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider-Adresse"; @@ -1194,7 +1644,10 @@ "Public key" = "öffentlicher Schlüssel"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Öffentlicher Schlüssel (Legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "Kaufen"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Schnell Empfangen"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quoren validiert: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Direkt in der Dash Wallet erhalten"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Erhalte täglich den Anteil deiner Rewards."; + /* Received transaction */ "Received" = "Empfangen"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Empfangen von"; +/* CrowdNode */ +"Receiving rewards" = "Rewards erhalten"; + /* No comment provided by engineer. */ "Recover" = "Wiederherstellen"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Problem melden"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Erneut scannen"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "App rezensieren & bewerten"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Belohnung"; /* No comment provided by engineer. */ "Rewards" = "Belohnungen"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scannen"; /* No comment provided by engineer. */ "Scan Private Key" = "Private Key scannen"; +/* No comment provided by engineer. */ +"Scan QR" = "QR Code scannen"; + /* No comment provided by engineer. */ "Scan QR Code" = "QR-Code scannen"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots sind sichtbar für andere Apps und Geräte. Generieren Sie eine neue Wiederherstellungs-Wortfolge und halten Sie diese geheim."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Kontakt suchen"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Nach Benutzernamen %@ im Dash-Netzwerk suchen"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Sicherheit"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Auf Uphold ansehen"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Wähle einen Coin aus"; /* Buy Sell Dash */ "Select a service" = "Dienst auswählen"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Wähle einen Coin aus"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Sende %@ Dash von deiner primären Dash Adresse, die du derzeit für dein CrowdNode Konto nutzt."; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Kontaktanfrage senden"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Bericht senden"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Senden an"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "An kopierte Adresse oder QR-Code senden."; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Versenden"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Senden an"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "PIN festsetzen"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Einstellungen"; /* No comment provided by engineer. */ "Setup Wallet" = "Wallet erstellen"; +/* CrowdNode */ +"Share" = "Teilen"; + /* Receive screen */ "Share address" = "Adresse teilen"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Bezahle mit DASH bei über 150.000 Händlern"; - /* Enter Address Screen */ "Show content in the clipboard" = "Inhalt der Zwischenablage anzeigen"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Masternode-Schlüssel anzeigen"; +/* CrowdNode */ +"Show QR" = "QR Code anzeigen"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Wiederherstellungsphrase anzeigen"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Synchronisieren..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tippe auf die Adresse in der Zwischenablage, um sie einzufügen."; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Steuerliche Kategorie"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Die Chain synchronisiert..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Diese Code ist falsch. Bitte kontrollieren und erneut versuchen!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Die Dash wurden deinem Coinbase Konto erfolgreich gutgeschrieben. Aber es entstand ein Problem bei dem Transfer auf die Dash Wallet dieses Gerätes."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Der Mindestbetrag für eine Transaktion ist %@."; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Es gibt keine neuen Benachrichtigungen"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Es gibt keine Benutzer mit dem Namen %@ in deinen Kontakten"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Es ist ein Fehler beim Abrufen der neuen Adresse aufgetreten."; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Dieser QR Code enthält die Zahlungsaufforderung für %@."; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Dies ist die aktuelle jährliche prozentuale Rendite eines ganzen Masternodes abzüglich 15% CrowdNode-Gebühren. Es handelt sich nicht um eine garantierte Rendite, die je nach Größe des CrowdNode Pools und Höhe des Dash Preises nach oben oder unten gehen kann."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Diese Wallet ist nicht leer oder die Synchronisierung wurde noch nicht abgeschlossen, ohne die Wiederherstellungsphrase können Sie diese nicht löschen."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "zur Dash Wallet auf diesem Gerät"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Um mit dem Staking zu beginnen, erstelle ein Konto bei CrowdNode oder verbinde ein bereits bestehendes."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "zu der vorgesehenen Dash Adresse für dein CrowdNode Konto in der Dash Wallet dieses Gerätes"; + /* No comment provided by engineer. */ "Tools" = "Werkzeuge"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Gesamt"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch-ID Limit"; +/* CrowdNode */ +"Transaction History" = "Transaktionshistorie"; + /* No comment provided by engineer. */ "Transaction id" = "Transaktions-ID"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Dash übertragen"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Dash vom Uphold-Konto an die Wallet transferieren"; - /* CrowdNode */ "Transfer Error" = "Übertragungsfehler"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Wiederholen"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Gerätecode aktivieren"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Zwei-Faktor-Authentifizierung erforderlich"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Verbindung fehlgeschlagen"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Kann keinen neuen QR-Code erzeugen"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unbekannt"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "URL nicht unterstützt"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Aktualisiere Preis"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgradegebühr"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Auf DashPay upgraden"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Geschenkkarte verwenden"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Benutzt von:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Benutzername bereits vergeben"; -/* CrowdNode Portal */ -"Validating address…" = "Adresse validieren..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validierung des Benutzernamens abgeschlossen"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Adresse validieren..."; /* No comment provided by engineer. */ "Validating username failed" = "Validierung des Benutzernamens fehlgeschlagen"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verifizieren"; +/* CrowdNode */ +"Verify your API Dash address" = "API Dash Adresse verifizieren"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Sehr hoch"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Es werden nun kleine Dash Beträge nach und von Crowdnode gesendet um dich als Besitzer deiner Adresse zu verifizieren."; + /* No comment provided by engineer. */ "View All" = "Alle Ansehen"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Wiederherstellungsphrase ansehen"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Abstimmungs-Adresse"; /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Warte bis die Chain voll synchronisiert ist, damit du eine Transaktionshistorie begutachten kannst. Besuche die Crowdnode Webseite um dich anzumelden oder zu registrieren."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Wir haben ein Upgrade durchgeführt"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Wir werden diese Transaktion automatisch erkennen und den gleichen Betrag deinem CrowdNode Konto gutschreiben. Danach wirst du Einzahlungen und Auszahlung in deine Dash Wallet auf diesem Gerät vornehmen können."; + /* Website */ "Website" = "Webseite"; /* No comment provided by engineer. */ "Welcome" = "Willkommen"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Sobald die Transaktion bestätigt ist, ist die andere Wallet wertlos und sollte aus Sicherheitsgründen nicht wieder verwendet werden."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Warum sehe ich all diese Transaktionen?"; +/* CrowdNode */ +"Why do you need an online account?" = "Warum benötigst du ein online Konto?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Warum sollte ich keinen Screenshot machen?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Auszahlen beantragt"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Ja"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Du bist dabei, die Wallet von diesem Gerät zu löschen. Guthaben aus dieser Wallet, kann nur wiedergewonnen werden, wenn du die Wiederherstellungsphrase hast."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Du die Zahlung weiter unten über Face ID authentifizieren"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Du die Zahlung weiter unten über Touch ID authentifizieren"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Du kannst ändern, wann und wie die Auszahlungen deiner Rewards vorgenommen werden."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Du kannst detaillierte Informationen über deine Einzahlungen, Auszahlungen und Erträge sehen."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Du hast nicht genug Guthaben"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Du hast den Berechtigungsrahmen von Coinbase überschritten."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Du hast \"%@\" als Benutzernamen ausgewählt. Dein Benutzername kann nach der Registrierung nicht mehr geändert werden."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Du hast nicht genügend Guthaben, um fortzufahren."; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Du musst die Passphrase in deiner Dash Wallet sichern"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "PIN eingeben zum öffnen der Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Du benötigst mindestens %@ in deiner Dash Wallet."; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Du brauchst lediglich %@ um dem Pool beizutreten."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Du solltest mindestens %@ Dash besitzen um mit der CrowdNode Verifizierung fortzufahren."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Du musst dich mit deinem Browser von der Uphold-Webseite abmelden"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Du benötigst diese Wiederherstellungsphrase, um auf dein Guthaben zuzugreifen, wenn dieses Gerät verloren geht, beschädigt wird oder die Wallet von diesem Gerät deinstalliert wird."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Du erhältst %@ Dash auf deiner Dash Wallet auf diesem Gerät. Bitte beachte, dass es bis zu 2 bis 3 Minuten dauern kann, bis eine Übertragung abgeschlossen ist."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Du erhältst automatisch Teilzahlungen, die standardmäßig reinvestiert werden. Du kannst jedoch auch automatische Entnahme einrichten, um wiederkehrende Auszahlungen zu erhalten."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Dein CrowdNode Konto wird erstellt..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Deine Einzahlung auf CrowdNode wurde erhalten."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Dein Standort wird genutzt um deine Position in der Karte darzustellen, Automaten in deinem Radius anzuzeigen und Suchergebnisse zu verbessern."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Dein Standort wird benutzt um deine Position auf der Karte anzuzeigen, Händler in dem ausgewählten Radius anzuzeigen und um Suchergebnisse zu verbessern."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Deine Transaktion wurde versendet und der Betrag sollte in ein paar Minuten in der Wallet zu sehen sein."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Deine primäre Dash Adresse, die du derzeit für dein CrowdNode Konto nutzt"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Das Dash-Guthaben deines Uphold-Kontos beträgt"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Deine Transaktion wurde versendet und der Betrag sollte in ein paar Minuten in der Wallet zu sehen sein."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Dein Benutzername %@ wurde erfolgreich im Dash-Netzwerk erstellt"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Dein Benutzername %@ wird gerade im Dash-Netzwerk erstellt"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Deine Wallet ist jetzt gesichert. Du kannst die Phrase jederzeit nutzen, um die Wallet auf einem anderen Gerät wiederherzustellen."; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index a6c9aeabb..eb71a9a93 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ δεν επιτρέπεται να έχετε πρόσβαση στο Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Επεξεργασία Πληρωμής"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Σχετικά"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Αποδοχή"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Δέχεται απευθείας DASH"; +/* CrowdNode */ +"Account Recovery" = "Ανάκτηση λογαριασμού"; + /* No comment provided by engineer. */ "Activity" = "Δραστηριότητα"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Προσθήκη Νέας Επαφής"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Διεύθυνση"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Ενισχυμένη Ασφάλεια"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Όλα"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "και"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Σίγουρα θέλετε να ακυρώσετε αυτή τη συναλλαγή;"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Είστε σίγουροι;"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Η αναζήτηση ΑΤΜ λειτουργεί καλύτερα με ενεργοποιημένες τις Υπηρεσίες τοποθεσίας."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Υπόλοιπο"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Υπόλοιπο:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Τραπεζικό έμβασμα"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Γίνετε μέλος ενός Dash Masternode με το CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Μεταξύ Dash Wallet και Coinbase."; +"Between Dash Wallet and Coinbase" = "Μεταξύ Dash Wallet και Coinbase."; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Μεταξύ του Dash Wallet και του λογαριασμού σας στην Coinbase."; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Αγορά Dash με χρήματα"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Αγορά Dash μεσώ Uphold λογαριασμού"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Αγοράστε Dash - Δεν απαιτείται λογαριασμός"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Αγοράστε δωροκάρτες με το Dash σας"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Αγορά/Πώληση"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Με την εκκαθάριση αυτής της συσκευής δεν θα έχετε πλέον πρόσβαση στα χρήματα αυτής της συσκευής. Αυτό θα πρέπει να γίνει μόνο εάν δεν έχετε πλέον πρόσβαση στη φράση πρόσβασης και έχετε ξεχάσει και τον κωδικό PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Ακύρωση"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Η ακύρωση αυτής της συναλλαγής δεν ακυρώνει την εντολή ανταλλαγής. Θα λάβετε DASH στο λογαριασμό σας Coinbase σύντομα."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Αλλαγή PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Ελέγξτε την σύνδεση σας"; /* Choose your Dash username */ "Choose your" = "Επιλέξτε "; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Εκκαθάριση"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "κλείσιμο"; +/* CrowdNode */ +"Close and notify when it’s done" = "Κλείσιμο και ειδοποίηση όταν τελειώσει"; + /* No comment provided by engineer. */ "Close App" = "Κλείσιμο Εφαρμογής"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Προμήθεια Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Επιβεβαίωση"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Επιβεβαίωση και Πληρωμή"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Επιβεβαιώστε (%@)"; +"Confirm" = "Επιβεβαίωση"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Επιβεβαιώστε (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Επιβεβαίωση PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Επιβεβαίωση"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Συνδέθηκε"; +/* CrowdNode */ +"Connected Dash address" = "Συνδεδεμένη διεύθυνση Dash"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Συνδεδεμένοι χρήστες: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Αντιγραφή"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "αντιγραφή αρχείων καταγραφής"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Δεν ήταν δυνατή η σύνδεση στο δίκτυο Dash, ελέγξτε ότι είστε συνδεδεμένοι στο Διαδίκτυο."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Δε βρέθηκε η ισοτιμία."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Δεν ήταν δυνατή η πληρωμή"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Δεν μπορούσα να μεταδώσω την πληρωμή στο δίκτυο Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Δημιουργία Νέου Πορτοφολιού"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Δημιουργία λογαριασμού"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Δημιουργήστε έναν online λογαριασμό στο CrowdNode"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Δημιουργία online λογαριασμού"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Πιστωτική Κάρτα"; /* Crowdnode */ "CrowdNode Account" = "Λογαριασμός CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Πλεονεκτήματα του CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Υποστήριξη CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "Το CrowdNode χρησιμοποιεί αυτή τη διεύθυνση ως αναγνωριστικό του λογαριασμού σας. Θα χάσετε την πρόσβαση στα χρήματά σας σε αυτό το πορτοφόλι και στο λογαριασμό σας CrowdNode αν χάσετε τη φράση πρόσβασης που σχετίζεται με αυτή τη διεύθυνση."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Όρια ανάληψης στην CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Διεύθυνση Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Υπόλοιπο Dash στην Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Υπόλοιπο Dash στο Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Οι Dash πληρωμές δεν μπορεί να είναι μικρότερες από %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet σε αυτή τη συσκευή"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Προμήθεια αναβάθμισης σε DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Ημερομηνία"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Προεπιλεγμένο νόμισμα, συντομεύσεις, σχετικά με..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Αποσύνδεση λογαριασμού Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Αποσύνδεση λογαριασμού Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Αποσυνδεδεμένο"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Απόσταση"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Μην τραβήξετε στιγμιότυπο οθόνης"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Έγινε"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Νωρίτερα"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Κάντε εύκολα Stake το Dash και κερδίστε παθητικό εισόδημα με μερικά απλά κλικ."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "πχ: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Εισάγετε τον 2FA κωδικό παρακάτω"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Σφάλμα"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Σφάλμα Αναβάθμισης"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Έξοδος"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Προμήθειες σε αγορές κρυπτονομισμάτων"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Λήψη πληροφοριών"; /* Coinbase/Payment Methods */ "Fiat Account" = "Λογαριασμός χρημάτων"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Φίλτρο Συναλλαγών"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Φιλτράρεται από:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Βρείτε έναν χρήστη στο Δίκτυο του Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Βρείτε τους εμπόρους που δέχονται Dash, πού να αγοράσετε και πώς να βγάλετε εισόδημα με αυτό."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Βρείτε εμπόρους που δέχονται το Dash ως πληρωμή"; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Η πρώτη κατάθεση πρέπει να είναι μεγαλύτερη από %@ "; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Για την ασφάλειά σας, έχετε αποσυνδεθεί."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "από το Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Από την Uphold στο Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Από την Uphold στο Dash Wallet σας"; /* Coinbase */ "from your Coinbase account" = "από τον λογαριασμό σας στην Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Κερδίστε ανταμοιβές από καταθέσεις σε Dash Masternodes με μόλις 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Δημιουργία Εκτεταμένου Δημόσιου Κλειδιού"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Αποκτήστε προσφορά"; +/* CrowdNode */ +"Get Rewards Instantly" = "Αποκτήστε ανταμοιβές άμεσα"; + /* No comment provided by engineer. */ "Get Started" = "Ξεκινήστε"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Ξεκινώντας με το CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Δωροκάρτα"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Βοηθήστε μας να βελτιώσουμε την εμπειρία σας"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Υψηλά"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Ιστορικό"; +/* CrowdNode */ +"How CrowdNode staking works" = "Πώς λειτουργεί το staking στο CrowdNode "; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Πώς να επιβεβαιώσετε τη διεύθυνση API Dash σας"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Πώς να χρησιμοποιήσετε μια δωροκάρτα"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Κλειδιά Evolution Node ID "; /* No comment provided by engineer. */ "I Accept" = "Αποδέχομαι"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Συμφωνώ με το CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Το έγραψα"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Εάν ποτέ χάσετε τη φράση πρόσβασης σας, μπορείτε να επαληθεύσετε τον εαυτό σας με άλλα μέσα για να ανακτήσετε την πρόσβαση στα κεφάλαια του CrowdNode σας."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Εάν χάσετε τη φράση πρόσβασης για αυτό το πορτοφόλι και χάσετε αυτή τη συσκευή ή απεγκαταστήσετε το Dash Wallet, θα χάσετε την πρόσβαση στα χρήματά σας στο CrowdNode και τα χρήματα σε αυτό το πορτοφόλι."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Εάν εξακολουθείτε να θέλετε να κάνετε εκκαθάριση παρακαλώ εισάγετε: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Αν θέλετε να αποθηκεύσετε χειροκίνητα αναταξινομημένους τύπους συναλλαγών, θα πρέπει να εξάγετε ένα αρχείο συναλλαγών CSV."; /* No comment provided by engineer. */ "Ignore" = "Παράβλεψη"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Άμεσα"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Εκτός από την εμφανιζόμενη αμοιβή της Coinbase, συμπεριλαμβάνουμε στην τιμή ένα spread. Όταν χρησιμοποιείτε το Advanced Trade, δεν περιλαμβάνεται spread, επειδή αλληλεπιδράτε απευθείας με το βιβλίο εντολών.\n\nΟι αγορές κρυπτονομισμάτων είναι ευμετάβλητες και αυτό μας επιτρέπει να κλειδώσουμε προσωρινά μια τιμή για την εκτέλεση των συναλλαγών."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Σε εξέλιξη..."; /* No comment provided by engineer. */ "Income" = "Εισόδημα"; +/* CrowdNode */ +"Information about your online account" = "Πληροφορίες σχετικά με τον online λογαριασμό σας"; + /* Buy Sell Portal */ "Initializing" = "Έναρξη λειτουργίας"; /* No comment provided by engineer. */ "Insufficient funds" = "Ανεπαρκή χρήματα"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Εσωτερική Μεταφορά"; /* No comment provided by engineer. */ "Internally moved to" = "Μετακινήθηκε εσωτερικά στο"; +/* CrowdNode */ +"Introducing Staking" = "Εισαγωγή στο Staking"; + /* Invalid transaction */ "Invalid" = "Μη έγκυρο"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Ανεπαρκές ποσό"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Μη έγκυρη διεύθυνση Dash!"; /* CrowdNode Online */ "Invalid Email" = "Μη έγκυρο email"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Άκυρη καταχώρηση"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Μη έγκυρο αίτημα πληρωμής"; /* No comment provided by engineer. */ "Invalid QR Code" = "Μη έγκυρος κωδικός QR"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Μπορεί να χρειαστεί ένα λεπτό για να ενημερωθεί το υπόλοιπό σας."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Η μεταφορά Dash από την Coinbase στο Dash Wallet μπορεί να διαρκέσει έως και 10 λεπτά σε αυτή τη συσκευή."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Φαίνεται ότι προσπαθείτε να επαναφέρετε το πορτοφόλι σας χρησιμοποιώντας μια φράση ανάκτησης 12 λέξεων, ωστόσο έχετε εισαγάγει μόνο 10 λέξεις, θα θέλατε να ανακτήσετε αυτόματα τις λέξεις που λείπουν; Αυτό μπορεί να διαρκέσει περίπου μια ώρα. Σας συνιστούμε να συνδέσετε τη συσκευή σας στην φόρτιση."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Φαίνεται ότι προσπαθείτε να επαναφέρετε το πορτοφόλι σας χρησιμοποιώντας μια φράση ανάκτησης 12 λέξεων, ωστόσο έχετε εισαγάγει μόνο 11 λέξεις, θα θέλατε να ανακτήσετε αυτόματα τη λέξη που λείπει;"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Εγγραφείτε στο Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Συμμετοχή στην δεξαμενή"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Id κλειδιού"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Μάθετε περισσότερα"; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Ενημερώστε με όταν ολοκληρωθεί"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Μόνο γράμματα και αριθμοί "; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Συνδέστε το λογαριασμό στην Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Σύνδεση υπάρχοντος λογαριασμού"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Σύνδεση υφιστάμενου λογαριασμού CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Συνδεθείτε στο CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Αποσύνδεση"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Αποσύνδεση από το Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "χαμηλά"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Διαχείριση άδειας GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Χάρτης"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = " Κλειδιά Masternode"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Ανανέωση Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Μέγιστο"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Μέγιστοι %ld χαρακτήρες"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Μέσο"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Τα μέλη είναι ελεύθερα να φύγουν από την δεξαμενή και τις περισσότερες φορές μπορούν να φύγουν αμέσως."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Η εμπορική αναζήτηση λειτουργεί καλύτερα με ενεργοποιημένες τις Υπηρεσίες τοποθεσίας."; -/* Validation rule */ -"Minimum 3 characters" = "Ελάχιστο 3 χαρακτήρες"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Περισσότερα"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Περισσότερος Έλεγχος"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Μετακινήθηκε από"; /* No comment provided by engineer. */ "Moved to Address" = "Μετακινήθηκε στην διεύθυνση"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Οι Επαφές μου"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Νέο"; +/* CrowdNode */ +"New CrowdNode Account" = "Νέος λογαριασμός CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Συσκευή NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Δεν υπάρχει ενεργός χρήστης"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Δεν υπάρχουν τρόποι πληρωμής"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Δεν είναι μια έγκυρη διεύθυνση Dash"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Δεν δέχονται όλα τα καταστήματα το DASH απευθείας, αλλά μπορείτε να αγοράσετε μια δωροκάρτα με το Dash σας."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Μόλις ο/η %@ αποδεχτεί το αίτημα σας, θα μπορείτε να πληρώσετε απευθείας στο όνομα χρήστη"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online έμπορος"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Κλειδιά Χειριστή"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Προεπισκόπηση παραγγελίας"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Κλειδιά Κατόχου"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "πληρώστε"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Πληρώστε απευθείας στο όνομα χρήστη"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Πληρώστε με"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Τύπος πληρωμής"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Επιλογές πληρωμής"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "ανά συναλλαγή"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Το PIN είναι πάντα απαραίτητο για να πραγματοποιήσετε μια πληρωμή"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Ελέγξτε τη σύνδεση δικτύου σας"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Παρακαλώ εισάγετε το PIN για να αναβαθμίσετε το πορτοφόλι"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Λάβετε υπόψη ότι το email δεν αποθηκεύεται από το Dash Wallet και αποστέλλεται μόνο στο Crowdnode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Σημειώστε ότι δεν θα μπορείτε να κάνετε ανάληψη των χρημάτων σας από το CrowdNode σε αυτό το πορτοφόλι μέχρι να αυξήσετε το υπόλοιπό σας σε %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Παρακαλώ προσπαθήστε να σαρώσετε ξανά"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Παρακαλώ περιμένετε"; /* No comment provided by engineer. */ "Please wait" = "Παρακαλώ περιμένετε"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Περιμένετε μέχρι να συγχρονιστεί πλήρως το πορτοφόλι πριν εξάγετε το ιστορικό των συναλλαγών σας."; /* No comment provided by engineer. */ "Please write it down" = "Παρακαλώ να το γράψετε"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Χρησιμοποιήθηκε προηγουμένως σε:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Ιδιωτικά/δημόσια κλειδιά (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Προστατέψτε τις οικονομίες σας"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Διεύθυνση Παρόχου"; @@ -1194,7 +1644,10 @@ "Public key" = "Δημόσιο κλειδί"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Δημόσιο κλειδί (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "Αγορά"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Γρήγορη Λήψη"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums που επικυρώθηκαν: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Λάβετε απευθείας στο Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Λάβετε καθημερινά το μερίδιό σας από τις ανταμοιβές."; + /* Received transaction */ "Received" = "Ελήφθησαν"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Ελήφθησαν από"; +/* CrowdNode */ +"Receiving rewards" = "Λήψη ανταμοιβών"; + /* No comment provided by engineer. */ "Recover" = "Επαναφορά"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Αναφέρετε το πρόβλημα"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Επανάληψη της σάρωσης"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Κρίνετε και βαθμολογήστε την εφαρμογή"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Ανταμοιβή"; /* No comment provided by engineer. */ "Rewards" = "Ανταμοιβές"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Σάρωση"; /* No comment provided by engineer. */ "Scan Private Key" = "Σαρώστε το ιδιωτικό κλειδί"; +/* No comment provided by engineer. */ +"Scan QR" = "Σάρωση QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "σάρωση QR κωδικού"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Οι λήψεις οθόνης είναι ορατές σε άλλες εφαρμογές και συσκευές. Δημιουργήστε μια νέα φράση ανάκτησης και κρατήστε την μυστική. "; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Αναζήτηση επαφής"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Αναζήτηση για όνομα χρήστη %@ στο Dash Δικτυο"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Ασφάλεια"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Δείτε στο Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Επιλέξτε ένα νόμισμα"; /* Buy Sell Dash */ "Select a service" = "Επιλέξτε μια υπηρεσία"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Επιλέξτε το νόμισμα"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Στείλτε %@ Dash από την κύρια διεύθυνση Dash που χρησιμοποιείτε σήμερα για τον λογαριασμό σας στην CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Αποστολή Αιτήματος Επαφής"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Αποστολή αναφοράς"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Εστάλη στο"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Αποστολή στη αντιγραμμένη διεύθυνση η QR κωδικο"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Αποστολή"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Αποστολή στο"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Ορίστε PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Ρυθμίσεις"; /* No comment provided by engineer. */ "Setup Wallet" = "Εγκατάσταση πορτοφολιού"; +/* CrowdNode */ +"Share" = "Μοιραστείτε"; + /* Receive screen */ "Share address" = "Διαμοιρασμός διεύθυνσης"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Αγοράστε με το DASH σε πάνω από 150 χιλιάδες εμπόρους"; - /* Enter Address Screen */ "Show content in the clipboard" = "Εμφάνιση περιεχομένου στο πρόχειρο"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Προβολή κλειδιών Masternode"; +/* CrowdNode */ +"Show QR" = "Εμφάνιση QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Υποστήριξη"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Συγχρονισμός..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Πατήστε τη διεύθυνση από το πρόχειρο για να την επικολλήσετε"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Φορολογική κατηγορία"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Το blockchain συγχρονίζεται..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Ο κωδικός είναι λανθασμένος. Παρακαλώ ελέγξτε και δοκιμάστε ξανά!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Τα Dash κατατέθηκαν επιτυχώς στο λογαριασμό σας στην Coinbase. Υπήρξε όμως πρόβλημα στη μεταφορά τους στο Dash Wallet σε αυτή τη συσκευή."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Το ελάχιστο ποσό που μπορείτε να στείλετε είναι %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Δεν υπάρχουν νέες ειδοποιήσεις"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Δεν υπάρχουν χρήστες που να ταιριάζουν με το όνομα %@ στις επαφές σας"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Υπήρξε σφάλμα κατά τη λήψη της νέας διεύθυνσης"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Αυτό το QR περιέχει ήδη την αίτηση πληρωμής για %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Αυτό αντιπροσωπεύει την τρέχουσα Ετήσια Ποσοστιαία Απόδοση ενός πλήρους Masternode μείον το τέλος CrowdNode 15%. Δεν αποτελεί εγγυημένο ποσοστό απόδοσης και μπορεί να αυξηθεί ή να μειωθεί ανάλογα με το μέγεθος των δεξαμενών CrowdNode και την τιμή του Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Αυτό το πορτοφόλι δεν είναι άδειο η ο συγχρονισμός δεν έχει ολοκληρωθεί , δεν θα πρέπει να το καθαρίσετε χωρίς την φράση ανάκτησης"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "στο Dash Wallet σε αυτή τη συσκευή"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Για να ξεκινήσετε το staking, δημιουργήστε έναν λογαριασμό στο CrowdNode ή συνδεθείτε σε έναν ήδη υπάρχοντα."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "στη διεύθυνση Dash που έχει οριστεί για το λογαριασμό σας CrowdNode στο Dash Wallet σε αυτή τη συσκευή"; + /* No comment provided by engineer. */ "Tools" = "Εργαλεία"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Σύνολο"; /* No comment provided by engineer. */ "Touch ID limit" = "Όριο Touch ID "; +/* CrowdNode */ +"Transaction History" = "Ιστορικό συναλλαγών"; + /* No comment provided by engineer. */ "Transaction id" = "Ταυτότητα συναλλαγής"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Μεταφορά Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Μεταφέρετε Dash από τον Uphold λογαριασμό σας σε αυτό το πορτοφόλι"; - /* CrowdNode */ "Transfer Error" = "Σφάλμα μεταφοράς"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Προσπαθήστε ξανά"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Ενεργοποιήστε τον κωδικό πρόσβασης της συσκευής"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Απαιτείται εξουσιοδότηση δύο παραγόντων"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Δεν είναι δυνατή η σύνδεση"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Δεν είναι δυνατή η λήψη νέου QR κωδικού"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Άγνωστο"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Μη υποστηριζόμενο url"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Ανανεώθηκε: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Ανανέωση Τιμής"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Προμήθεια Αναβάθμισης"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Αναβάθμιση σε DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Χρησιμοποιήστε δωροκάρτα"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Χρησιμοποιείται σε:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Το όνομα χρήστη είναι κατειλημμένο"; -/* CrowdNode Portal */ -"Validating address…" = "Επικύρωση διεύθυνσης..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Η επικύρωση του ονόματος χρήστη ολοκληρώθηκε"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Επικύρωση διεύθυνσης..."; /* No comment provided by engineer. */ "Validating username failed" = "Η επικύρωση του ονόματος χρήστη απέτυχε"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Επιβεβαίωση"; +/* CrowdNode */ +"Verify your API Dash address" = "Επαληθεύστε τη διεύθυνση API Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Πολύ Υψηλά"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Πολύ μικρές ποσότητες Dash θα αποστέλλονται από και προς το CrowdNode για να επαληθεύσετε ότι είστε ο ιδιοκτήτης αυτής της διεύθυνσης πορτοφολιού."; + /* No comment provided by engineer. */ "View All" = "Προβολή Όλων"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Διεύθυνση Ψήφου"; /* No comment provided by engineer. */ "Voting Keys" = "Κλειδιά ψήφου"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Περιμένετε μέχρι να συγχρονιστεί πλήρως το blockchain, ώστε να μπορέσουμε να επανεξετάσουμε το ιστορικό των συναλλαγών σας. Επισκεφθείτε τον ιστότοπο του CrowdNode για να συνδεθείτε ή να εγγραφείτε."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Αναβαθμίσαμε"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Θα εντοπίσουμε αυτόματα αυτή τη συναλλαγή και θα μεταφέρουμε το ίδιο ποσό στο λογαριασμό σας στο CrowdNode. Μετά από αυτό θα μπορείτε να κάνετε καταθέσεις και αναλήψεις στο Dash Wallet σε αυτή τη συσκευή."; + /* Website */ "Website" = "Ιστοσελίδα"; /* No comment provided by engineer. */ "Welcome" = "Καλώς ορίσατε"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Όταν επιβεβαιωθεί η συναλλαγή, το άλλο πορτοφόλι θα είναι άχρηστο και δεν θα πρέπει να επαναχρησιμοποιηθεί για λόγους ασφαλείας."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Γιατί βλέπω όλες αυτές τις συναλλαγές;"; +/* CrowdNode */ +"Why do you need an online account?" = "Γιατί χρειάζεστε online λογαριασμό;"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Γιατί δεν πρέπει να τραβήξω στιγμιότυπο οθόνης;"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Ζητήθηκε απόσυρση"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Ναι"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Πρόκειται να σκανάρετε αυτό το πορτοφόλι από αυτήν τη συσκευή. Τα χρήματα που σχετίζονται με αυτό το πορτοφόλι μπορούν να ανακτηθούν μόνο αν έχετε την φράση ανάκτησης."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Μπορείτε να επαληθεύσετε το Face ID για πληρωμές παρακάτω"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Μπορείτε να επαληθεύσετε το Touch ID για πληρωμές παρακάτω"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Μπορείτε να αλλάξετε τον τρόπο και τον χρόνο καταβολής των κερδών της ανταμοιβής σας."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Μπορείτε να δείτε λεπτομερείς πληροφορίες σχετικά με τις καταθέσεις, τις αναλήψεις και τα κέρδη ανταμοιβής σας."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Δεν έχετε αρκετό υπόλοιπο"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Υπερβήκατε το όριο εξουσιοδότησης στην Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Έχετε επιλέξει το \"%@\" ως το όνομα χρήστη σας. Το όνομα χρήστη σας δεν μπορεί να αλλάξει μόλις εγγραφεί."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Δεν έχετε επαρκή χρήματα για να προχωρήσετε."; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Πρέπει να δημιουργήσετε αντίγραφο ασφαλείας της φράση πρόσβασης στο Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Πρέπει να εισάγετε το PIN σας για να μπείτε στο Dash Πορτοφόλι"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Χρειάζεστε τουλάχιστον %@ στο Dash Wallet σας"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Χρειάζεστε μόνο %@ για να ενταχθείτε στο pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Θα πρέπει να έχετε τουλάχιστον %@ για να προχωρήσετε στην επαλήθευση του CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Θα πρέπει επίσης να αποσυνδεθείτε από την ιστοσελίδα Uphold χρησιμοποιώντας το πρόγραμμα περιήγησης σας"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Θα χρειαστείτε αυτή τη φράση ανάκτησης για να αποκτήσετε πρόσβαση στα χρήματά σας εάν αυτή η συσκευή χαθεί, καταστραφεί ή εάν το Πορτοφόλι Dash απεγκατασταθει τυχαία από αυτήν τη συσκευή."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Θα λάβετε Dash %@ στο Dash Wallet σας σε αυτή τη συσκευή. Λάβετε υπόψη ότι μπορεί να χρειαστούν έως και 2-3 λεπτά για να ολοκληρωθεί η μεταφορά."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Θα λαμβάνετε αυτόματα αποσπασματικές πληρωμές και θα επανεπενδύονται εξ ορισμού, ωστόσο, είναι επίσης εύκολο να ρυθμίσετε αυτόματες αναλήψεις για να λαμβάνετε επαναλαμβανόμενες πληρωμές."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Ο λογαριασμός σας στο CrowdNode δημιουργείται..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Η κατάθεσή σας στο CrowdNode ελήφθη."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Η τοποθεσία σας χρησιμοποιείται για να δείξει τη θέση σας στο χάρτη, τα ΑΤΜ στο επιλεγμένο περιοχή και να βελτιώσει τα αποτελέσματα αναζήτησης."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Η τοποθεσία σας χρησιμοποιείται για να δείξει τη θέση σας στο χάρτη, τους εμπόρους στην επιλεγμένη περιοχή και να βελτιώσει τα αποτελέσματα αναζήτησης."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Η συναλλαγή σας απεστάλη και το ποσό θα πρέπει να εμφανιστεί στο πορτοφόλι σας σε λίγα λεπτά."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Η κύρια διεύθυνση Dash που χρησιμοποιείτε επί του παρόντος για τον λογαριασμό σας στο CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Το υπόλοιπο του Uphold λογαριασμού σας σε Dash είναι"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Η συναλλαγή σας απεστάλη και το ποσό θα πρέπει να εμφανιστεί στο πορτοφόλι σας σε λίγα λεπτά."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Το όνομα χρήστη %@ δημιουργήθηκε με επιτυχία στο Dash Δίκτυο"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Το όνομα χρήστη %@ δημιουργείται στο Dash Δίκτυο"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Το πορτοφόλι σας είναι ασφαλές τώρα. Μπορείτε να χρησιμοποιήσετε τη φράση ανάκτησης ανά πάσα στιγμή για να ανακτήσετε το λογαριασμό σας σε άλλη συσκευή."; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 876eb58bd..e38c5bb76 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "About"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Settings"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Share"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/en.lproj/Localizable.stringsdict b/DashWallet/en.lproj/Localizable.stringsdict index 21dc0be7e..4eae8a429 100644 --- a/DashWallet/en.lproj/Localizable.stringsdict +++ b/DashWallet/en.lproj/Localizable.stringsdict @@ -21,7 +21,7 @@ %d merchant(s) in %@ NSStringLocalizedFormatKey - %#@merchants@%@ + %#@merchants@ merchants NSStringFormatSpecTypeKey @@ -29,9 +29,9 @@ NSStringFormatValueTypeKey d one - %d merchant in + %d merchant in %@ other - %d merchants in + %d merchants in %@ %d merchant(s) diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index dcc316478..5a54c9421 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Pri"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adreso"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Nuligi"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopi"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Eraro"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "Jes"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skani"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Agoroj"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Kunhavigi"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 00fb53a8c..07138ab28 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ no está permitido a acceder al Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Caracteres"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Procesando el pago"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Acerca de"; +/* No comment provided by engineer. */ +"About me" = "Sobre mí"; + /* No comment provided by engineer. */ "Accept" = "Aceptar"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Acepta DASH directamente"; +/* CrowdNode */ +"Account Recovery" = "Recuperación de cuenta"; + /* No comment provided by engineer. */ "Activity" = "Actividad"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Agregar un nuevo contacto"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Agrega a tus amigos y familiares"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Dirección"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Seguridad Avanzada"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Aceptar"; + /* No comment provided by engineer. */ "All" = "Todos"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "y"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "¿Estás seguro de que deseas cancelar esta transacción?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "¿Estas seguro?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Como la mayoría de las personas no tienen exactamente 1000 Dash a mano, CrowdNode ha creado un servicio donde, al agrupar los depósitos de los miembros, pueden lograr los beneficios de poseer un Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La búsqueda de cajeros automáticos funciona mejor con los servicios de ubicación activados."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance en CrowdNode"; /* CrowdNode */ "Balance: " = "Balance:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transferencia bancaria"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Forma parte de un Masternode de Dash con CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Entre %1$ld y %2$ld caracteres"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Entre la billetera de Dash y Coinbase."; +"Between Dash Wallet and Coinbase" = "Entre la billetera de Dash y Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Entre la billetera de Dash y tu cuenta de Coinbase."; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Compra Dash con moneda fiduciaria"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Comprar Dash con una cuenta de Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Compra Dash. No se necesita una cuenta"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Compra tarjetas de regalo con tus Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Comprar/Vender"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Al limpiar este dispositivo, ya no tendrás acceso a los fondos en este dispositivo. Esto solo debe hacerse si ya no tiense acceso a tu contraseña y también has olvidado tu código PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancelar"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "La cancelación de esta transacción no cancela la orden comercial. Recibirás DASH en tu cuenta de Coinbase en breve."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Cambiar PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Verifique tu conección"; /* Choose your Dash username */ "Choose your" = "Escoge tu"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Elige tu nombre de usuario"; + +/* No comment provided by engineer. */ +"Claimed" = "Reclamado"; + /* No comment provided by engineer. */ "Clear" = "Limpia"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Cerrar"; +/* CrowdNode */ +"Close and notify when it’s done" = "Cerrar y avisar cuando termine"; + /* No comment provided by engineer. */ "Close App" = "Cerrar App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Comisión de Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Confirmar"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirmar y Pagar"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirmar (%@)"; +"Confirm" = "Confirmar"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmar (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirmar PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirmando"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Conectado"; +/* CrowdNode */ +"Connected Dash address" = "Dirección de Dash conectada"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Pares conectados: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copiar"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copiar enlace de invitación"; + /* No comment provided by engineer. */ "Copy Logs" = "Copiar logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "No se pudo conectar a la red Dash, verifica que estés conectado a Internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "No se encuentra la tasa de cambio."; + /* No comment provided by engineer. */ "Couldn't make payment" = "No se pudo realizar el pago"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "No se pudo transmitir el pago a la red Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Crear una nueva invitación"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Crear una nueva invitación"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Crear una Nueva Billetera"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Crea un nombre de usuario, agrega a tus amigos."; + /* CrowdNode */ "Create Account" = "Crear una cuenta"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Crear una cuenta de CrowdNode en línea"; + +/* No comment provided by engineer. */ +"Create invitation" = "Crear invitación"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Crear cuenta online"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Crea tu nombre de usuario, encuentra amigos y familiares con sus nombres de usuario y agrégalos a tus contactos"; + /* Coinbase/Payment Methods */ "Credit Card" = "Tarjeta de crédito"; /* Crowdnode */ "CrowdNode Account" = "Cuenta de CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Beneficios de CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Soporte de CrowdNode "; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode usa esta dirección como tu ID de cuenta. Perderás el acceso a tus fondos dentro de esta billetera y tu cuenta de CrowdNode si pierdes la contraseña asociada a esta dirección."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Límites de retiro de CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dirección de dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo"; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo de Dash en Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Saldo de Dash en Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Los pagos en Dash no pueden ser inferiores a %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Billetera de Dash en este dispositivo"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "Invitación de DashPay"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Tarifa de actualización de DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Fecha"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Moneda predeterminada, atajos, acerca..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Desconectar la cuenta de Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Desconectar cuenta de Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Desconectado"; +/* No comment provided by engineer. */ +"Display Name" = "Nombre para mostrar"; + /* Explore Dash: Filters */ "Distance" = "Distancia"; /* No comment provided by engineer. */ "Do not take a screenshot" = "No tome una captura de pantalla"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Hecho"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "por ejemplo, johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Cada invitación se financiará con esta cantidad para que el receptor pueda crear rápidamente su nombre de usuario en la red de Dash."; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Antes"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Haz fácilmente staking de tus Dash y obtén ingresos pasivos con unos pocos clics."; +/* No comment provided by engineer. */ +"Edit Profile" = "Editar perfil"; + +/* Invitation tag placeholder */ +"eg: Dad" = "por ejemplo: papa"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ingresar tu código 2FA debajo"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Ingresa tu identificación de correo electrónico de Gravatar"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error al actualizar tu perfil"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error al actualizar"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Sali"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Comisiones en compras de criptomonedas"; +/* No comment provided by engineer. */ +"Fetching Image" = "Obteniendo imagen"; + /* Explore Dash */ "Fetching Info" = "Obteniendo información"; /* Coinbase/Payment Methods */ "Fiat Account" = "Cuenta fiduciaria"; +/* No comment provided by engineer. */ +"Filter" = "Filtrar"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtrar Transacciones"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtrado por:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Encontrar un usuario en la red Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Encuentra comerciantes que acepten DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encuentra comercios que acepten Dash, dónde comprar y cómo obtener ingresos con él."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Encuentra comerciantes que acepten Dash como forma de pago."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "El primer depósito debe ser más de %@"; +/* CrowdNode */ +"First minimum deposit" = "Primer depósito mínimo"; + /* Coinbase */ "For your security, you have been signed out." = "Por su seguridad, has sido desconectado."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "desde la billetera de Dash "; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Desde Uphold a la billetera de Dash"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "De Uphold a tu billetera de Dash"; /* Coinbase */ "from your Coinbase account" = "desde tu cuenta de Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Obtén recompensas de depósitos en Masternodes de Dash con tan solo 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "¿Generar claves públicas extendidas?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Obtener cotización"; +/* CrowdNode */ +"Get Rewards Instantly" = "Obtén recompensas al instante"; + /* No comment provided by engineer. */ "Get Started" = "Comienza"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Obten tu nombre de usuario"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Primeros pasos con CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Tarjeta de regalo"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Ayúdanos a mejorar tu experiencia"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Aquí hay una dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo."; + /* adjective, security level */ "High" = "Alto"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Historial"; +/* CrowdNode */ +"How CrowdNode staking works" = "Cómo funciona el staking de CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Cómo confirmar tu dirección API de Dash"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Como usar una tarjeta de regalo"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Llaves de identificación del nodo de evolución"; /* No comment provided by engineer. */ "I Accept" = "Yo acepto"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Acepto a CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Ya la escribí"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Si alguna vez pierdes tu contraseña, puedes verificarte por otros medios para recuperar el acceso a tus fondos de CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Si pierdes tu contraseña para esta billetera y pierdes este dispositivo o desinstalas la billetera de Dash, perderás el acceso a tus fondos en CrowdNode y a los fondos dentro de esta billetera."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Si aún deseas limpiar por favor introduce: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Si deseas guardar tipos reclasificados manualmente para transacciones, debes exportar un archivo de transacción CSV."; /* No comment provided by engineer. */ "Ignore" = "Ignora"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "La imagen cargada puede ser vista públicamente por cualquier persona."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "La URL de la imagen no puede tener más de %ld caracteres."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Imágenes Política de Privacidad"; + /* No comment provided by engineer. */ "Immediately" = "Inmediatamente"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Además de la comisión de Coinbase mostrada, incluimos un diferencial en el precio. Cuando usas Comercio avanzado, no se incluye el margen porque estás interactuando directamente con el libro de pedidos.\n\nLos mercados de criptomonedas son volátiles y esto nos permite fijar temporalmente un precio para la ejecución de operaciones."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "En caso de retiros mayores, CrowdNode pagará los retiros dentro de dos semanas. Esto se debe a sus protocolos de seguridad y en la mayoría de los casos, se solucionará mucho más rápido."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "En proceso..."; /* No comment provided by engineer. */ "Income" = "Ingreso"; +/* CrowdNode */ +"Information about your online account" = "Información sobre tu cuenta online"; + /* Buy Sell Portal */ "Initializing" = "Inicializando"; /* No comment provided by engineer. */ "Insufficient funds" = "Fondos insuficientes"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Saldo de billetera insuficiente"; + /* Coinbase/Payment Methods */ "Interac" = "Interactuar"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transferencia interna"; /* No comment provided by engineer. */ "Internally moved to" = "Movido internamente para"; +/* CrowdNode */ +"Introducing Staking" = "Introduciendo Staking"; + /* Invalid transaction */ "Invalid" = "Inválido"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Monto inválido"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Dirección inválida de Dash"; /* CrowdNode Online */ "Invalid Email" = "E-mail inválido"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "entrada inválida"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invitación no válida"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Solicitud de pago inválida"; /* No comment provided by engineer. */ "Invalid QR Code" = "Codigo QR invalido"; +/* No comment provided by engineer. */ +"Invitation" = "Invitación "; + +/* Invitation #3 */ +"Invitation %ld" = "Invitación %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitación ya reclamada"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitación creada con éxito"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Tarifa de invitación"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Historial de invitaciones"; + +/* No comment provided by engineer. */ +"Invite" = "Invitar"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invitar a alguien a unirse a la red de Dash "; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invita a tu familia, encuentra a tus amigos buscando sus nombres de usuario"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invita a tus amigos y familiares"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invita a sus amigos y familiares a unirse a la red de Dash."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invita a sus amigos y familiares a la red de Dash."; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Tu saldo puede tardar un minuto en actualizarse."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Podría tomar hasta 10 minutos transferir Dash de Coinbase a la billetera de Dash en este dispositivo"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Parece que estás intentando restaurar tu billetera usando una frase de recuperación de 12 palabras, sin embargo, solo has ingresado 10 palabras. ¿Te gustaría recuperar automáticamente las palabras faltantes? Esto puede tardar alrededor de una hora. Recomendamos enchufar tu dispositivo."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Parece que estás intentando restaurar tu billetera usando una frase de recuperación de 12 palabras, sin embargo, solo has ingresado 11 palabras. ¿Te gustaría recuperar automáticamente la palabra que falta?"; +/* No comment provided by engineer. */ +"Join" = "Unirse"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Unirse a DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Únete a Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Unirse ahora"; + +/* CrowdNode */ +"Joining the pool" = "Entrar al grupo"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Identificación de llave"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Aprender más..."; +/* CrowdNode */ +"Leaving the pool" = "Dejar el grupo"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Avísame cuando esté listo"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Deja que tus amigos y familiares se unan a Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Deja que sus amigos y familiares se unan a la red de Dash. Invítalos al mundo de la banca social."; + /* Validation rule */ -"Letters and numbers only" = "letras y numeros solamente"; +"Letters, numbers and hyphens only" = "Solo letras, números y guiones"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Empecemos"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Vincular cuenta de Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Vincular cuenta existente"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Vincular una cuenta de CrowdNode existente"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Iniciar sesión en CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Cerrar sesión"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Cerrar sesión desde Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Bajo"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Administrar permisos de GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Llave de Masternodo"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Actualizar Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Máximo"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Máximo %ld caracteres"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Quizas mas tarde"; /* adjective, security level */ "Medium" = "Mediano"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Los miembros son libres de abandonar el grupo y en la mayoría de los casos, pueden hacerlo de inmediato."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La búsqueda de comerciantes funciona mejor con los servicios de ubicación activados."; -/* Validation rule */ -"Minimum 3 characters" = "Mínimo 3 caracteres"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Más"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Más Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "Mas sugerencias"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Mueve y haz zoom en tu foto para encontrar el ajuste perfecto"; + /* No comment provided by engineer. */ "Moved from" = "Movido de"; /* No comment provided by engineer. */ "Moved to Address" = "Movido a la Dirección"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Debe comenzar y terminar con una letra o un número"; + /* No comment provided by engineer. */ "My Contacts" = "Mis contactos"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nuevo"; +/* CrowdNode */ +"New CrowdNode Account" = "Nueva cuenta de CrowdNode "; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Dispositivo NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Usuario inactivo"; +/* Coinbase */ +"No cash account found" = "No se encontró ninguna cuenta de efectivo"; + /* Coinbase/Buy Dash */ "No payment methods" = "Sin métodos de pago"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "No es una dirección válida de Dash"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "No todas las tiendas aceptan DASH directamente, pero puedes comprar una tarjeta de regalo con tus Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Una vez que %@ aceptes tu solicitud, puedes pagar directamente al nombre de usuario"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "En línea"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Comercio en línea"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Llaves de operador"; +/* No comment provided by engineer. */ +"or" = "o"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vista previa del pedido"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Llaves del propietario"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Pega la URL de tu imagen"; + /* No comment provided by engineer. */ "Pay" = "Pagar"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pagar directamente al nombre de usuario"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pagar a los nombres de usuario. No más direcciones alfanuméricas"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pagar con"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo de pago"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Los pagos realizados directamente a las direcciones no se mantendrán en actividad."; + +/* CrowdNode */ +"Payout Options" = "Opciones de pago"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "por transacción"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalizar"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN siempre será requerido para realizar un pago"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Comprueba tu conexión de red"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Ingresa una identificación de correo electrónico gravatar válida."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Introduce una URL de imagen válida."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Por favor ingrese su PIN para actualizar la billetera"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Ten en cuenta que la billetera de Dash no guarda el correo electrónico y solo se envía a CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Ten en cuenta que no podrás retirar tus fondos de CowdNode a esta billetera hasta que aumentes tu saldo a %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Por favor intente escanear de nuevo"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Por favor espera"; /* No comment provided by engineer. */ "Please wait" = "Por favor espera"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Espera hasta que la billetera esté completamente sincronizada antes de exportar tu historial de transacciones"; /* No comment provided by engineer. */ "Please write it down" = "Anótala, por favor"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Invitación de vista previa"; + /* No comment provided by engineer. */ "Previously used at: " = "Utilizado anteriormente en:"; +/* CrowdNode */ +"Primary Dash address" = "Dirección primaria de Dash"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Llaves privadas / públicas (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protege tus ahorros"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Dirección de Proveedor"; @@ -1194,7 +1644,10 @@ "Public key" = "Llave pública"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Llave pública (heredada)"; + +/* No comment provided by engineer. */ +"Public URL" = "URL pública"; /* Coinbase/Buy Dash */ "Purchase" = "Compra"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Recibir Rápidamente "; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validados: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Recibe directamente en la billetera de Dash "; +/* CrowdNode */ +"Receive your share of rewards daily." = "Recibe tu parte de las recompensas diariamente."; + /* Received transaction */ "Received" = "Recibido"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Recibido de"; +/* CrowdNode */ +"Receiving rewards" = "Recibir recompensas"; + /* No comment provided by engineer. */ "Recover" = "Recuperar"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Reportar un problema"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Escanear nuevamente"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Evaluar la app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Recompensa"; /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* No comment provided by engineer. */ +"Save" = "Guardar"; + +/* No comment provided by engineer. */ +"Save Changes" = "Guardar cambios"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; /* No comment provided by engineer. */ "Scan Private Key" = "Escanear Llave Privada"; +/* No comment provided by engineer. */ +"Scan QR" = "Scanear QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Escanear Código QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Las capturas de pantalla son visibles para otras aplicaciones y dispositivos. Genere una nueva frase de recuperación y téngala en secreto."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Buscar un contacto"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Buscando nombre de usuaro %@en la red Dash "; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Asegura tu billetera"; + /* No comment provided by engineer. */ "Security" = "Seguridad"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Ver en Uphold"; +/* No comment provided by engineer. */ +"Select" = "Seleccionar"; + /* Coinbase */ "Select a coin" = "Selecciona una moneda"; /* Buy Sell Dash */ "Select a service" = "Selecciona un servicio"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Seleccionar de la galería"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Selecciona la moneda"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Envía %@ desde tu dirección principal de Dash que usas actualmente para tu cuenta de CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Enviar de nuevo"; + /* No comment provided by engineer. */ "Send Contact Request" = "Enviar solicitud de contacto"; +/* No comment provided by engineer. */ +"Send Invitation" = "Enviar invitación"; + /* Coinbase CrowdNode */ "Send Report" = "Enviar reporte"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Enviar para"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Enviar a un contacto"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Enviar a la dirección copiada o código QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Enviando"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Enviando solicitud de contacto"; + /* No comment provided by engineer. */ "Sending to" = "Enviando a"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Establecer PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Establece tu PIN"; + /* No comment provided by engineer. */ "Settings" = "Configuración"; /* No comment provided by engineer. */ "Setup Wallet" = "Configurar Billetera"; +/* CrowdNode */ +"Share" = "Compartir"; + /* Receive screen */ "Share address" = "Compartir dirección"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Compra con DASH en más de 150.000 comercios"; - /* Enter Address Screen */ "Show content in the clipboard" = "Mostrar contenido en el portapapeles"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Mostrar Llaves de Masternodo"; +/* CrowdNode */ +"Show QR" = "Mostrar QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperación"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Paso %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Soporte"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Sincronizando..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Etiqueta para tu referencia"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Tomar una foto desde la cámara"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Toca la dirección del portapapeles para pegarla."; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoría de impuestos"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "La cadena esta sincronizando..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "El código es incorrecto. ¡Por favor revisa e intenta de nuevo!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "Dash Network está impulsada por una serie de Masternodes que son una parte esencial para facilitar los pagos."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Los Dash se depositaron con éxito en tu cuenta de Coinbase. Pero hubo un problema al transferirlos a la billetera de Dash en este dispositivo."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "La imagen que selecciones se cargará en Imgur de forma anónima."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "El monto mínimo que puedes enviar es %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "Ellos (Obteniendo Información)"; + /* No comment provided by engineer. */ "There are no new notifications" = "No hay notificaciones nuevas"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "No hay usuarios que coincidan con el nombre %@ en tus contactos"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Hubo un error al obtener la nueva dirección"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Este QR ya contiene la solicitud de pago de %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Esto representa el rendimiento porcentual anual actual de un Masternode completo menos la tarifa de CrowdNode del 15%. No es una tasa de rendimiento garantizada y puede aumentar o disminuir según el tamaño de los grupos de CrowdNode y el precio de Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Esta cartera no esta vacía o la sincronización no ha terminado, no podrás limpiarla sin la frase de recuperación"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "a la billetera de Dash en este dispositivo"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Para comenzar a hacer staking, crea una cuenta en CrowdNode o conéctate a una existente."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "a la dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo"; + /* No comment provided by engineer. */ "Tools" = "Herramientas"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Límite de Touch ID"; +/* CrowdNode */ +"Transaction History" = "Historial de transacciones"; + /* No comment provided by engineer. */ "Transaction id" = "id de transacción"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transferir Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfiere Dash desde tu cuenta de Uphold a esta billetera"; - /* CrowdNode */ "Transfer Error" = "Error de transferencia"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Intenta nuevamente"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Habilita la clave de acceso de tu dispositivo"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Se requiere autenticación de dos factores"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "No se puede aceptar la solicitud de contacto"; + /* No comment provided by engineer. */ "Unable to connect" = "No fue posible conectarse"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "No se pueden obtener los datos de contacto"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "No se puede recuperar la imagen. Ingresa una URL de imagen válida o verifica tu conexión."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "No se puede recuperar tu Gravatar. Ingresa una identificación de correo electrónico gravatar válida."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "No se puede obtener un nuevo código QR"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "No se pueden proporcionar sugerencias"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "No se puede enviar la solicitud de contacto"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "No se puede cargar tu imagen. Inténtalo de nuevo."; + /* No comment provided by engineer. */ "Unknown" = "Desconocido"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Dirección no soportada"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Actualizado: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Actualizando Precio"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Tarifa de actualización"; +"Updating Profile on Dash Network" = "Actualizando perfil en la red de Dash "; + +/* No comment provided by engineer. */ +"Upgrade" = "Actualizar"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Actualizar a Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Actualizando a DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Error al Subir"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Sube tu foto, personaliza tu identidad"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Subiendo tu foto a la red"; + /* Explore Dash/Filters */ "Use gift card" = "Usar tarjeta de regalo"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Usado en:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "Usuario (obteniendo información)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Nombre de usuario ya encontrado"; + +/* No comment provided by engineer. */ +"Username available" = "Nombre de usuario disponible"; + /* No comment provided by engineer. */ "Username taken" = "Nombre de usuario ya ha sido tomado"; -/* CrowdNode Portal */ -"Validating address…" = "Validando dirección…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validación de nombre de usuario terminada"; +"Users that matches %@ who are currently not in your contacts" = "Usuarios que coinciden %@ que no están actualmente en tus contactos"; + +/* CrowdNode Portal */ +"Validating address…" = "Validando dirección…"; /* No comment provided by engineer. */ "Validating username failed" = "No se pudo validar el nombre de usuario"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verificar"; +/* CrowdNode */ +"Verify your API Dash address" = "Verifica tu dirección API de Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Muy alto"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Se enviarán cantidades muy pequeñas de Dash hacia y desde CrowdNode para verificar que tu eres el propietario de esta dirección de billetera."; + /* No comment provided by engineer. */ "View All" = "Ver todo"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ver frase de recuperación"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Dirección de voto"; /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Espera hasta que la cadena esté completamente sincronizada, para que podamos revisar tu historial de transacciones. Visita el sitio web de CrowdNode para iniciar sesión o registrarte."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Actualizamos"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Detectaremos automáticamente esta transacción y transferiremos la misma cantidad a tu cuenta de CrowdNode. Después de eso, podrás realizar depósitos y retiros en la billetera de Dash en este dispositivo."; + /* Website */ "Website" = "Página web"; /* No comment provided by engineer. */ "Welcome" = "Bienvenido"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Bienvenido a DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Al confirmarse la transacción, la billetera de papel quedará inutilizada y no deberá ser reutilizada por razones de seguridad."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "¿Por qué veo todas estas transacciones?"; +/* CrowdNode */ +"Why do you need an online account?" = "¿Por qué necesitas una cuenta en línea?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "¿Por que no debo tomar una captura de pantalla?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Retiro solicitado"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "¿Te gustaría aceptar la invitación?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "¿Te gustaría realizar un depósito para tu compra utilizando una cuenta bancaria vinculada?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "¿Te gustaría guardar los cambios que hiciste en tu perfil?"; + /* No comment provided by engineer. */ "Yes" = "Si"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Estás a punto de limpiar esta billetera de este dispositivo. Fondos asociados a esta billetera solo podrán ser recuperados si tienes esta frase de recuperación."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "Siempre puedes eliminar la imagen cargada, siempre que tengas acceso a esta billetera."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Puedes autenticar con Face ID para pagos abajo de"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Puedes autenticar con Touch ID para pagos abajo de"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Puedes cambiar cómo / cuándo se te pagan las ganancias de tus recompensas."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Puedes ver información detallada sobre tus depósitos, retiros y ganancias de recompensas."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "Puedes especificar cualquier URL que esté disponible públicamente en Internet para que otros usuarios puedan verla en la red de Dash."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "No puedes reclamar esta invitación porque ya tienes un nombre de usuario de Dash"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "No tienes ningún contacto en este momento"; + +/* Coinbase */ +"You don’t have enough balance" = "No tienes saldo suficiente"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Excediste el límite de autorización en Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Tu has elegido \"%@\" como tu nombre de usuario. Tu nombre de usuario no se puede cambiar una vez registrado."; +"You have been invited by %@. Start using Dash cryptocurrency." = "Has sido invitado por %@. Comienza a usar la criptomoneda Dash."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "Tu has elegido \"%@\" como tu nombre de usuario. El nombre de usuario no se puede cambiar una vez registrado."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "No tienes fondos suficientes para continuar"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Tienes que hacer una copia de seguridad de tu contraseña en tu billetera de Dash "; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Debe ingresar tu PIN para ingresar a la Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "Necesitas al menos %@ Dash para crear una invitación"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Necesitas al menos %@ en tu billetera de Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Solo necesitas %@ para unirte al pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Deberías tener al menos %@ para continuar con la verificación de CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "También deberás cerrar sesión en el sitio web de Uphold utilizando tu navegador"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Necesitarás esta frase de recuperación para acceder a tus fondos si este dispositivo se pierde, se daña o si la billetera de Dash se desinstala de este dispositivo."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Tu recibirás %@ Dash en tu billetera de Dash en este dispositivo. Ten en cuenta que puede tomar hasta 2-3 minutos completar una transferencia."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Recibirás pagos fraccionados automáticamente y se reinvertirán de manera predeterminada; sin embargo, también es fácil configurar retiros automáticos para recibir pagos recurrentes."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Tu cuenta de CrowdNode está creando..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Tu depósito en CrowdNode ha sido recibido."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Tu correo electrónico no se almacena en la billetera de DashPay ni en ningún servidor. Se usa una vez para obtener los detalles de tu cuenta de Gravatar y luego se descarta."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Tu invitación desde %@ ya ha sido reclamada"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Tu invitación desde %@ no es válida"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Tu ubicación se utiliza para mostrar tu posición en el mapa, cajeros automáticos en el radio seleccionado y mejorar los resultados de búsqueda."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Tu ubicación se utiliza para mostrar tu posición en el mapa, comerciantes en el radio seleccionado y mejorar los resultados de búsqueda."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tu transacción se envió y la cantidad debería aparecer en tu billetera en unos minutos."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Tu dirección principal de Dash que usas actualmente para tu cuenta de CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "El saldo de tu cuenta de Uphold en Dash es"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tu transacción se envió y la cantidad debería aparecer en tu billetera en unos minutos."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tu nombre de usuario %@ se ha creado con éxito en la red Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Tu nombre de usuario %@ se está creando en la red Dash "; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Tu billetera está segura ahora. Podrás utilizar tu frase de recuperación en cualquier momento para recuperar tu cuenta en otro dispositivo."; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index 17a554de4..9a467579a 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Teave"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Oled kindel?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Jääk"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Katkesta"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Kinnita"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Kinnita"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dashi aadress"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Tehtud"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Ma kirjutasin endale välja"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Kui sa endiselt soovid seda puhastada, siis palun sisesta: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Palun kirjuta see üles"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Skanneeri QR Kood"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Seaded"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Jaga"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index 41ff64948..41819502b 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "اطلاعات بیشتر"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "بازیابی حساب"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "نشانی"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "گزینه‌های پیشرفته امنیتی"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "همه"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "موجودی"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "از طریق کراودنود یکی از مسترنودهای دش بشوید."; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "بین دش والت و کوین‌بیس"; +"Between Dash Wallet and Coinbase" = "بین دش والت و کوینبیس"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "بین داش والت و حساب کوین‌بیس شما"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "خرید دش با پول رسمی"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "خرید دش با حساب آپهلد"; +/* Dash Portal */ +"Buy Dash · No account needed" = "دش بخرید - بدون نیاز به حساب"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "خرید کارت هدیه با دش"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "خرید/فروش"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "لغو"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "تغییر پین کد"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "لطفا اتصال‌ به اینترنت را بررسی کنید"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "بستن"; +/* CrowdNode */ +"Close and notify when it’s done" = "ببند و وقتی آماده شد، مرا مطلع کن. "; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "کارمزد کوین‌بیس"; -/* No comment provided by engineer. */ -"Confirm" = "تائید"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "تائید"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "پین کد را تائید کنید"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "در حال تائید"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "متصل"; +/* CrowdNode */ +"Connected Dash address" = "اتصال به نشانی دش برقرار است"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "کپی"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = " نرخ‌های تبدیل پیدا نشد."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "ایجاد یک کیف پول جدید"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "ایجاد حساب"; +/* CrowdNode */ +"Create an online CrowdNode account" = "یک حساب آنلاین کراودنود ایجاد کنید"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "ایجاد حساب آنلاین"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "کارت اعتباری"; /* Crowdnode */ "CrowdNode Account" = "حساب کراودنود"; +/* CrowdNode */ +"CrowdNode benefits" = "مزایای کراودنود"; + /* CrowdNode Portal */ "CrowdNode Support" = "پشتیبانی کراودنود"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "کراودنود از این نشانی به عنوان شناسه حساب شما استفاده می‌کند. اگر این عبارت ورودی مربوط به این نشانی را گم کنید، دیگر نمی‌توانید به موجودی کیف پول و نیز حساب‌تان در کراودنود دسترسی داشته باشید. "; + /* CrowdNode */ "CrowdNode withdrawal limits" = "سقف برداشت کراودنود"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "دش"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "موجودش دش در کوینبیس"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "موجودی دش در آپهولد"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash payments can't be less than %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "دش والت روی این دستگاه"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "تاریخ"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "واحد پول پیش‌فرض، میان‌برها، درباره..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "قطع اتصال به حساب کوین‌بیس"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "قطع اتصال حساب آپهولد"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "عدم اتصال به شبکه"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "فاصله"; /* No comment provided by engineer. */ "Do not take a screenshot" = "اسکرین‌شات نگیرید"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "انجام شد"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "با چند کلیک ساده، به راحتی دش را سپرده‌گذاری کرده و درآمدی جانبی برای خودتان ایجاد کنید. "; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "کد 2FA خود را در زیر وارد کنید"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "خطا"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "کارمزد خرید رمزارز"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "فیلتر تراکنش‌ها"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "فیلتر بر اساس: "; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "پدیرندگانی را بیابید که دش قبول می‌کنند، محل خرید و نیز کسب درآمد با دش"; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "یافتن فروشندگانی که دش را می‌پذیرند"; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "از دش والت"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "از آپهولد به دش والت"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "از آپهولد به دش والت‌ شما"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "با سپرده‌گذاری در مسترنودهای دش، حتی به میزان ۰.۵ دش، پاداش دریافت کنید. "; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "دریافت قیمت تخمینی"; +/* CrowdNode */ +"Get Rewards Instantly" = "دریافت آنی پاداش"; + /* No comment provided by engineer. */ "Get Started" = "شروع"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "آغاز کار با کراودنود"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "به ما برای بهبود تجربه‌تان کمک کنید"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "بالا"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "سابقه"; +/* CrowdNode */ +"How CrowdNode staking works" = "عملکرد استیکینگ کراونود"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "چطور نشانی ای‌پی‌آی دش‌تان را تائید کنید"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "چطور از کارت هدیه استفاده کنیم"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "کلیدهای شناسه اولوشن نود"; /* No comment provided by engineer. */ "I Accept" = "I Accept"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "عبارت بازیابی را نوشتم"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "اگر عبارت ورودی‌تان را گم کنید، می‌توانید با استفاده از روش‌های دیگر احراز هویت شوید تا بتوانید به موجودی کراودنود دسترسی یابید. "; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "اگر عبارت ورودی‌تان برای این کیف پول را گم کنید و این دستگاه مفقود شود و یا دش والت از روی آن حذف شود، دیگر نمی‌توانید به موجودی‌تان در کراودنود و موجودی داخل کیف پول دسترسی داشته باشید. "; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "بلافاصله"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "اجرای فرآیند..."; /* No comment provided by engineer. */ "Income" = "درآمد"; +/* CrowdNode */ +"Information about your online account" = "اطلاعات درباره حساب آنلاین شما"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "موجودی ناکافی"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "به صورت داخلی منتقل شد به"; +/* CrowdNode */ +"Introducing Staking" = "آشنایی با سپرده‌گذاری"; + /* Invalid transaction */ "Invalid" = "نامعتبر"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "به‌روزرسانی موجودی شما یک دقیقه طول می‌کشد. "; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "پیوستن به مجموعه"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "کلید شناسه"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "حساب کوین‌بیس‌ را متصل کنید"; +/* CrowdNode */ +"Link Existing Account" = "اتصال به حساب موجود "; + /* CrowdNode */ "Link Existing CrowdNode Account" = "اتصال به یک حساب موجود در کراودنود"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "ورود به کراودنود"; -/* No comment provided by engineer. */ -"Log Out" = "خروج"; - /* No comment provided by engineer. */ "Log out from Uphold" = "خروج از آپهولد"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "پائین"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "اجازه استفاده از جی‌پی‌اس"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "کلید مسترنود"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "به‌روزرسانی مسترند"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "حداکثر"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "متوسط"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "اعضا می‌توانند هر وقت که بخواهند این مجموعه را ترک کنند و در اکثر مواقع می‌توانند بلافاصله آن را ترک کنند. "; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "پس از روشن کردن موقعیت مکانی دستگاه، جستجوی فروشندگان بهتر عمل می‌کند. "; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "بیشتر"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "مدیریت بیشتر"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "منتقل شد از"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "ایجاد حساب جدید کراودنود"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "این طور نیست که همه این فروشندگان، دش را به صورت مستقیم بپذیرند. اما می‌توانید با دش اقدام به خرید کارت هدیه کنید."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "باشه"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "آنلاین"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "کلیدهای اپراتور"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "پیش‌نمایش سفارش"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "کلیدهای مالک"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "پرداخت با"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "گزینه‌های پاداش"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "به ازای هر تراکنش"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "برای پرداخت، همیشه باید پین کد را وارد کنید"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "لطفا اتصال شبکه‌تان را بررسی کنید"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "دقت داشته باشید که ایمیل توسط دش والت ذخیره نمی‌شود و فقط برای کراودنود ارسال می‌شود"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "لطفا منتظر بمانید"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "لطفا آن را یادداشت کنید"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "کلیدهای خصوصی/عمومی (بیش۶۴)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = " از پس‌اندازهایتان محافظت کنید"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "خرید"; /* No comment provided by engineer. */ "Quick Receive" = "دریافت سریع"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "مستقیما روی دش والت دریافت کنید"; +/* CrowdNode */ +"Receive your share of rewards daily." = "سهم‌تان از پاداش روزانه را دریافت کنید. "; + /* Received transaction */ "Received" = "دریافتی"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "دریافت پاداش"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "اسکن دوباره"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "اسکن"; /* No comment provided by engineer. */ "Scan Private Key" = "اسکن کلید خصوصی"; +/* No comment provided by engineer. */ +"Scan QR" = "اسکن کیوآر کد"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "امنیت"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "مشاهده در آپهلد"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "یک رمزارز را انتخاب کنید"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "یک رمزارز انتخاب کنید"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "ارسال گزارش"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "ارسال به"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "در حال ارسال"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "ارسال برای "; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "پین کد را تعیین کنید"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "تنظیمات"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "به اشتراک گذاری"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "نشان دادن اطلاعات در کلیپ‌برد"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "نمایش کیوآر کد"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "نشان دادن عبارت بازیابی"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "سپرده‌گذاری"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "روی نشانی موجود در کلیپ‌برد لمس کنید تا چسبانده شود"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "دسته‌بندی مالیاتی"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "بلاکچین در حال به‌روزرسانی..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "کد وارد شده درست نیست. لطفا دوباره آن را بررسی کرده و وارد کنید! "; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "این رقم نشانگر درصد بازدهی سالانه یک مسترنود منهای کارمزد ۱۵ درصدی کراودنود است. این نرخ بازگشت سرمایه تضمینی نیست و ممکن است بر اساس تعداد حاضران در کراودنود و قیمت دش پائین و بالا رود. "; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "برای آغاز سپرده‌گذاری، ابتدا یک حساب در کراودنود ایجاد کنید و یا به یک حساب موجود در آن متصل شوید. "; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "به نشانی دشی که برای حساب کراودنود در دش والت روی این دستگاه در نظر گرفته‌اید"; + /* No comment provided by engineer. */ "Tools" = "ابزارها"; +/* Dash Portal */ +"Topper" = "تاپر"; + /* No comment provided by engineer. */ "Total" = "مجموع"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "سابقه تراکنش‌ها"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "انتقال دش"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "انتقال دش از حساب آپهلد به این کیف پول"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "امکان اتصال وجود ندارد"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "ناشناخته"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "آپهولد"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "در حال اعتبارسنجی نشانی..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "در حال اعتبارسنجی نشانی..."; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "تائید"; +/* CrowdNode */ +"Verify your API Dash address" = "نشانی ای‌پی‌آی دش‌تان را تائید کنید. "; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "بسیار بالا"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "یک مبلغ جزئی دش از کراودنود به این حساب فرستاده می‌شود تا از اینکه شما صاحب این نشانی هستید اطمینان حاصل شود. "; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "مشاهده عبارت بازیابی"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "کلیدهای رای‌دهی"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "منتظر بمانید تا بلاکچین کاملا به‌روزرسانی شود تا بتوانید سابقه تراکنش‌هایتان را ببینید. برای ورود به حساب یا ثبت‌نام به وب‌سایت کراودنود بروید. "; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "ما ارتقاء دادیم"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "ما به صورت خودکار به بررسی تراکنش پرداخته و همان مقدار را به حساب کراودنود شما برمی‌گردانیم. پس از آن، می‌توانید در دش والت روی این دستگاه اقدام به واریز و برداشت کنید. "; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "خوش آمدید"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "وقتی که تراکنش تائید شد، کیف پول کاغذی مذکور دیگر بی‌ارزش خواهد شد و به دلایل امنیتی، بهتر است دیگر از آن استفاده نکنید. "; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "چرا همه این تراکنش‌ها را می‌بینم؟ "; +/* CrowdNode */ +"Why do you need an online account?" = "چرا نیاز به یک حساب آنلاین دارید؟ "; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "چرا نباید اسکرین‌شات بگیریم؟ "; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "درخواست برداشت صورت گرفته است"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "می‌توانید نحوه برداشت/زمان برداشت پاداشی که به شما داده می‌شود را تغییر دهید. "; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "جزئیات مربوط به واریزها، برداشت‌ها و پاداش‌ها را می‌توانید ببینید. "; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "موجودی کافی ندارید"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "از حد تعریف‌شده در کوین‌بیس فراتر رفتید."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "باید از عبارت ورودی‌تان در دش والت یک نسخه پشتیبان تهیه کنید. "; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "باید با استفاده از مرورگرتان، از وب‌سایت آپهولد خارج شوید"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "اگر دستگاه‌تان گم شود یا آسیب ببیند یا دش والت از روی دستگاه‌تان پاک شود، برای دسترسی به موجودی‌تان به این عبارت بازیابی نیاز خواهید داشت. "; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "مبلغی جزئی را به صورت خودکار دریافت خواهید کرد و به صورت خودکار دوباره سرمایه‌گذاری می‌شود. با این وجود، امکان تنظیم برداشت خودکار برای دریافت پرداخت‌های مکرر به سادگی امکان‌پذیر است. "; + /* CrowdNode */ "Your CrowdNode account is creating…" = "حساب کراودنود شما در حال ایجاد شدن است..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "واریز شما به کراودنود صورت گرفت. "; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "نشانی اصلی دش شما که از آن در حال حاضر برای حساب کراودنود  استفاده می‌کنید. "; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "موجودی حساب آپهلد شما برابر است با"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "کیف پول‌تان اکنون امن است. هر گاه خواستید می‌توانید از این عبارت بازیابی برای بازگرداندن حساب‌تان روی دستگاهی دیگر استفاده کنید. "; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index 84a35a0c9..6d67be7cb 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Tietoja"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Osoite"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Peruuta"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopioi"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Rahanvaihtokurssia ei löytynyt."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Virhe"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skannaa"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Asetukset"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Jaa"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index 27e8a6368..67c72d28d 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ ay hindi pinahihintulutang i-access ang Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Pagproseso ng Bayad"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Tungkol sa"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Tanggapin"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Direktang tumatanggap ng DASH"; +/* CrowdNode */ +"Account Recovery" = "Pagbawi ng Account"; + /* No comment provided by engineer. */ "Activity" = "Aktibidad"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Magdagdag ng Bagong Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Masusing seguridad"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Lahat"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "at"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Sigurado ka bang gusto mong kanselahin ang transaksyong ito?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Sigurado ka ba?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Mas gumagana ang paghahanap sa ATM kapag naka-on ang Mga Serbisyo sa Lokasyon."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balanse"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balanse:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Maging bahagi ng isang Dash Masternode na may CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Sa pagitan ng Dash Wallet at Coinbase."; +"Between Dash Wallet and Coinbase" = "Sa pagitan ng Dash Wallet at Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Sa pagitan ng Dash Wallet at ng iyong Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Bumili ng Dash gamit ang fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Bumili ng Dash na may Uphold na account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Bumili ng Dash · Walang kinakailangang account"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Bumili ng mga gift card gamit ang iyong Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Bili/Benta"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Sa pag-wipe nitong device hindi mo na maaaring ma-access ang iyong pondo sa device na ito. Ito ay maaari mo lamang gawin kung wala ka na talagang access sa iyong passphrase at nakalimutan mo na rin ang iyong PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "I-cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Ang pagkansela sa transaksyong ito ay hindi makakansela sa trade order. Makakatanggap ka ng DASH sa iyong Coinbase account sa ilang sandali."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Baguhin ang PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Suriin ang koneksyon"; /* Choose your Dash username */ "Choose your" = "Pumili ng iyong"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Burahin"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Sarado"; +/* CrowdNode */ +"Close and notify when it’s done" = "Isara at ipaalam kapag tapos na ito"; + /* No comment provided by engineer. */ "Close App" = "Isara ang app"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Bayad sa Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Kumpirmahin"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Kumpirmahin & Magbayad"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Kumpirmahin (%@)"; +"Confirm" = "Kumpirmahin"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Kumpirmahin (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Kumpirmahin ang PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Kinukumpirma"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Konektado"; +/* CrowdNode */ +"Connected Dash address" = "Nakakonektang Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Nakakonektang kaibigan: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopyahin"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Kopyahin ang logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Hindi makakonekta sa network ng Dash, mangyaring suriin kung nakakonekta ka sa internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Hindi makita ang halaga ng palitan"; + /* No comment provided by engineer. */ "Couldn't make payment" = "Hindi makagawa ng ipambabayad"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Hindi naipahatid ang bayad sa dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Gumawa ng bagong pitaka"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Lumikha ng Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Lumikha ng online na CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Lumikha ng Online na Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "Mga benepisyo ng CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Suporta sa CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "Ginagamit ng CrowdNode ang address na ito bilang iyong account ID. Mawawalan ka ng access sa iyong mga pondo sa loob ng wallet na ito at sa iyong CrowdNode account kung mawala mo ang passphrase na nauugnay sa address na ito."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Mga limitasyon sa pag-withdraw sa CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Address ng Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balanse sa Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Dash balanse sa Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Ang pagbabayad ng Dash ay hindi dapat bababa sa %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet sa device na ito"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Bayad sa Pag-upgrade ng DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Petsa"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default na pananalapi, shortcuts, about..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Idiskonekta ang Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Idiskonekta ang Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Idiskonekta"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distansya"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Huwag kumuha ng screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Tapos"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "hal. juandelacruz@gmail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Mas maaga"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Madaling i-stake ang Dash at kumita ng passive income sa ilang simpleng pag-click."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "hal: juandelacruz"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ilagay ang iyong 2FA code sa ibaba"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Mali"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Kamalian sa Pag-upgrade"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Lumabas"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Mga bayarin sa mga pagbili ng crypto"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Kinukuha ang Impormasyon"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Salain ang transaksyon"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Na-filter ni:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Maghanap ng gumagamit sa Network ng Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Maghanap ng mga merchant na tumatanggap ng Dash, kung saan ito bibilhin at kung paano kumita gamit ito."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Maghanap ng mga merchant na tumatanggap ng Dash bilang bayad."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Ang unang deposito ay dapat na higit sa %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Para sa iyong seguridad, na-sign out ka."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "mula sa Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Mula sa Uphold hanggang Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Mula sa Uphold hanggang sa iyong Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "mula sa iyong Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Makakuha ng mga reward mula sa mga deposito sa Dash Masternodes na may kasing liit na 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Bumuo ng pinalawig na mga public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Kumuha ng Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Makakuha kaagad ng Mga Gantimpala"; + /* No comment provided by engineer. */ "Get Started" = "Magsimula"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Pagsisimula sa CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift card"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Tulungan kaming mapabuti ang iyong karanasan"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Mataas"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Kasaysayan"; +/* CrowdNode */ +"How CrowdNode staking works" = "Paano gumagana ang CrowdNode staking"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Paano kumpirmahin ang iyong API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Paano Gumamit ng Gift Card"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Mga key ng Evolution Node ID"; /* No comment provided by engineer. */ "I Accept" = "Tinatanggap Ko"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Sumasang ayon ako sa CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Naisulat ko na ito"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Kung sakaling mawala mo ang iyong passphrase, maaari mong i-verify ang iyong sarili sa ibang paraan upang mabawi ang access sa iyong mga pondo ng CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Kung mawala mo ang iyong passphrase para sa wallet na ito at mawala ang device na ito o i-uninstall ang Dash Wallet, mawawalan ka ng access sa iyong mga pondo sa CrowdNode at ang mga pondo sa loob ng wallet na ito."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Kung gusto mo paring i-wipe ito paki-input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Kung gusto mong mag-save ng mga manu-manong na-reclassify na uri para sa mga transaksyon dapat kang mag-export ng CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Huwag pansinin"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Kaagad"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Bilang karagdagan sa ipinapakitang bayad sa Coinbase, nagsasama kami ng spread sa presyo. Kapag gumagamit ng Advanced Trade, walang spread na kasama dahil direktang nakikipag-ugnayan ka sa order book.\n\nAng mga merkado ng Cryptocurrency ay pabagu-bago, at nagbibigay-daan ito sa amin na pansamantalang i-lock ang isang presyo para sa pagpapatupad ng kalakalan."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Pinoproseso…"; /* No comment provided by engineer. */ "Income" = "Kita"; +/* CrowdNode */ +"Information about your online account" = "Impormasyon tungkol sa iyong online na account"; + /* Buy Sell Portal */ "Initializing" = "Nagsisimula"; /* No comment provided by engineer. */ "Insufficient funds" = "Hindi sapat na pondo"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal na pagpapadala"; /* No comment provided by engineer. */ "Internally moved to" = "Internally ilipat sa"; +/* CrowdNode */ +"Introducing Staking" = "Ipinapakilala ang Staking"; + /* Invalid transaction */ "Invalid" = "Hindi wasto"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Di-wastong Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid ang hiniling na bayad"; /* No comment provided by engineer. */ "Invalid QR Code" = "Hindi wasto ang QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Maaaring tumagal ng isang minuto bago ma-update ang iyong balanse."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Maaaring tumagal ng hanggang 10 minuto upang ilipat ang Dash mula sa Coinbase patungo sa Dash Wallet sa device na ito"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Mukhang sinusubukan mong ibalik ang iyong pitaka gamit ang isang 12 na recovery phrase, subalit nakapaglagay ka lamang ng 10 salita, nais mo bang awtomatikong mabawi ang mga nawawalang salita? Maaari itong tumagal ng halos isang oras. Inirerekumenda namin ang pag-plug sa iyong aparato."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Mukhang sinusubukan mong ibalik ang iyong pitaka gamit ang isang 12 na recovery phrase, subalit nakapaglagay ka lamang ng 11 salita, nais mo bang awtomatikong mabawi ang nawawalang salita?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Sumali sa Ebolusyon"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Sumasali sa pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Matuto pa..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Ipaalam sa akin kung kailan ito tapos"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Mga letra at mga numero lamang"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "I-link ang Coinbase account"; +/* CrowdNode */ +"Link Existing Account" = "I-link ang Umiiral na Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "I-link ang Umiiral na CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Mag-log in sa CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Mag-log out mula sa Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Mababa"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Pamahalaan ang Pahintulot sa GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Mga Masternode Key"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Pag-update ng Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum na %ld character"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Katamtaman"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Ang mga miyembro ay malayang umalis sa pool at kadalasan ay maaaring umalis kaagad."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Mas mahusay na gumagana ang paghahanap ng merchant kapag naka-on ang Mga Serbisyo sa Lokasyon."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum na 3 character"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Marami"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Mas marami pang kontrol"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Ilipat mula"; /* No comment provided by engineer. */ "Moved to Address" = "Ilipat sa address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Ang Aking mga Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Bago"; +/* CrowdNode */ +"New CrowdNode Account" = "Bagong CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Walang aktibong user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Walang paraan ng pagbabayad"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Hindi wastong address ng Dash"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Hindi lahat ng tindahan ay direktang tumatanggap ng DASH, ngunit maaari kang bumili ng gift card gamit ang iyong Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Kapag tinanggap ng %@ ang iyong kahilingan maaari kang Magbayad Direkta sa Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator na mga Susi"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Preview ng Order"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Susi ng may-ari"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Magbayad"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Magbayad ng Direkta sa Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Magbayad gamit ang"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Uri ng Pagbabayad"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Mga Pagpipilian sa Pagbabayad"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "bawat transaksyon"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Ang PIN ay laging kailangan sa pagbabayad."; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Mangyaring suriin ang iyong koneksyon sa network"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Paki-enter ang PIN para ma-upgrade ang pitaka"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Pakitandaan na ang email ay hindi nai-save ng Dash Wallet at ipinapadala lamang sa Crowdnode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Pakitandaan, hindi mo mai-withdraw ang iyong mga pondo mula sa CrowdNode patungo sa wallet na ito hanggang sa mapataas mo ang iyong balanse sa %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Mangyaring subukang i-scan muli"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Mangyaring maghintay"; /* No comment provided by engineer. */ "Please wait" = "Mangyaring maghintay"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Mangyaring maghintay hanggang ang wallet ay ganap na ma-sync bago i-export ang iyong kasaysayan ng transaksyon."; /* No comment provided by engineer. */ "Please write it down" = "Paki-sulat sa ibaba"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Ginamit dati sa:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Pribado / Pampublikong Susi (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protektahan ang iyong mga ipon"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Address ng tagapagbigay ng serbisyo"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Pampublikong Susi (pamana)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Bumili"; /* No comment provided by engineer. */ "Quick Receive" = "Tanggapin ng mabilis"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Napatunayan sa korums : %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Direktang tumanggap sa Dash Wallet."; +/* CrowdNode */ +"Receive your share of rewards daily." = "Tanggapin ang iyong bahagi ng mga reward araw-araw."; + /* Received transaction */ "Received" = "Natanggap"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Natanggap mula"; +/* CrowdNode */ +"Receiving rewards" = "Pagtanggap ng mga gantimpala"; + /* No comment provided by engineer. */ "Recover" = "Bawiin"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "I-report ang Isyu"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "I-scan muli"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "I-rebyu at bigyang marka ang app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Gantimpala"; /* No comment provided by engineer. */ "Rewards" = "Mga gantimpala"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "I-scan ang Pribadong Susi"; +/* No comment provided by engineer. */ +"Scan QR" = "I-scan ang QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "I-scan ang QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Ang mga screenshot ay kita sa ibang apps o device. Lumikha ng bagong recovery phrase at panatilihin itong sikreto. "; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Maghanap para sa isang contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Naghahanap ng username %@ sa Network ng Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Seguridad"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Tingnan sa Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Pumili ng barya"; /* Buy Sell Dash */ "Select a service" = "Pumili ng isang Serbisyo"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Piliin ang barya"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Ipadala ang %@ mula sa iyong pangunahing Dash address na kasalukuyan mong ginagamit para sa iyong CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Magpadala ng Kahilingan sa Pakikipag-ugnay"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Magpadala ng ulat"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Pinadala kay"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Ipadala sa kinopyang address o QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Ipinapadala"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Nagpapadala kay"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Mag-set ng PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Settings"; /* No comment provided by engineer. */ "Setup Wallet" = "Magset up ng wallet"; +/* CrowdNode */ +"Share" = "Ipamahagi"; + /* Receive screen */ "Share address" = "Ibahagi ang address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Mamili gamit ang DASH sa mahigit 150k na merchant"; - /* Enter Address Screen */ "Show content in the clipboard" = "Ipakita ang nilalaman sa clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Ipakita ang susi ng masternode"; +/* CrowdNode */ +"Show QR" = "Ipakita ang QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Ipakita ang recovery phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Suporta"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Sini-sync..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "I-tap ang address mula sa clipboard para i-paste ito"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategorya ng Buwis"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Nagsi-sync ang chain…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Mali ang code. Pakisuri at subukang muli!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Ang Dash ay matagumpay na nadeposito sa iyong Coinbase account. Ngunit nagkaroon ng problema sa paglilipat nito sa Dash Wallet sa device na ito."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Ang pinakamababang halaga na maaari mong ipadala ay %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Walang mga bagong notipikasyon"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Walang mga gumagamit na tumutugma sa pangalang %@ sa iyong contact"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Nagkaroon ng error habang kumukuha ng bagong address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Ang QR na ito ay naglalaman na ng kahilingan sa pagbabayad para sa %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Kinakatawan nito ang kasalukuyang Annual Percentage Yield ng isang buong Masternode na mas mababa sa 15% na bayad sa CrowdNode. Ito ay hindi isang garantisadong rate ng pagbabalik at maaaring tumaas o bumaba batay sa laki ng mga pool ng CrowdNode at ang presyo ng Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Ang pitaka na ito ay may laman o ang pag-sync ay hindi pa tapos, maaari hindi mo ma-wipe ito ng walang recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "Sa Dash wallet sa device na ito"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Para simulan ang staking, gumawa ng account sa CrowdNode o kumonekta sa mayroon na."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Para sa Dash address na itinalaga para sa iyong CrowdNode account sa Dash Wallet sa device na ito"; + /* No comment provided by engineer. */ "Tools" = "Kagamitan"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Kabuuan"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Kasaysayan ng Transaksyon"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Ilipat ang Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Ilipat ang Dash mula sa iyong Uphold account patungo sa pitaka."; - /* CrowdNode */ "Transfer Error" = "Error sa Paglipat"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Subukan muli"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "I-turn on ang device passcode"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Kinakailangan ang two-factor na auth"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Hindi maka-konekta"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Hindi makakuha ng bagong QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Hindi kilala"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Hindi suportadong URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Na-update: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Inuupdate ang Presyo"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Bayad sa Pag-upgrade"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Pag-a-upgrade sa DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Gumamit ng gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "ginagamit sa"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Kinuha na Username"; -/* CrowdNode Portal */ -"Validating address…" = "Pinapatunayan ang address..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Tapos na ang pagpapatunay ng username"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Pinapatunayan ang address..."; /* No comment provided by engineer. */ "Validating username failed" = "Bigo ang pagpapatunay ng username"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Kumpirmahin"; +/* CrowdNode */ +"Verify your API Dash address" = "I-verify ang iyong API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Napakataas"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Ang napakaliit na halaga ng Dash ay ipapadala sa at mula sa CrowdNode upang i-verify na ikaw ang may-ari ng address ng wallet na ito."; + /* No comment provided by engineer. */ "View All" = "Tingnan lahat"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ipakita ang recovery phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Address ng pagboto"; /* No comment provided by engineer. */ "Voting Keys" = "Mga susi ng pagboto"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Maghintay hanggang sa ganap na ma-sync ang chain, para masuri namin ang iyong history ng transaksyon. Bisitahin ang website ng CrowdNode upang mag-log in o mag-sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Kami ay nag-upgrade"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Awtomatiko naming matutukoy ang transaksyong ito at ilipat ang parehong halaga sa iyong CrowdNode account. Pagkatapos nito, makakagawa ka na ng mga deposito at pag-withdraw sa Dash Wallet sa device na ito."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Maligayang pagdating"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Kapag ang transaksyon ay nakumpirma, ang ibang wallet ay mawawalan ng bisa at hindi na pwedeng gamitin ulit para sa panseguridad. "; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Bakit ko nakikita ang lahat ng mga transaksyong ito?"; +/* CrowdNode */ +"Why do you need an online account?" = "Bakit kailangan mo ng online na account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Bakit hindi ako dapat kumuha ng screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Hiniling ang withdrawal"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Oo"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Ikaw ay magwa-wipe na ng eallet dito sa device. Anumang pondo na kalakip nito ay maaaring lamang maiblik kung mayroon kang recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Maaari kang magkumpirma gamit ang iyong Face ID sa mga bayarin sa ibaba"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Maaari kang magkumpirma gamit ang iyong Touch ID sa mga bayarin sa ibaba"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Maaari mong baguhin kung paano / kailan binabayaran sa iyo ang iyong mga kita sa reward."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Maaari mong makita ang detalyadong impormasyon tungkol sa iyong mga deposito, pag-withdraw at mga kita ng reward."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Wala kang sapat na balanse"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Lumampas ka sa limitasyon ng awtorisasyon sa Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Pinili mo ang \"%@\" bilang iyong username. Hindi mababago ang iyong username sa sandaling nakarehistro."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Wala kang sapat na pondo para magpatuloy."; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Kailangan mong i-backup ang iyong passphrase sa Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Kailangan ilagay ang iyong PIN upang mabuksan ang Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Kailangan mo ng kahit man lang %@ sa iyong Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Kailangan mo lang ng %@ para sumali sa pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Dapat ay mayroon kang hindi bababa sa %@ upang magpatuloy sa pag-verify ng CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Kailangan mo ring mag-log out mula sa Uphold website gamit ang iyong browser."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Kakailanganin mo ang recovery phrase na ito upang ma-access ang iyong mga pondo kung ang device na ito ay nawala, nasira o kung na-uninstall ang Dash Wallet mula sa device na ito."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Makakatanggap ka ng %@ Dash sa iyong Dash Wallet sa device na ito. Pakitandaan na maaaring tumagal ng hanggang 2-3 minuto upang makumpleto ang isang paglipat."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Awtomatiko kang makakatanggap ng mga fractional na pagbabayad at bilang default, ire-invest ang mga ito, gayunpaman, madali ring mag-set up ng mga awtomatikong withdrawal upang makatanggap ng mga umuulit na payout."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Linilikha na ang iyong CrowdNode account..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Natanggap na ang iyong deposito sa CrowdNode."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Ginagamit ang iyong lokasyon upang ipakita ang iyong posisyon sa mapa, mga ATM sa napiling radius at pinabubuti ang mga resulta ng paghahanap."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Ginagamit ang iyong lokasyon upang ipakita ang iyong posisyon sa mapa, mga mangangalakal sa napiling redius at pagbutihin ang mga resulta ng paghahanap."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ang iyong transaksyon ay naipadala at ang halaga ay dapat makita sa iyong pitaka sa loob ng ilang minuto."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Ang iyong pangunahing Dash address na kasalukuyan mong ginagamit para sa iyong CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Ang balanse ng iyong Dash sa Uphold account ay"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ang iyong transaksyon ay naipadala at ang halaga ay dapat makita sa iyong pitaka sa loob ng ilang minuto."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ang iyong username %@ ay matagumpay na nilikha sa Network ng Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Ang iyong username %@ ay nilikha sa Network ng Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Ang iyong pitaka ay ligtas na. Maari mong magamit ang recovery phrase kahit kailan upanh marekober ang account sa ibang device."; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 5ec7f6e36..82e44303f 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ n'est pas autorisé à accéder à Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld caractères"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Traitement du paiement"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "À propos"; +/* No comment provided by engineer. */ +"About me" = "À propos de moi"; + /* No comment provided by engineer. */ "Accept" = "Accepter"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepte directement Dash"; +/* CrowdNode */ +"Account Recovery" = "Restauration de compte"; + /* No comment provided by engineer. */ "Activity" = "Activité"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Ajouter un nouveau contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Ajouter vos amis & votre famille"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresse"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Sécurité avancée"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Accepter"; + /* No comment provided by engineer. */ "All" = "Tous"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "et"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Êtes-vous sûr(e) de vouloir annuler cette transaction ?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Êtes-vous certain ?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Comme beaucoup de gens n'ont pas 1000 dashs sous la main, CrowdNode a bâti un service qui permet à ses membres, par la réunion de leurs dépôts, de bénéficier des revenus de la propriété d'un masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La recherche de distributeur fonctionne mieux lorsque les Services de Localisation sont activés"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Solde"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Solde sur CrowdNode"; /* CrowdNode */ "Balance: " = "Solde :"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Virement bancaire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Participez à un masternode Dash avec CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Entre %1$ld et %2$ld caractères"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Entre le portefeuille Dash et Coinbase."; +"Between Dash Wallet and Coinbase" = "Entre Dash Wallet et Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Entre Dash Wallet et votre compte Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Acheter des dashs avec de la monnaie fiduciaire"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Acheter des dashs avec un compte Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Achetez des dashs · Aucun compte requis"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Achetez des cartes-cadeau avec vos dashs"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Acheter/Vendre"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "En effaçant ce portefeuille, vous n'aurez plus accès aux fonds sur cet appareil. Ne le faites que si vous n'avez plus accès ni à votre phrase de passe, ni à votre code PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Annuler"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Annuler cette transaction n'annule pas l'ordre de trading. Vous recevrez sous peu des dashs sur votre compte Coinbase."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Modifier le code PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Vérifier votre connexion"; /* Choose your Dash username */ "Choose your" = "Choisissez votre"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choisir votre nom d'utilisateur"; + +/* No comment provided by engineer. */ +"Claimed" = "Demandé"; + /* No comment provided by engineer. */ "Clear" = "Effacer"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Fermer"; +/* CrowdNode */ +"Close and notify when it’s done" = "Fermer et prévenir quand c'est terminé"; + /* No comment provided by engineer. */ "Close App" = "Fermer l'application"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Frais Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Confirmer"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirmer & payer"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirmer (%@)"; +"Confirm" = "Confirmer"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmer (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirmer le code PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirmation…"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connecté"; +/* CrowdNode */ +"Connected Dash address" = "Adresse Dash connectée"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Pairs connectés : %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copier"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copier le lien d'invitation"; + /* No comment provided by engineer. */ "Copy Logs" = "Copier les journaux"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Connexion impossible au réseau Dash, veuillez vérifier votre connexion à Internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Taux de change introuvables."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Impossible d'effectuer le paiement"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Impossible de transmettre le paiement au réseau Dash."; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Créer une nouvelle invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Créer une nouvelle invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Créer un nouveau portefeuille"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Créer un nom d'utilisateur, ajouter vos amis."; + /* CrowdNode */ "Create Account" = "Créer un compte"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Créer un compte en ligne CrowdNode"; + +/* No comment provided by engineer. */ +"Create invitation" = "Créer une invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Créer un compte en ligne"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Créer votre nom d'utilisateur, trouver des amis & membres de famille avec leurs noms d'utilisateur, et les ajouter à vos contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Carte bancaire"; /* Crowdnode */ "CrowdNode Account" = "Compte CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Bénéfices CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Aide CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode utilise cette adresse comme identifiant de votre compte. Vous perdrez l'accès à vos fonds dans ce portefeuille et dans votre compte CrowdNode si vous perdez la phrase de passe associée à cette adresse."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Limites de retrait CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Adresse Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Adresse Dash attribuée à votre compte CrowdNode dans Dash Wallet sur cet appareil"; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Solde Dash sur Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Solde Dash sur Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Les paiements Dash ne peuvent pas être inférieurs à %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Portefeuille Dash sur cet appareil"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "Invitation DashPay"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Frais de mise à jour DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Monnaie par défaut, raccourcis, à propos…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Se déconnecter du compte Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Déconnecter le compte Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Déconnecté"; +/* No comment provided by engineer. */ +"Display Name" = "Afficher le nom"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Ne prenez pas de capture d'écran"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Terminé"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "par exemple johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Chaque invitation percevra ce montant, et le bénéficiaire peut créer rapidement son nom d'utilisateur sur le réseau Dash"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Plus tôt"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Percevez facilement des gains Dash et gagnez un revenu passif après quelques simples clics."; +/* No comment provided by engineer. */ +"Edit Profile" = "Éditer le profil"; + +/* Invitation tag placeholder */ +"eg: Dad" = "par ex. : Papa"; + /* Input username textfield placeholder */ "eg: johndoe" = "par ex. : alexandremartin"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Tapez ci-dessous votre code 2FA"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Tapez votre identifiant Gravatar Email"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Erreur"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Erreur en modifiant votre profil"; + /* No comment provided by engineer. */ "Error Upgrading" = "Erreur pendant la mise à jour"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Quitter"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Frais dans les achats de crypto"; +/* No comment provided by engineer. */ +"Fetching Image" = "Récupération d'image"; + /* Explore Dash */ "Fetching Info" = "Récupération des infos"; /* Coinbase/Payment Methods */ "Fiat Account" = "Compte fiduciaire"; +/* No comment provided by engineer. */ +"Filter" = "Filtre"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtrer les transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtré par :"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Cherchez un utilisateur sur le réseau Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Trouver des vendeurs qui acceptent Dash"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Découvrez des vendeurs qui acceptent Dash, comment acheter des dashs et comment en gagner un revenu."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Trouvez des vendeurs qui acceptent les paiements avec Dash."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Le premier dépôt doit être supérieur à %@"; +/* CrowdNode */ +"First minimum deposit" = "Premier dépôt minimum"; + /* Coinbase */ "For your security, you have been signed out." = "Vous avez été déconnecté(e) pour votre sécurité."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "depuis Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Depuis Uphold vers Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "De Uphold vers votre Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "depuis votre compte Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Percevez des récompenses grâce à vos transferts sur des masternodes Dash, dès la petite somme de 0,5 dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Générer des clés publiques étendues ?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Obtenir un devis"; +/* CrowdNode */ +"Get Rewards Instantly" = "Percevez des récompenses instantanément"; + /* No comment provided by engineer. */ "Get Started" = "Commencer"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Obtenir votre nom d'utilisateur"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Commencer à utiliser CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Carte-cadeau"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Aidez-nous à améliorer votre expérience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Voici une adresse Dash attribuée à votre compte CrowdNode dans Dash Wallet sur cet appareil"; + /* adjective, security level */ "High" = "Élevé"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Historique"; +/* CrowdNode */ +"How CrowdNode staking works" = "Comment marche l'épargne CrowdNode (staking)"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Comment confirmer votre adresse API Dash"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Comment utiliser une carte-cadeau"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Clés ID pour nœud Evolution"; /* No comment provided by engineer. */ "I Accept" = "J'accepte"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Je souscris à CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Je l'ai écrite sur papier"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Si vous égarez votre phrase de passe, vous pouvez vous authentifier par d'autres moyens pour regagner l'accès à vos fonds CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Si vous perdez votre phrase de passe pour ce portefeuille, ou si vous perdez cet appareil, ou si vous désinstallez Dash Wallet, vous perdrez l'accès à vos fonds sur CrowdNode ainsi que les fonds dans ce portefeuille."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Si vous souhaitez toujours tout effacer, veuillez taper : \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Si vous souhaitez enregistrer manuellement les types reclassifiés des transactions, vous devriez exporter un fichier CSV des transactions."; /* No comment provided by engineer. */ "Ignore" = "Ignorer"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "L'image transmise peut être vue publiquement par tout le monde."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "L'URL de l'image ne peut pas dépasser %ld caractères."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Règles de confidentialité des images"; + /* No comment provided by engineer. */ "Immediately" = "Tout de suite"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "En plus des frais Coinbase affichés, nous incluons un écart dans le prix. En utilisant le mode avancé de trading, aucun écart n'est inclus car vous intervenez directement sur le registre d'ordres.\n\nLes marchés cryptomonétaires sont volatiles, et cela nous permet de verrouiller temporairement un cours pour l'exécution du trading."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "Dans le cas de retraits plus importants, CrowdNode les effectuera sous deux semaines. Cela est dû à leur protocole de sécurité, et ce sera souvent traité bien plus rapidement."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "En cours..."; /* No comment provided by engineer. */ "Income" = "Revenu"; +/* CrowdNode */ +"Information about your online account" = "Informations sur votre compte en ligne"; + /* Buy Sell Portal */ "Initializing" = "Initialisation"; /* No comment provided by engineer. */ "Insufficient funds" = "Fonds insuffisants"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Solde de portefeuille insuffisant"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transfert interne"; /* No comment provided by engineer. */ "Internally moved to" = "Déplacé en interne vers"; +/* CrowdNode */ +"Introducing Staking" = "Présentation des gains"; + /* Invalid transaction */ "Invalid" = "Invalide"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Montant invalide"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Adresse Dash non valide"; /* CrowdNode Online */ "Invalid Email" = "Adresse e-mail invalide"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Entrée invalide"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invitation invalide"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Demande de paiement invalide"; /* No comment provided by engineer. */ "Invalid QR Code" = "QR-code non valide"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation déjà réclamée"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation créée avec succès"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Frais d'invitation"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Historique d'invitations"; + +/* No comment provided by engineer. */ +"Invite" = "Inviter"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Inviter quelqu'un à rejoindre le réseau Dash"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Inviter votre famille, trouver vos amis en recherchant leurs noms d'utilisateur"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Inviter vos amis & votre famille"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Inviter vos amis et votre famille à rejoindre le réseau Dash."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Inviter vos amis et votre famille au réseau Dash"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "La mise à jour de votre solde peut prendre une minute."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Sur cet appareil, le transfert de dashs depuis Coinbase vers Dash Wallet peut prendre jusqu'à 10 minutes"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Il semble que vous tentiez de restaurer votre portefeuille avec une phrase de récupération de 12 mots. Cependant vous n'avez indiqué que 10 mots. Voulez-vous retrouver automatiquement les mots manquants ? Cela peut prendre environ une heure. Nous vous recommandons de brancher votre appareil au secteur."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Il semble que vous tentiez de restaurer votre portefeuille avec une phrase de récupération de 12 mots. Cependant vous n'avez indiqué que 11 mots. Voulez-vous retrouver automatiquement le mot manquant ?"; +/* No comment provided by engineer. */ +"Join" = "Joindre"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Rejoindre DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Rejoindre Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Rejoindre maintenant"; + +/* CrowdNode */ +"Joining the pool" = "Rejoindre une équipe"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Identifiant de clé"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "En savoir plus…"; +/* CrowdNode */ +"Leaving the pool" = "Sortie du pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Prévenez-moi quand c'est fait"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Permet à vos amis et votre famille de rejoindre Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Permet à vos amis et votre famille de rejoindre le réseau Dash. Invitez-les dans le monde de banque sociale."; + /* Validation rule */ -"Letters and numbers only" = "Lettres et chiffres seulement"; +"Letters, numbers and hyphens only" = "Lettres, chiffres et tirets seulement"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Allons-y"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Lier au compte Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Utiliser un compte existant"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Utiliser un compte CrowdNode existant"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Se connecter à CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Se déconnecter"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Se déconnecter d'Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Bas"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Gérer la permission GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Carte"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Clés de masternode"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Mettre à jour un masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Maximum"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "%ld caractères au maximum"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Peut-être plus tard"; /* adjective, security level */ "Medium" = "Moyen"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Les membres sont libres de quitter les serveurs, et peuvent dans la plupart des cas le faire immédiatement."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La recherche de vendeurs marche mieux lorsque les services de localisation sont activés."; -/* Validation rule */ -"Minimum 3 characters" = "3 caractères au minimum"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Plus"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Plus de contrôle"; +/* No comment provided by engineer. */ +"More Suggestions" = "Plus de suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Déplacez et zoomez votre photo pour trouver la meilleure apparence"; + /* No comment provided by engineer. */ "Moved from" = "Déplacé de"; /* No comment provided by engineer. */ "Moved to Address" = "Déplacé vers l'adresse"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Doit commencer et se terminer par une lettre ou un chiffre"; + /* No comment provided by engineer. */ "My Contacts" = "Mes contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nouveau"; +/* CrowdNode */ +"New CrowdNode Account" = "Nouveau compte CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Appareil NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Aucun utilisateur actif"; +/* Coinbase */ +"No cash account found" = "Aucun compte cash détecté"; + /* Coinbase/Buy Dash */ "No payment methods" = "Aucun mode de paiement"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Ce n'est pas une adresse Dash valide"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tous les magasins n'acceptent pas Dash directement, mais vous pouvez acheter une carte-cadeau avec vos dashs."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Une fois que %@ aura accepté votre demande, vous pourrez payer directement à son nom d'utilisateur"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "En ligne"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Vendeur en ligne"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Clés d'opérateur"; +/* No comment provided by engineer. */ +"or" = "ou"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Prévisualisation de la commande"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Clés de propriétaire"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Coller l'URL de votre image"; + /* No comment provided by engineer. */ "Pay" = "Payer"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "payer directement à ce nom d'utilisateur"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Payer à des noms d'utilisateur. Il n'y a plus d'adresses alphanumériques"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Payer avec"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Type de paiement"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Les paiements faits directement à des adresses ne seront pas conservés en activité."; + +/* CrowdNode */ +"Payout Options" = "Options de paiement"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "par transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personnaliser"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Le code PIN est toujours demandé pour faire un paiement"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Veuillez vérifier votre connexion réseau"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Veuillez saisir un identifiant Gravatar Email valide."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Veuillez saisir une URL d'image valide."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Veuillez saisir votre code PIN pour mettre à jour le portefeuille"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Veuillez noter que l'adresse e-mail n'est pas enregistrée par le portefeuille Dash, mais seulement envoyée à CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Veuillez noter que vous ne pourrez pas retirer vos fonds depuis CrowdNode vers ce portefeuille sans augmenter votre solde à %@ dashs."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Veuillez essayer une nouvelle réinspection"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Veuillez patienter"; /* No comment provided by engineer. */ "Please wait" = "Veuillez patienter"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Veuillez attendre que ce portefeuille soit entièrement synchronisé avant d'exporter votre historique de transactions"; /* No comment provided by engineer. */ "Please write it down" = "Veuillez l'écrire quelque part"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Prévisualiser l'invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Précédemment utilisé à :"; +/* CrowdNode */ +"Primary Dash address" = "Adresse Dash principale"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Clés privée / publique (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protéger vos fonds"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Adresse du fournisseur"; @@ -1194,7 +1644,10 @@ "Public key" = "Clé publique"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Clé publique (traditionnelle)"; + +/* No comment provided by engineer. */ +"Public URL" = "URL publique"; /* Coinbase/Buy Dash */ "Purchase" = "Achat"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Réception rapide"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validés : %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Recevoir directement dans Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Recevez votre part de récompense quotidiennement."; + /* Received transaction */ "Received" = "Reçu"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Reçu de"; +/* CrowdNode */ +"Receiving rewards" = "Recevoir les paiements"; + /* No comment provided by engineer. */ "Recover" = "Récupération"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Signaler un problème"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Réanalyser"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Évaluer & noter cette appli"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Récompense"; /* No comment provided by engineer. */ "Rewards" = "Récompenses"; +/* No comment provided by engineer. */ +"Save" = "Enregistrer"; + +/* No comment provided by engineer. */ +"Save Changes" = "Enregistrer les modifications"; + /* No comment provided by engineer. */ "Scan" = "Scanner"; /* No comment provided by engineer. */ "Scan Private Key" = "Scanner une clé privée"; +/* No comment provided by engineer. */ +"Scan QR" = "Scanner le QR-code"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scanner un QR-code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Les captures d'écran sont visibles aux autres applis et appareils. Générez une nouvelle phrase de récupération et gardez-la secrète."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Rechercher un contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Recherche du nom d'utilisateur %@ sur le réseau Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Sécuriser votre portefeuille"; + /* No comment provided by engineer. */ "Security" = "Sécurité"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Voir sur Uphold"; +/* No comment provided by engineer. */ +"Select" = "Choisir"; + /* Coinbase */ "Select a coin" = "Choisir des pièces"; /* Buy Sell Dash */ "Select a service" = "Choisissez un service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Choisir dans la galerie"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Choisir les pièces"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Envoyer %@ depuis l'adresse principale Dash que vous utilisez actuellement pour votre compte CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Réenvoyer"; + /* No comment provided by engineer. */ "Send Contact Request" = "Envoyer une demande de contact"; +/* No comment provided by engineer. */ +"Send Invitation" = "Envoyer l'invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Envoyer un rapport"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Envoyer à"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Envoyer à un contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Envoyé à l'adresse copiée ou au code QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Envoi en cours"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Envoi de la requête de contact"; + /* No comment provided by engineer. */ "Sending to" = "Envoi à"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Choisir un code PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Choisir votre code PIN"; + /* No comment provided by engineer. */ "Settings" = "Paramètres"; /* No comment provided by engineer. */ "Setup Wallet" = "Mettre en place le portefeuille"; +/* CrowdNode */ +"Share" = "Partager"; + /* Receive screen */ "Share address" = "Partager l'adresse"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Acheter avec Dash chez plus de 150 000 vendeurs"; - /* Enter Address Screen */ "Show content in the clipboard" = "Voir le contenu du presse-papiers"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Voir les clés de masternode"; +/* CrowdNode */ +"Show QR" = "Voir le QR-code"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Voir la phase de récupération"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Récompenses"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Étape %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Aide"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Synchronisation…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag pour votre référence"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Prendre une photo"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Touchez l'adresse du presse-papiers pour la coller"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Catégorie de taxe"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Synchronisation de la chaîne..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Ce code est incorrect. Veuillez vérifier et réessayer !"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "Le réseau Dash est opéré par un certain nombre de masternodes, qui sont un facteur essentiel pour faciliter les paiements."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Les dashs ont été déposés avec succès sur votre compte Coinbase. Mais il y a eu un problème lors de leur transfert sur Dash Wallet sur cet appareil."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "L'image que vous choisissez sera envoyée anonymement à Imgur."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Le montant minimal que vous pouvez envoyer est %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "eux (infos de récupération)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Aucune nouvelle notification"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Aucun utilisateur ne correspond au nom %@ parmi vos contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Il y a eu une erreur lors de l'obtention d'une nouvelle adresse"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Ce QR-code contient déjà la requête de paiement pour %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Cela représente le pourcentage annuel de rendement d'un masternode entier, moins les 15% des frais de CrowdNode. Cela n'est pas un taux garanti de retour, et peut augmenter ou diminuer en fonction des tailles des serveurs CrowdNode et du cours de Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Ce portefeuille n'est pas vide, ou bien la synchronisation n'est pas terminée. Vous ne pouvez pas l'effacer sans la phrase de récupération."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "vers Dash Wallet sur cet appareil"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Pour commencer à investir, créez un compte sur CrowdNode ou connectez-vous à un compte existant."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "vers l'adresse Dash associée à votre compte CrowdNode dans le Dash Wallet de cet appareil"; + /* No comment provided by engineer. */ "Tools" = "Outils"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Limite pour TouchID"; +/* CrowdNode */ +"Transaction History" = "Historique des transactions"; + /* No comment provided by engineer. */ "Transaction id" = "Identifiant de transaction"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transférer des dashs"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transférer des dashs depuis votre compte Uphold vers ce portefeuille"; - /* CrowdNode */ "Transfer Error" = "Erreur de transfert"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Veuillez réessayer"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Activer le code d'accès de l'appareil"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Authentification à deux facteurs requise"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Impossible d'accepter la requête de contact"; + /* No comment provided by engineer. */ "Unable to connect" = "Impossible de se connecter"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Impossibke de récupérer les détails de contact"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Impossible de récupérer l'image. Veuillez saisir une URL d'image valide ou vérifiez votre connexion."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Impossible de récupérer votre Gravatar. Veuillez saisir un identifiant valide de Gravatar email."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Impossible de générer un nouveau QR-code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Impossible de fournir des suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Impossible d'envoyer une requête de contact"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Impossible de transmettre votre image. Veuillez réessayer."; + /* No comment provided by engineer. */ "Unknown" = "Inconnu"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "URL non compatible"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Mis à jour : %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "prix en cours de mise à jour"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Frais de mise à jour"; +"Updating Profile on Dash Network" = "Mise à jour du profil sur le réseau Dash"; + +/* No comment provided by engineer. */ +"Upgrade" = "Mise à jour"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Mise à jour vers Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Mise à jour vers DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Erreur de transmission"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Transmettre votre image, personnaliser votre identité"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Transmission de votre image au réseau"; + /* Explore Dash/Filters */ "Use gift card" = "Utiliser carte-cadeau"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Utilisé à :"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "Utilisateur (infos de récupération)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Nom d'utilisateur déjà trouvé"; + +/* No comment provided by engineer. */ +"Username available" = "Nom d'utilisateur disponible"; + /* No comment provided by engineer. */ "Username taken" = "Nom d'utilisateur déjà pris"; -/* CrowdNode Portal */ -"Validating address…" = "Validation de l'adresse..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validation du nom d'utilisateur terminée"; +"Users that matches %@ who are currently not in your contacts" = "Utilisateurs correspondant à %@ qui ne sont pas actuellement dans vos contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validation de l'adresse..."; /* No comment provided by engineer. */ "Validating username failed" = "Échec de la validation du nom d'utilisateur"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Vérifier"; +/* CrowdNode */ +"Verify your API Dash address" = "Vérifier votre adresse API Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Très élevé"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "De très petits montants en dashs seront envoyés vers et depuis CrowdNode, pour vérifier que vous êtes le propriétaire de cette adresse de portefeuille."; + /* No comment provided by engineer. */ "View All" = "Tout voir"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Voir la phrase de récupération"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Adresse de vote"; /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Patientez jusqu'à ce que la chaîne soit entièrement synchronisée, pour que nous puissions voir votre historique de transactions. Consultez le site CrowdNode pour vous connecter ou vous inscrire."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Nous avons mis à jour"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Nous détecterons automatiquement cette transaction et transférerons le même montant vers votre compte CrowdNode. Ensuite, vous pourrez faire des transferts et des retraits dans le Dash Wallet de cet appareil."; + /* Website */ "Website" = "Site web"; /* No comment provided by engineer. */ "Welcome" = "Bienvenue"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Bienvenue sur DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Quand la transaction sera confirmée, l'autre portefeuille ne contiendra plus de fonds, et il ne devra pas être réutilisé pour des raisons de sécurité."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Pourquoi vois-je toutes ces transactions ?"; +/* CrowdNode */ +"Why do you need an online account?" = "Pourquoi avez-vous besoin d'un compte en ligne ?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Pourquoi ne dois-je pas prendre de capture d'écran ?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Retrait demandé"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Souhaitez-vous accepter l'invitation ?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Souhaitez-vous faire un dépôt pour votre achat en utilisant un compte bancaire lié ?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Souhaitez-vous enregistrer les modifications faites à votre profil ?"; + /* No comment provided by engineer. */ "Yes" = "Oui"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Vous êtes sur le point d'effacer ce portefeuille de cet appareil. Les fonds associés à ce portefeuille ne peuvent être récupérés que si vous avez votre phrase de récupération."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "Vous pouvez toujours effacer l'image transmise, tant que vous avez accès à ce portefeuille."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Vous pouvez vous authentifier avec Face ID pour les paiements ci-dessous"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Vous pouvez vous authentifier avec Touch ID pour les paiements ci-dessous"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Vous pouvez modifier comment et quand vos gains de récompense vous sont payés."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Vous pouvez consulter des informations détaillées sur vos transferts, vos retraits et vos gains de récompense."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "Vous pouvez spécifier n'importe quelle URL accessible publiquement sur Internet, et les autres utilisateurs peuvent la voir sur le réseau Dash."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "Vous ne pouvez pas réclamer cette invitation car vous avez déjà un nom d'utilisateur Dash"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "Vous n'avez aucun contact pour l'instant"; + +/* Coinbase */ +"You don’t have enough balance" = "Vous n'avez pas un solde suffisant"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Vous avez dépassé la limite d'autorisation sur Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Vous avez choisi \"%@\" comme nom d'utilisateur. Votre nom d'utilisateur ne peut pas être changé une fois enregistré."; +"You have been invited by %@. Start using Dash cryptocurrency." = "Vous avez été invité(e) par %@. Commencez à utiliser la cryptomonnaie Dash."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "Vous avez choisi \"%@\" comme nom d'utilisateur. Un nom d'utilisateur ne peut pas être changé une fois enregistré."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Vous n'avez pas assez de fonds pour continuer"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Vous devez sauvegarder dans Dash Wallet votre phrase de passe"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Vous devez saisir votre code PIN pour accéder au portefeuille Dash"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "Vous avez besoin d'au moins %@ dashs pour créer une invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Vous avez besoin d'au moins %@ dans votre Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Vous avez seulement besoin de %@ pour rejoindre le groupe."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Vous devez avoir au moins %@ pour suivre la vérification CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Vous devrez également vous déconnecter du site Uphold dans votre navigateur web."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Vous aurez besoin de cette phrase de récupération pour accéder à vos fonds si cet appareil est perdu ou endommagé, ou si Dash Wallet en est désinstallé."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Vous recevrez %@ dashs sur votre Dash Wallet sur cet appareil. Veuillez noter qu'achever un transfert peut demander jusqu'à 2 à 3 minutes."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Vous recevrez automatiquement les paiements partiels, et ils seront réinvestis par défaut. Cependant, il est également simple d'opter pour des retraits automatiques pour recevoir les paiements récurrents."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Votre compte CrowdNode est en cours de création..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Votre transfert vers CrowdNode a été reçu."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Votre adresse e-mail n'est pas stockée dans le portefeuille DashPay, ni sur aucun serveur. Elle est utilisée une seule fois pour obtenir les détails de votre compte Gravatar, puis elle est oubliée."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Votre invitation par %@ a déjà été réclamée"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Votre invitation par %@ n'est pas valide"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Votre localisation est utilisée pour afficher votre position sur la carte, les distributeurs dans le rayon choisi et pour améliorer les résultats de recherche."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Votre lieu est utilisé pour montrer votre position sur la carte et les vendeurs dans les environs choisis, et pour améliorer les résultats de recherche."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Votre transaction a été envoyée et le montant devrait apparaître dans votre portefeuille sous quelques minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Votre adresse Dash principale, actuellement utilisée par votre compte CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Le solde Dash de votre compte Uphold est"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Votre transaction a été envoyée et le montant devrait apparaître dans votre portefeuille sous quelques minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Votre nom d'utilisateur %@ a bien été créé sur le réseau Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Votre nom d'utilisateur %@ est en cours de création sur le réseau Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Votre portefeuille est désormais sécurisé. Vous pouvez utiliser cette phrase de récupération à tout moment pour récupérer votre compte sur un autre appareil."; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index e5de8b278..19baf0110 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "O nama"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresa"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Otkaži"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiraj"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Konverzijska stopa nije pronađena."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Settings"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Podjeli"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index f0ec588d4..8a2967a8a 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Névjegy"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Cím"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Biztos vagy benne?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Egyenleg"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Vásárolj Dash-t az Uphold fiókoddal"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Mégse"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Megerősítés"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Megerősítés"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Másolás"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Árfolyam nem található."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash cím"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Kész"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Írd be alább a 2FA kódodat"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Hiba"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Kijelentkezés"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Kijelentkezés az Uphold-ból"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Üzemeltetői Kulcsok"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Tulajdonosi Kulcsok"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Fizetés"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Fogadva"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Beolvasás"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "A képernyőmentések láthatóak más alkalmazások és eszközök számára. Generálj egy új helyreállítási kódmondatot és tartsd titokban."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Megtekintés Uphold-on"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Beállítások"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Megosztás"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Összesen"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID összeghatár"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Tranzakció azonosító"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Utalj át Dash-t az Uphold fiókodból ebbe a tárcába"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Szavazati Kulcsok"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Az Uphold-nál lévő Dash egyenleged "; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 3d6ed7ca8..01510456c 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ tidak diizinkan mengakses Pengenal Sentuh"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Memproses Pembayaran"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Tentang"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Terima"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Menerima DASH secara langsung"; +/* CrowdNode */ +"Account Recovery" = "Pemulihan Akun"; + /* No comment provided by engineer. */ "Activity" = "Aktivitas"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Tambahkan Kontak Baru"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Alamat"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Keamanan Tingkat Lanjut"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Semua"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "dan"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Anda yakin ingin membatalkan transaksi ini?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Apakah anda yakin?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Pencarian ATM berfungsi lebih baik dengan Layanan Lokasi diaktifkan"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Saldo:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transfer antar bank"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Menjadi bagian dari Masternode Dash dengan CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Antara Dompet Dash dan Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Antara Dash Wallet dan akun Coinbase Anda"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Beli Dash dengan fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Beli Dash dengan akun Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Beli kartu hadiah dengan Dash Anda"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Beli/Jual"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Dengan menghapus perangkat ini, Anda tidak lagi memiliki akses ke dana di perangkat ini. Ini hanya boleh dilakukan jika Anda tidak lagi memiliki akses ke kata sandi Anda dan lupa kode PIN Anda."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Batalkan"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Membatalkan transaksi ini tidak membatalkan pesanan perdagangan. Anda akan segera menerima DASH di akun Coinbase Anda."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Ubah PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Periksa koneksi anda"; /* Choose your Dash username */ "Choose your" = "Pilih Anda"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Bersihkan"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Tutup"; +/* CrowdNode */ +"Close and notify when it’s done" = "Tutup dan beri tahu jika sudah selesai"; + /* No comment provided by engineer. */ "Close App" = "Tutup aplikasi"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Biaya Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Memastikan"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "konfirmasi & bayar"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Konfirmasi (%@)"; +"Confirm" = "Memastikan"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "konfirmasi (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Pastikan PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Mengkonfirmasikan"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Terhubung"; +/* CrowdNode */ +"Connected Dash address" = "Alamat Dash terhubung"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Peers yang terhubung: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Salin"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Salin Log"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Tidak dapat terhubung ke jaringan Dash, harap periksa apakah Anda terhubung ke internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Tidak dapat menemukan nilai tukar. "; + /* No comment provided by engineer. */ "Couldn't make payment" = "Tidak dapat melakukan pembayaran"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Tidak dapat mengirim pembayaran ke jaringan Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Buat Dompet Baru"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Buat Akun"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Buat akun CrowdNode online"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Buat Akun Online"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Kartu Kredit"; /* Crowdnode */ "CrowdNode Account" = "Akun CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Manfaat CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Dukungan CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode menggunakan alamat ini sebagai ID akun Anda. Anda akan kehilangan akses ke dana Anda dalam dompet ini dan akun CrowdNode jika Anda kehilangan frasa sandi yang terkait dengan alamat ini."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Batas penarikan CrowdNode"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Alamat dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash di Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dompet Dash di perangkat ini"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Biaya Peningkatan DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Tanggal"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Mata uang standar, pintasan, tentang ..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Putuskan Sambungan Akun Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Terputus"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Jarak"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Jangan mengambil tangkapan layar"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Selesai"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "misalnya johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Sebelumnya"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Stake Dash dengan mudah dan dapatkan penghasilan pasif dengan beberapa klik yang mudah."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "misalnya: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Masukkan kode 2FA Anda di bawah ini"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Kesalahan"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Kesalahan Mengupgrade"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Keluar"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Biaya dalam pembelian kripto"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Mengambil info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Akun Fiat"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Saring Transaksi"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Difilter oleh:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Temukan pengguna di Jaringan Dash"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Setoran pertama harus lebih dari %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Demi keamanan Anda, Anda telah keluar."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "dari Wallet Dash"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Dari Uphold ke Dompet Dash anda"; /* Coinbase */ "from your Coinbase account" = "dari akun Coinbase Anda"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Dapatkan hadiah dari deposit di Dash Masternodes hanya dengan 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Hasilkan kunci publik yang diperluas?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Dapatkan Penawaran"; +/* CrowdNode */ +"Get Rewards Instantly" = "Dapatkan Hadiah Instan"; + /* No comment provided by engineer. */ "Get Started" = "Memulai"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Mulai menggunakan CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Kartu ucapan"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Bantu kami meningkatkan pengalaman Anda"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Tinggi"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Riwayat"; +/* CrowdNode */ +"How CrowdNode staking works" = "Cara kerja staking CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Bagaimana cara mengonfirmasi API alamat Dash Anda"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Cara Menggunakan Kartu Hadiah"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Saya setuju dengan CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Saya telah mencatat"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Jika Anda kehilangan frasa sandi, Anda dapat memverifikasi diri dengan cara lain untuk mendapatkan kembali akses ke dana CrowdNode Anda."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Jika Anda kehilangan frasa sandi untuk dompet ini dan kehilangan perangkat ini atau mencopot Dash Wallet, Anda akan kehilangan akses ke dana Anda di CrowdNode dan dana di dalam dompet ini."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Jika Anda masih ingin menghapusnya, silakan masukkan: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Jika Anda ingin menyimpan jenis transaksi yang diklasifikasikan ulang secara manual, Anda harus mengekspor file transaksi CSV."; /* No comment provided by engineer. */ "Ignore" = "Abaikan"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Segera"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Selain biaya Coinbase yang ditampilkan, kami menyertakan Spread harga. Saat menggunakan Advanced Trade, tidak ada spread yang disertakan karena Anda berinteraksi langsung dengan buku pesanan.\n\nPasar Cryptocurrency tidak stabil, dan ini memungkinkan kami mengunci sementara harga untuk eksekusi perdagangan."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Dalam proses…"; /* No comment provided by engineer. */ "Income" = "Pemasukan"; +/* CrowdNode */ +"Information about your online account" = "Informasi tentang akun online Anda"; + /* Buy Sell Portal */ "Initializing" = "Menginisialisasi"; /* No comment provided by engineer. */ "Insufficient funds" = "Dana tidak mencukupi"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interaksi"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transfer Internal"; /* No comment provided by engineer. */ "Internally moved to" = "Pindah ke internal"; +/* CrowdNode */ +"Introducing Staking" = "Memperkenalkan Staking"; + /* Invalid transaction */ "Invalid" = "Tidak valid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Input Tidak Valid"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Permintaan pembayaran tidak valid"; /* No comment provided by engineer. */ "Invalid QR Code" = "Kode QR tidak valid"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Diperlukan waktu satu menit untuk memperbarui saldo Anda."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Diperlukan waktu hingga 10 menit untuk mentransfer Dash dari Coinbase ke Dash Wallet di perangkat ini"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Sepertinya Anda mencoba mengembalikan dompet Anda menggunakan frasa pemulihan 12 kata, namun Anda hanya memasukkan 10 kata, apakah Anda ingin memulihkan kata yang hilang secara otomatis? Ini mungkin membutuhkan waktu sekitar satu jam. Kami merekomendasikan untuk mencolokkan perangkat Anda."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Sepertinya Anda mencoba mengembalikan dompet Anda menggunakan frasa pemulihan 12 kata, namun Anda hanya memasukkan 11 kata, apakah Anda ingin memulihkan kata yang hilang secara otomatis?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "bergabunglah dengan evolusi"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Bergabung ke pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Pelajari lebih lanjut..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Beri tahu saya jika sudah selesai"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "huruf dan angka saja"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Tautkan akun Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Hubungkan Akun yang Sudah Ada"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Tautkan Akun CrowdNode yang Ada"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Masuk ke CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Keluar"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Keluar dari Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Rendah"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Kelola Izin GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Peta"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Pembaruan Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maksimum %Id karakter"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Sedang"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Anggota bebas untuk meninggalkan pool dan paling sering dapat segera pergi."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Pencarian pedagang bekerja lebih baik dengan Layanan Lokasi diaktifkan."; -/* Validation rule */ -"Minimum 3 characters" = "Minimal 3 karakter"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Lebih"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Kontrol lebih lanjut"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Pindah dari"; /* No comment provided by engineer. */ "Moved to Address" = "Terpindah ke Alamat"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Kontak saya"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Baru"; +/* CrowdNode */ +"New CrowdNode Account" = "Akun CrowdNode Baru"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Perangkat NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Tidak ada pengguna aktif"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Tidak ada metode pembayaran"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "bukan alamat dash yang valid"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tidak semua toko menerima DASH secara langsung, tetapi Anda dapat membeli kartu hadiah dengan Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Setelah %@ menerima permintaan Anda, Anda dapat Membayar Langsung ke Nama Pengguna"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Pedagang online"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Kunci Operator"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Pratinjau Pesanan"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Kunci Pemilik"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Bayar"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Bayar Langsung ke Nama Pengguna"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Bayar dengan"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipe Pembayaran"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Opsi Pembayaran"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaksi"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN selalu diperlukan untuk melakukan pembayaran"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Silakan periksa koneksi jaringan Anda"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Silakan masukkan PIN untuk meningkatkan dompet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Harap dicatat bahwa email tidak disimpan oleh Dompet Dash dan hanya dikirim ke CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Harap diperhatikan, Anda tidak akan dapat menarik dana Anda dari CowdNode ke dompet ini sampai Anda menambah saldo ke %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Silakan coba pindai ulang"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Silahkan tunggu"; /* No comment provided by engineer. */ "Please wait" = "Silahkan tunggu"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Harap tunggu hingga dompet sepenuhnya disinkronkan sebelum mengekspor riwayat transaksi Anda"; /* No comment provided by engineer. */ "Please write it down" = "Tolong catat"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Lindungi tabungan Anda"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Alamat Penyedia"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Beli"; /* No comment provided by engineer. */ "Quick Receive" = "Terima Cepat"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Kuorum divalidasi: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Terima langsung ke Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Terima bagian hadiah Anda setiap hari."; + /* Received transaction */ "Received" = "Diterima"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Diterima dari"; +/* CrowdNode */ +"Receiving rewards" = "Menerima imbalan"; + /* No comment provided by engineer. */ "Recover" = "Pemulihan"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Laporkan masalah"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Pindai ulang"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Ulas & beri nilai aplikasi"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Hadiah"; /* No comment provided by engineer. */ "Rewards" = "Hadiah"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Pindai"; /* No comment provided by engineer. */ "Scan Private Key" = "Pindai Kunci Pribadi"; +/* No comment provided by engineer. */ +"Scan QR" = "Pindai QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Pindai kode QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Tangkapan layar terlihat oleh aplikasi dan perangkat lain. Hasilkan frasa pemulihan baru dan jaga kerahasiaannya."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Cari kontak"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Mencari nama pengguna %@ di jaringan Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Keamanan"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Lihat di Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Pilih koin"; /* Buy Sell Dash */ "Select a service" = "Pilih layanan"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Pilih koin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Kirim %@ dari alamat Dash utama yang saat ini Anda gunakan untuk akun CrowdNode Anda"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Kirim Permintaan Kontak"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Kirim Laporan"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Kirim ke"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Mengirim"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Mengirim ke"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Tetapkan PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "pengaturan"; /* No comment provided by engineer. */ "Setup Wallet" = "Siapkan Dompet"; +/* CrowdNode */ +"Share" = "Bagikan"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Berbelanja dengan DASH di lebih dari 150 ribu pedagang"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Tampilkan kunci masternode"; +/* CrowdNode */ +"Show QR" = "Tunjukkan QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Tampilkan Frasa pemulihan"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Dukungan"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Menyinkronkan…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategori Pajak"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Rantai sedang menyinkronkan…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Kode tidak benar. Silakan periksa dan coba lagi!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash berhasil disimpan ke akun Coinbase Anda. Namun terjadi masalah saat mentransfernya ke Dash Wallet di perangkat ini."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Jumlah minimum yang dapat Anda kirim adalah %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Tidak ada pemberitahuan baru"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Tidak ada pengguna yang cocok dengan nama %@ di kontak Anda"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Terjadi kesalahan saat mendapatkan alamat baru"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "QR ini sudah berisi permintaan pembayaran untuk %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Ini mewakili Persentase Hasil Tahunan saat ini dari Masternode penuh dikurangi biaya CrowdNode 15%. Ini bukan tingkat pengembalian yang dijamin dan dapat naik atau turun berdasarkan ukuran CrowdNode pool dan harga Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Dompet ini tidak kosong atau sinkronisasi belum selesai, Anda tidak dapat menghapusnya tanpa frasa pemulihan"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "ke Dash Wallet di perangkat ini"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Untuk memulai staking, buat akun di CrowdNode atau hubungkan ke akun yang sudah ada."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "ke alamat Dash yang ditunjuk untuk akun CrowdNode Anda di Dash Wallet pada perangkat ini"; + /* No comment provided by engineer. */ "Tools" = "Alat"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "ID sentuhan terbatas"; +/* CrowdNode */ +"Transaction History" = "Riwayat Transaksi"; + /* No comment provided by engineer. */ "Transaction id" = "ID transaksi"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash dari akun Uphold Anda ke dompet ini"; - /* CrowdNode */ "Transfer Error" = "Kesalahan Transfer"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Coba lagi"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Aktifkan kode sandi perangkat"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Autentikasi dua faktor diperlukan"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Tidak dapat terhubung"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Tidak dapat mendapat kode QR baru"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Tidak diketahui"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "URL tidak didukung"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Diperbarui: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Memperbarui Harga"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Biaya peningkatan"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Meningkatkan ke DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Gunakan kartu hadiah"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Nama pengguna telah diambil"; -/* CrowdNode Portal */ -"Validating address…" = "Memvalidasi alamat…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Selesai memvalidasi nama pengguna"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Memvalidasi alamat…"; /* No comment provided by engineer. */ "Validating username failed" = "Validasi nama pengguna gagal"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Memeriksa"; +/* CrowdNode */ +"Verify your API Dash address" = "Verifikasi alamat API Dash Anda"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Sangat tinggi"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Jumlah Dash yang sangat kecil akan dikirim ke dan dari CrowdNode untuk memverifikasi bahwa Anda adalah pemilik alamat dompet ini."; + /* No comment provided by engineer. */ "View All" = "Lihat semua"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Lihat frasa pemulihan"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Alamat pemungutan suara"; /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Tunggu hingga rantai disinkronkan sepenuhnya, sehingga kami dapat meninjau riwayat transaksi Anda. Kunjungi situs web CrowdNode untuk masuk atau mendaftar."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Kami meningkatkan"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Kami akan secara otomatis mendeteksi transaksi ini dan mentransfer jumlah yang sama ke akun CrowdNode Anda. Setelah itu Anda akan dapat melakukan penyetoran dan penarikan di Dash Wallet pada perangkat ini."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Selamat Datang"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Ketika transaksi dikonfirmasi, dompet lainnya tidak akan berharga dan tidak boleh digunakan kembali untuk alasan keamanan."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Mengapa saya melihat semua transaksi ini?"; +/* CrowdNode */ +"Why do you need an online account?" = "Mengapa Anda membutuhkan akun online?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Mengapa saya harus tidak mengambil tangkapan layar?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Penarikan diminta"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Ya"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Anda akan menghapus dompet ini dari perangkat ini. Dana yang terkait dengan dompet ini hanya dapat diambil jika Anda memiliki frasa pemulihan."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Anda dapat mengautentikasi dengan ID Wajah untuk pembayaran di bawah"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Anda dapat mengautentikasi dengan Touch ID untuk pembayaran di bawah ini"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Anda dapat mengubah bagaimana / kapan penghasilan hadiah Anda dibayarkan kepada Anda."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Anda dapat melihat informasi terperinci tentang setoran, penarikan, dan hadiah penghasilan Anda."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Anda tidak memiliki cukup saldo"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Anda melampaui batas otorisasi di Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Anda telah memilih \"%@\" sebagai nama pengguna anda. Nama pengguna anda tidak dapat diganti setelah terdaftar."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Anda tidak memiliki cukup dana untuk melanjutkan"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Anda harus mencadangkan frasa sandi Anda di Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Anda harus memasukkan PIN untuk masuk ke Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Anda membutuhkan setidaknya %@ dash di Wallet Anda"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Anda hanya perlu %@ bergabung dengan pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Anda setidaknya harus %@ untuk melanjutkan verifikasi CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Anda juga harus keluar dari situs web Uphold menggunakan browser Anda"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Anda akan menerima %@ Dash di Wallet Anda di perangkat ini. Perlu diketahui bahwa butuh waktu hingga 2-3 menit untuk menyelesaikan transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Anda akan menerima pembayaran pecahan secara otomatis dan secara default akan diinvestasikan kembali, namun,mudah juga untuk mengatur penarikan otomatis untuk menerima pembayaran berulang."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Akun CrowdNode Anda sedang membuat…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Setoran Anda ke CrowdNode diterima."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Lokasi Anda digunakan untuk menunjukkan posisi Anda di peta, ATM di redius yang dipilih, dan meningkatkan hasil pencarian."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Lokasi Anda digunakan untuk menunjukkan posisi Anda di peta, pedagang di radius yang dipilih, dan meningkatkan hasil pencarian."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transaksi Anda telah dikirim dan jumlahnya akan muncul di dompet Anda dalam beberapa menit."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Alamat Dash utama Anda yang saat ini digunakan untuk akun CrowdNode Anda"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Saldo Dash akun Uphold Anda adalah"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transaksi Anda telah dikirim dan jumlahnya akan muncul di dompet Anda dalam beberapa menit."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Nama pengguna anda %@ telah sukses dibuat di jaringan Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Nama pengguna anda %@ sedang dibuat di Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Dompet Anda aman sekarang. Anda dapat menggunakan frasa pemulihan kapan saja untuk memulihkan akun di perangkat lain."; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 520f9efbb..7ce17740a 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ non hai dato il permesso al sensore biometrico digitale"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Caratteri\n "; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Pagamento in elaborazione"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "A proposito di"; +/* No comment provided by engineer. */ +"About me" = "Informazioni su di me"; + /* No comment provided by engineer. */ "Accept" = "Accetta"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accetta DASH direttamente"; +/* CrowdNode */ +"Account Recovery" = "Recupero dell'account"; + /* No comment provided by engineer. */ "Activity" = "Attività"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Aggiungi un nuovo contatto"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Aggiungi i tuoi Amici e Familiari"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Indirizzo"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Sicurezza Avanzata"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Acconsento"; + /* No comment provided by engineer. */ "All" = "Tutte"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "e"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Sei sicuro di voler annullare questa transazione?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Sei sicuro??"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Poiché la maggior parte delle persone non ha esattamente 1000 Dash a portata di mano, CrowdNode ha creato un servizio in cui, mettendo in comune i depositi dei membri, è possibile ottenere i vantaggi di possedere un Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La ricerca di un ATM funziona meglio con i servizi di localizzazione attivati"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Saldo su CrowdNode"; /* CrowdNode */ "Balance: " = "Bilancio:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bonifico bancario"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Entra a far parte di un Dash Masternode con CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Tra %1$ld e %2$ld caratteri\n "; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Tra Dash Wallet e Coinbase."; +"Between Dash Wallet and Coinbase" = "Tra Dash Wallet e Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Tra Dash Wallet e il tuo account Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Acquista Dash con denaro fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Acquista Dash con account Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Acquista Dash · Nessun account necessario"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Acquista carte regalo con Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Compra/Vendi"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Cancellando questo dispositivo non avrai più accesso ai fondi su questo dispositivo. Questo dovrebbe essere fatto solo se non hai più accesso alla tua \"passphrase\" e hai anche dimenticato il tuo codice PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancella"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "L'annullamento di questa transazione non annulla l'ordine commerciale. A breve riceverai DASH sul tuo account Coinbase."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Modificare PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Controlla la connessione"; /* Choose your Dash username */ "Choose your" = "Scegli il tuo"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Scegli il tuo Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Rivendicato"; + /* No comment provided by engineer. */ "Clear" = "Rimuovere"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Chiudi"; +/* CrowdNode */ +"Close and notify when it’s done" = "Chiudi e avvisa quando al termine"; + /* No comment provided by engineer. */ "Close App" = "Chiudi app"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Commissione Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Conferma"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Conferma e paga"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confermare (%@)"; +"Confirm" = "Conferma"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confermare (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Conferma PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "In Conferma"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connesso"; +/* CrowdNode */ +"Connected Dash address" = "Indirizzo Dash connesso"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Peers connessi: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copia"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copia il Link dell'Invito"; + /* No comment provided by engineer. */ "Copy Logs" = "Copia i Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Impossibile connettersi alla rete Dash, controlla di essere connesso a Internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Impossibile trovare il tasso di cambio."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Impossibile effettuare il pagamento"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Impossibile trasferire il pagamento alla rete Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Crea un nuovo Invito"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Crea un nuovo Invito"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Crea un nuovo portafoglio"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Crea un nome utente, aggiungi i tuoi amici."; + /* CrowdNode */ "Create Account" = "Crea un Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Crea un account CrowdNode online"; + +/* No comment provided by engineer. */ +"Create invitation" = "Crea invito"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Crea un account online"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Crea il tuo Username, trova amici e familiari con i loro Usernames e aggiungili ai tuoi contatti"; + /* Coinbase/Payment Methods */ "Credit Card" = "Carta di Credito"; /* Crowdnode */ "CrowdNode Account" = "Account CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Vantaggi di CrowNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Supporto CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode utilizza questo indirizzo come ID account. Perderai l'accesso ai tuoi fondi all'interno di questo portafoglio e al tuo account CrowdNode se perdi la passphrase associata a questo indirizzo."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Limiti di prelievo CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Indirizzo Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash su Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Bilancia del saldo su Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "I pagamneti in Dash non possono essere inferiori a %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet su questo dispositivo"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "Invito DashPay"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Commissione di aggiornamento DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Valuta predefinita, scorciatoie, riguardo ..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnetti l'account Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnettere l'account Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnesso"; +/* No comment provided by engineer. */ +"Display Name" = "Nome da visualizzare"; + /* Explore Dash: Filters */ "Distance" = "Distanza"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Non scattare screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Fatto"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "esempio: johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Ogni invito sarà finanziato con questo importo in modo che il destinatario possa creare rapidamente il proprio Username Nella Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Prima"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Vincola facilmente Dash e guadagna entrate passive con pochi semplici clic."; +/* No comment provided by engineer. */ +"Edit Profile" = "Modifica Profilo"; + +/* Invitation tag placeholder */ +"eg: Dad" = "es: Papà"; + /* Input username textfield placeholder */ "eg: johndoe" = "es: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Inserisci il tuo codice 2FA di seguito"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Inserisci il tuo ID Email Gravatar"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Errore"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Errore durante l'aggiornamento del tuo profilo "; + /* No comment provided by engineer. */ "Error Upgrading" = "Errore durante l'aggiornamento"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Esci"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Commissioni negli acquisti di criptovalute"; +/* No comment provided by engineer. */ +"Fetching Image" = "Recupero dell'immagine"; + /* Explore Dash */ "Fetching Info" = "Informazioni sul recupero"; /* Coinbase/Payment Methods */ "Fiat Account" = "Conto Fiat"; +/* No comment provided by engineer. */ +"Filter" = "Filtro"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtra Transazioni"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtra per:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Trova un utente su Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Trova commercianti che accettano DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Trova i commercianti che accettano Dash, dove acquistarlo e come guadagnarci."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Trova i commercianti che accettano Dash come pagamento."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Il primo deposito dovrebbe essere superiore a %@"; +/* CrowdNode */ +"First minimum deposit" = "Primo deposito minimo"; + /* Coinbase */ "For your security, you have been signed out." = "Per la tua sicurezza, sei stato disconnesso."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "da Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Da Uphold a Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Da Uphold al tuo portafoglio Dash"; /* Coinbase */ "from your Coinbase account" = "dal tuo conto Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ottieni ricompense dai depositi in Dash Masternodes con un minimo di 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generare chiavi pubbliche estese?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Ottieni preventivo"; +/* CrowdNode */ +"Get Rewards Instantly" = "Ottieni premi all'istante"; + /* No comment provided by engineer. */ "Get Started" = "Iniziare"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Ottieni il tuo Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Iniziare con CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Aiutaci a migliorare raccontaci tua esperienza"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Ecco un indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; + /* adjective, security level */ "High" = "Alto"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Storia"; +/* CrowdNode */ +"How CrowdNode staking works" = "Come funziona lo staking di CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Come confermare il tuo indirizzo API Dash"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Come utilizzare una carta regalo"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "ID Keys del nodo Evolution"; /* No comment provided by engineer. */ "I Accept" = "Accetto"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Accetto CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "L'ho scritto"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Se dovessi perdere la passphrase, puoi verificarti con altri mezzi per riottenere l'accesso ai tuoi fondi CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Se perdi la passphrase per questo portafoglio e perdi questo dispositivo o disinstalli Dash Wallet, perderai l'accesso ai tuoi fondi su CrowdNode e ai fondi all'interno di questo portafoglio."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Se desideri veramente cancellarlo, perfavore inserisci: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Se desideri salvare i tipi riclassificati manualmente per le transazioni, devi esportare un file di transazione CSV."; /* No comment provided by engineer. */ "Ignore" = "Ignora"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "L'immagine caricata può essere visualizzata pubblicamente da chiunque."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "L'URL dell'immagine non può essere più lungo di %ld caratteri."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Privacy Policy delle immagini"; + /* No comment provided by engineer. */ "Immediately" = "Immediatamente"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Oltre alla commissione Coinbase visualizzata, includiamo uno spread nel prezzo. Quando si utilizza Advanced Trade, non è incluso nessuno spread perché si interagisce direttamente con il portafoglio ordini.\n\nI mercati delle criptovalute sono volatili e questo ci consente di bloccare temporaneamente un prezzo per l'esecuzione degli scambi."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In caso di prelievi maggiori CrowdNode pagherà i prelievi entro due settimane. Ciò è dovuto ai loro protocolli di sicurezza e molto spesso verrà gestito molto più velocemente."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Processo in corso..."; /* No comment provided by engineer. */ "Income" = "Reddito"; +/* CrowdNode */ +"Information about your online account" = "Informazioni sul tuo account online"; + /* Buy Sell Portal */ "Initializing" = "Inizializzazione"; /* No comment provided by engineer. */ "Insufficient funds" = "Fondi insufficenti"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Saldo del portafoglio insufficiente"; + /* Coinbase/Payment Methods */ "Interac" = "Interazione"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Trasferimento Interno"; /* No comment provided by engineer. */ "Internally moved to" = "Trasferito internamente a"; +/* CrowdNode */ +"Introducing Staking" = "Introduzione allo Staking"; + /* Invalid transaction */ "Invalid" = "Non valido"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Importo non valido"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Indirizzo Dash non valido"; /* CrowdNode Online */ "Invalid Email" = "E-mail non valida"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "inserimento non valido"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invio non valido"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Richiesta di pagamento invalida"; /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code Non Valido"; +/* No comment provided by engineer. */ +"Invitation" = "Invito"; + +/* Invitation #3 */ +"Invitation %ld" = "Invito %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invito già rivendicato"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invito creato con successo"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Commissione di invito"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Cronologia delle transazioni"; + +/* No comment provided by engineer. */ +"Invite" = "Invita"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invita qualcuno ad unirsi alla Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invita la tua famiglia, trova i tuoi amici cercando i loro Usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invita i tuoi amici e la tua famiglia"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invita i tuoi amici e la tua famiglia ad unirsi alla Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invita i tuoi amici e la tua famiglia nella Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "L'aggiornamento del saldo può richiedere un minuto."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Potrebbero essere necessari fino a 10 minuti per trasferire Dash da Coinbase a Dash Wallet su questo dispositivo"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Pare che tu stia tentando di rigenerare il tuo portafoglio utilizzando una frase di recupero con 12 parole, tuttavia ne hai inserite solamente 10, vorresti recuperare automaticamente le parole mancanti? Ciò richiederebbe all'incirca un'ora. Ti consigliamo di tenere in carica il tuo dispositivo."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Pare che tu stia tentando di rigenerare il tuo portafoglio utilizzando una frase di recupero con 12 parole, tuttavia ne hai inserite solamente 11, vorresti recuperare automaticamente la parole mancante?"; +/* No comment provided by engineer. */ +"Join" = "Unisciti"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Unisciti a DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Aderisci a Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Unisciti ora"; + +/* CrowdNode */ +"Joining the pool" = "Unisciti alla pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "ID chiave"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Per saperne di più..."; +/* CrowdNode */ +"Leaving the pool" = "Esci dal \"pool\""; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Fammi sapere quando è fatto"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Consenti ai tuoi amici e familiari di unirsi a Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Consenti ai tuoi amici e familiari di unirsi alla Dash Network. Invitali nel mondo del social banking."; + /* Validation rule */ -"Letters and numbers only" = "Solo numeri e lettere"; +"Letters, numbers and hyphens only" = "Solo lettere, numeri e trattini"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Iniziamo"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Collega l'account Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Collega account esistente"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Collega l'account CrowdNode esistente"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Accedi a CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Esci"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Esci da Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Basso"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Gestisci l'autorizzazione GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mappa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Chiavi Masternode"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aggiornamento Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Massimo"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Numero massimo di caratteri %ld"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Magari più tardi"; /* adjective, security level */ "Medium" = "Medio"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "I membri sono liberi di lasciare la pool e nella maggior parte dei casi possono andarsene immediatamente."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La ricerca commerciante funziona meglio con i servizi di localizzazione attivati."; -/* Validation rule */ -"Minimum 3 characters" = "Minimo 3 caratteri"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Di Più"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Più Controllo"; +/* No comment provided by engineer. */ +"More Suggestions" = "Altri suggerimenti"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Sposta e ingrandisci la tua foto per trovare l'adattamento perfetto"; + /* No comment provided by engineer. */ "Moved from" = "Trasferito da"; /* No comment provided by engineer. */ "Moved to Address" = "Spostato in Indirizzo"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Deve iniziare e terminare con una lettera o un numero"; + /* No comment provided by engineer. */ "My Contacts" = "I miei contatti"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nuovo"; +/* CrowdNode */ +"New CrowdNode Account" = "Nuovo account CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Dispositivo NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Nessun utente attivo"; +/* Coinbase */ +"No cash account found" = "Nessun conto in contanti trovato"; + /* Coinbase/Buy Dash */ "No payment methods" = "Nessun metodo di pagamento"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Non un indirizzo Dash valido"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Non tutti i negozi accettano direttamente DASH, ma puoi acquistare una carta regalo con Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Una volta che %@ accetta la tua richiesta, puoi pagare direttamente al nome utente"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Commerciante Online"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Chiavi operatore"; +/* No comment provided by engineer. */ +"or" = "oppure"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Anteprima dell'ordine"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Chiavi proprietario"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Incolla l'URL dell'immagine"; + /* No comment provided by engineer. */ "Pay" = "Paga"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Paga direttamente all'username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Paga allo Username. Niente più indirizzi alfanumerici"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Paga con"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo di Pagamento"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "I pagamenti effettuati direttamente agli indirizzi non verranno mantenuti in attività."; + +/* CrowdNode */ +"Payout Options" = "Opzioni di pagamento"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transazione"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalizza"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Il PIN è sempre richiesto per effettuare un pagamento"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Si prega di controllare la connessione di rete"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Inserisci un ID Email Gravatar valido."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Inserisci un URL immagine valido."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Inserisci il PIN per aggiornare il portafoglio"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Tieni presente che l'Email non viene salvata da Dash Wallet e viene inviata solo a CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Tieni presente che non sarai in grado di prelevare i tuoi fondi da CowdNode a questo portafoglio fino a quando non aumenterai il tuo saldo a %@ Dash"; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Per favore, ritenta lo scan"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Attendere prego"; /* No comment provided by engineer. */ "Please wait" = "attendere prego"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Attendi che il portafoglio sia completamente sincronizzato prima di esportare la cronologia delle transazioni"; /* No comment provided by engineer. */ "Please write it down" = "Per favore scrivilo di seguito"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Anteprima dell'invito"; + /* No comment provided by engineer. */ "Previously used at: " = "Utilizzato in precedenza presso:"; +/* CrowdNode */ +"Primary Dash address" = "Indirizzo Dash primario"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Chiavi private/pubbliche (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Proteggi i tuoi risparmi"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Indirizzo del Provider"; @@ -1194,7 +1644,10 @@ "Public key" = "Chiave pubblica"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Chiave pubblica (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "URL pubblico"; /* Coinbase/Buy Dash */ "Purchase" = "Acquisto"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Rapido Ricevi"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorum validati: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Ricevi direttamente in Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Ricevi la tua quota di premi ogni giorno."; + /* Received transaction */ "Received" = "Ricevuto"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Ricevuto da"; +/* CrowdNode */ +"Receiving rewards" = "Ricevi le ricompense"; + /* No comment provided by engineer. */ "Recover" = "Recupera"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Segnala un problema"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Riscansiona"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Recensisci & Valuta l'app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Ricompensa"; /* No comment provided by engineer. */ "Rewards" = "Ricompense"; +/* No comment provided by engineer. */ +"Save" = "Salva"; + +/* No comment provided by engineer. */ +"Save Changes" = "Salva le modifiche"; + /* No comment provided by engineer. */ "Scan" = "Scansiona"; /* No comment provided by engineer. */ "Scan Private Key" = "Scansione Chiave Privata"; +/* No comment provided by engineer. */ +"Scan QR" = "Scansiona QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scansiona il codice QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Gli screenshot sono visibili ad altri dispositivi e applicazioni. Genera una nuova frase di recupero e tienila segreta."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Cerca un contatto"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Ricerca del nome utente %@ nel network di Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Proteggi il tuo Wallet"; + /* No comment provided by engineer. */ "Security" = "Sicurezza"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Vedi su Uphold"; +/* No comment provided by engineer. */ +"Select" = "Seleziona"; + /* Coinbase */ "Select a coin" = "Seleziona una coin"; /* Buy Sell Dash */ "Select a service" = "Seleziona un servizio"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Seleziona dalla Galleria"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Seleziona una coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Invia %@ dal tuo indirizzo Dash principale registrato e validato nel tuo account CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Invia di nuovo"; + /* No comment provided by engineer. */ "Send Contact Request" = "Invia richiesta di contatto"; +/* No comment provided by engineer. */ +"Send Invitation" = "Invia Invito"; + /* Coinbase CrowdNode */ "Send Report" = "Spedisci il rapporto"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Manda a"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Invia ad un Contatto"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Invia a indirizzo copiato o codice QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Invio in corso"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Invio della richiesta di Contatto"; + /* No comment provided by engineer. */ "Sending to" = "Invio a"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Imposta PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Imposta il tuo PIN"; + /* No comment provided by engineer. */ "Settings" = "Impostazioni"; /* No comment provided by engineer. */ "Setup Wallet" = "Imposta il portafoglio"; +/* CrowdNode */ +"Share" = "Condividi"; + /* Receive screen */ "Share address" = "Condividi indirizzo"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Fai acquisti con DASH presso oltre 150.000 commercianti"; - /* Enter Address Screen */ "Show content in the clipboard" = "Mostra il contenuto negli appunti"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Mostra le chiavi masternode"; +/* CrowdNode */ +"Show QR" = "Mostra QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostra la frase di recupero"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Supporto"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Sincronizzazione..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag per riferimento"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Scatta una foto dalla Fotocamera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tocca l'indirizzo dagli appunti per incollarlo"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoria fiscale"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "La catena si sta sincronizzando..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Il codice non è corretto. Si prega di verificare e riprovare!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "La rete Dash è guidata da una serie di Masternode che sono una parte essenziale per facilitare i pagamenti."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Il Dash è stato depositato con successo sul tuo conto Coinbase. Ma si è verificato un problema durante il trasferimento a Dash Wallet su questo dispositivo."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "L'immagine che selezioni verrà caricata su Imgur in forma anonima."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "L'importo minimo che puoi inviare è%@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "loro (Recupero delle informazioni)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Non ci sono nuove notifiche"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Non ci sono utenti che corrispondono al nome %@ nei tuoi contatti"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Si è verificato un errore durante l'acquisizione del nuovo indirizzo"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Questo QR contiene già la richiesta di pagamento per %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Questo rappresenta l'attuale rendimento percentuale annuo di un Masternode completo meno la commissione CrowdNode del 15%. Non è un tasso di rendimento garantito e può aumentare o diminuire in base alle dimensioni delle pool di CrowdNode e al prezzo di Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Questo portafoglio non è vuoto o la sincronizzazione non è terminata, non puoi cancellarlo senza la frase di recupero"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "a Dash Wallet su questo dispositivo"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Per iniziare a fare staking, crea un account su CrowdNode o connettiti a uno esistente."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "all'indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; + /* No comment provided by engineer. */ "Tools" = "Strumenti"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Totale"; /* No comment provided by engineer. */ "Touch ID limit" = "Limite \"Touch ID\""; +/* CrowdNode */ +"Transaction History" = "Cronologia delle transazioni"; + /* No comment provided by engineer. */ "Transaction id" = "id Transazione"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Trasferisci Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Trasferisci Dash dal tuo account Uphold a questo portafoglio"; - /* CrowdNode */ "Transfer Error" = "Errore di trasferimento"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Riprova"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Attiva codice d'accesso dispositivo"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "È richiesta l'autenticazione a due fattori"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Impossibile accettare la richiesta di contatto"; + /* No comment provided by engineer. */ "Unable to connect" = "Impossibile connetersi"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Impossibile recuperare i dettagli di contatto"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Impossibile recuperare l'immagine. Inserisci un URL immagine valido o controlla la tua connessione."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Impossibile recuperare il tuo Gravatar. Inserisci un ID Email Gravatar valido."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Impossibile ottenere un nuovo codice QR"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Impossibile fornire suggerimenti"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Impossibile inviare richiesta di contatto"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Impossibile caricare la tua foto. Per favore riprova."; + /* No comment provided by engineer. */ "Unknown" = "Sconosciuto"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "URL non supportato"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aggiornato %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Prezzo in aggiornamento"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Commissione di aggiornamento"; +"Updating Profile on Dash Network" = "Aggiornamento del profilo sulla Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Aggiorna "; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Passa a Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Aggiornamento a DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Errore di caricamento"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Carica la tua foto, personalizza la tua identità"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Caricamento della tua foto sulla rete"; + /* Explore Dash/Filters */ "Use gift card" = "Usa la gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Usato a:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "Utente (recupero delle informazioni)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username già trovato"; + +/* No comment provided by engineer. */ +"Username available" = "Username disponibile"; + /* No comment provided by engineer. */ "Username taken" = "Username già in uso"; -/* CrowdNode Portal */ -"Validating address…" = "Indirizzo di convalida..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Convalida del nome utente completata"; +"Users that matches %@ who are currently not in your contacts" = "Utenti corrispondenti %@ che attualmente non sono nei tuoi contatti"; + +/* CrowdNode Portal */ +"Validating address…" = "Indirizzo di convalida..."; /* No comment provided by engineer. */ "Validating username failed" = "Convalida del nome utente non riuscita"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verifica"; +/* CrowdNode */ +"Verify your API Dash address" = "Verifica il tuo indirizzo API Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Molto Alto"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Piccole quantità di Dash verranno inviate da e verso CrowdNode per verificare che tu sia il proprietario di questo indirizzo di portafoglio."; + /* No comment provided by engineer. */ "View All" = "Mostra tutto"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Visualizza la frase di recupero"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Indirizzo di voto"; /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Attendi fino a quando la catena non è completamente sincronizzata, così possiamo rivedere la cronologia delle transazioni. Visita il sito Web CrowdNode per accedere o registrarti."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Abbiamo aggiornato"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Rileveremo automaticamente questa transazione e trasferiremo lo stesso importo sul tuo account CrowdNode. Dopodiché sarai in grado di effettuare depositi e prelievi in ​​Dash Wallet su questo dispositivo."; + /* Website */ "Website" = "Sito Web"; /* No comment provided by engineer. */ "Welcome" = "Benvenuto"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Benvenuto su DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "A transazione confermata, il portafoglio di origine sarà privo di valore e non dovrebbe essere riutilizzato per motivi di sicurezza."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Perché vedo tutte queste transazioni?"; +/* CrowdNode */ +"Why do you need an online account?" = "Perché hai bisogno di un account online?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Perché non devo scattare screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Ritiro richiesto"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Vuoi accettare l'invito?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Desideri effettuare un deposito per il tuo acquisto utilizzando un conto bancario collegato?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Vuoi salvare le modifiche che hai apportato al tuo profilo?"; + /* No comment provided by engineer. */ "Yes" = "Si"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Stai per cancellare il portafoglio da questo dispositivo. Tutti i fondi associati ad esso potranno essere recuperati solo se si dispone della frase di recupero."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "Puoi sempre eliminare l'immagine caricata, purché tu abbia accesso a questo Wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Puoi effettuare l'autenticazione con Face ID per i pagamenti di seguito"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Puoi effettuare l'autenticazione con Touch ID per i pagamenti di seguito"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Puoi modificare come/quando ti vengono pagati i guadagni del premio."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Puoi visualizzare informazioni dettagliate sui tuoi depositi, prelievi e guadagni premio."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "Puoi specificare qualsiasi URL pubblicamente disponibile su Internet in modo che altri utenti possano vederlo sulla Dash Network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "Non puoi rivendicare questo invito poiché hai già uno Username Dash"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "Non hai nessun contatto al momento"; + +/* Coinbase */ +"You don’t have enough balance" = "Non hai Saldo sufficiente"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Hai superato il limite di autorizzazione su Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Hai scelto \"%@\" come nome utente. Il tuo nome utente non può essere modificato una volta registrato."; +"You have been invited by %@. Start using Dash cryptocurrency." = "Sei stato invitato da %@. Inizia ad usare la criptovaluta Dash."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "Hai scelto \"%@\" come Username. Lo Username non può essere modificato una volta registrato."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Non hai fondi sufficienti per procedere"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Devi eseguire il backup della tua passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Devi inserire il tuo PIN per accedere a Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "È necessario almeno %@ Dash per creare un invito"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Ti serve almeno %@ sul tuo portafoglio Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Hai solo bisogno di %@ per poter entrare nel pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Dovresti avere almeno %@ per procedere con la verifica in CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Sarà inoltre necessario disconnettersi dal sito Web di Uphold utilizzando il browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Avrai bisogno di questa frase di recupero per accedere ai tuoi fondi se questo dispositivo viene smarrito, danneggiato o se Dash Wallet viene disinstallato da questo dispositivo."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Riceverai %@ Dash sul tuo portafoglio in questo dispositivo. Tieni presente che possono essere necessari fino a 2-3 minuti per completare un trasferimento."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Riceverai automaticamente pagamenti frazionari e per impostazione predefinita verranno reinvestiti, tuttavia, è anche facile impostare prelievi automatici per ricevere pagamenti ricorrenti."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Il tuo account CrowdNode sta creando..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Il tuo deposito a CrowdNode è stato ricevuto."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "La tua Email non è memorizzata nel Wallet DashPay né su alcun server. Viene utilizzato una volta per ottenere i dettagli del tuo account Gravatar e quindi scartato."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Il tuo invito da %@ è già stato rivendicato"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Il tuo invito da %@ non è valido"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "La tua posizione viene utilizzata per mostrare la tua posizione sulla mappa, e gli ATM nel redius selezionato e migliorare cosi i risultati della ricerca."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "La tua posizione viene utilizzata per mostrare la tua posizione sulla mappa, i commercianti nel redius selezionato e per migliorare i risultati di ricerca."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "La tua transazione è stata inviata e l'importo dovrebbe essere visualizzato nel tuo portafoglio entro pochi minuti."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Il tuo indirizzo Dash principale che utilizzi attualmente per il tuo account CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Il tuoil bilancio Dash nell'account Uphold è "; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "La tua transazione è stata inviata e l'importo dovrebbe essere visualizzato nel tuo portafoglio entro pochi minuti."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Il tuo nome utente %@ è stato creato con successo sulla rete Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Il tuo nome utente %@ è in fase di creazione sulla Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Il tuo wallet ora è protetto. Puoi utilizzare la frase di recupero in qualsiasi momento per ripristinare il tuo account su un altro dispositivo."; diff --git a/DashWallet/it.lproj/Localizable.stringsdict b/DashWallet/it.lproj/Localizable.stringsdict index a2bee6473..b487336ab 100644 --- a/DashWallet/it.lproj/Localizable.stringsdict +++ b/DashWallet/it.lproj/Localizable.stringsdict @@ -35,7 +35,7 @@ many %d mercanti in %@ other - %d merchanti in %@ + %d commercianti in %@ %d merchant(s) @@ -53,7 +53,7 @@ many %d mercanti other - %d mercanti + %d commercianti %d transaction(s) diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index dd90af114..f5f6ea866 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@はTouch IDへのアクセスが許可されていません"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) 支払い手続き中"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "このアプリについて"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "承認"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "DASHを直接承認する"; +/* CrowdNode */ +"Account Recovery" = "アカウントの復旧"; + /* No comment provided by engineer. */ "Activity" = "活動"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "新しい連絡先を追加"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "アドレス"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "高度なセキュリティ"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "全て"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "および"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "この取引のキャンセルをしてもよろしいですか。"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "本当によろしいですか?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "位置情報サービスをオンにすると、ATM検索がより円滑に行えます"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "残高"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "残高:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "銀行振込"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "CrowdNodeでDashのマスターノードに加入します"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "DashウォレットとCoinbase間で行います。"; +"Between Dash Wallet and Coinbase" = "DashウォレットとCoinbase間"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "DashウォレットとCoinbaseアカウント間"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Dashをフィアットで購入する"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "UpholdアカウントでDashを買う"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Dashを購入 · アカウント不要"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Dashでギフトカードを購入"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "購入/売却"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "この端末を初期化すると、この端末の資金にアクセスできなくなります。 端末の初期化は復元パスフレーズへのアクセス権がなくなり、PINコードも忘れてしまった場合にのみ実施して下さい。"; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "キャンセルする"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "この取引をキャンセルしても、トレードの注文はキャンセルされません。CoinbaseのアカウントにまもなくDASHが入金されます。"; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "PINを変更する"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "接続を確認してください"; /* Choose your Dash username */ "Choose your" = "あなたのを選択する"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "消去する"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "閉じる"; +/* CrowdNode */ +"Close and notify when it’s done" = "完了したら、閉じて通知する"; + /* No comment provided by engineer. */ "Close App" = "アプリを閉じる"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbaseの手数料"; -/* No comment provided by engineer. */ -"Confirm" = "確認する"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "確認 & 支払い"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "確認する (%@)"; +"Confirm" = "確認する"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "確認する (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "PINを確認する"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "確認中"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "接続しました"; +/* CrowdNode */ +"Connected Dash address" = "連結されたDashアドレス"; + /* No comment provided by engineer. */ "Connected peers: %d" = "接続しているピア: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "コピー"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "ログをコピーする"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Dashのネットワークにつなげられませんでした。インターネットに接続されているか確認してください。"; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "為替レートが見つかりません。"; + /* No comment provided by engineer. */ "Couldn't make payment" = "支払いを完了できませんでした"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "支払いをDashネットワークへ送信できませんでした"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "新しいウォレットを作成する"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "アカウントの作成"; +/* CrowdNode */ +"Create an online CrowdNode account" = "CrowdNodeのオンラインアカウントを作成"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "オンラインアカウントを作成"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "クレジットカード"; /* Crowdnode */ "CrowdNode Account" = "CrowdNodeアカウント"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNodeの特典"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNodeのサポート"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNodeは、このアドレスをお客様のアカウントIDとして使用します。このアドレスに割り当てられたパスフレーズを紛失すると、このウォレットとCrowdNodeのアカウントにある資金へのアクセスが出来なくなります。"; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNodeの出金限度額"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dashアドレス"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "CoinbaseでのDashの残高"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Uphold上のDash残高"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dashの送金は %@ 以上でないと送れません"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "この端末のDashウォレット"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPayのアップグレード料金"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "日付け"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "初期設定の通貨、ショートカット、...について"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Coinbaseのアカウントを切断する"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Upholdアカウントを切断する"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "切断されました"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "距離"; /* No comment provided by engineer. */ "Do not take a screenshot" = "スクリーンショット厳禁"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "完了"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例:johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "以前"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "簡単にDashをステークし、数回のクリックでパッシブ収入を得ます。"; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "例: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "以下に2FAコードを入力してください"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "エラー"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "アップグレード中のエラー"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "終了する"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "仮想通貨購入の手数料"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "情報の取得"; /* Coinbase/Payment Methods */ "Fiat Account" = "フィアットアカウント"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "取引をフィルタリングする"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "でフィルターをかける"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Dashのネットワークでユーザーを探す"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dashを使用できる加盟店、Dashを購入できる場所、Dashで収入を得る方法を探します。"; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Dashでの支払いが可能な加盟店を探します。"; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "初回入金額は、%@以上必要です。"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "セキュリティのため、サインアウトされました。"; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "Dash Walletから"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "UpholdからDashウォレットへ"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "UpholdからDashウォレットへ"; /* Coinbase */ "from your Coinbase account" = "Coinbaseアカウントから"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "0.5DashからDashのマスターノードに入金して報酬を得ることができます。"; + /* No comment provided by engineer. */ "Generate extended public keys?" = "拡張されたパブリックキーを作成しますか。"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "見積もりを得る"; +/* CrowdNode */ +"Get Rewards Instantly" = "すぐに報酬を獲得する"; + /* No comment provided by engineer. */ "Get Started" = "始める"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "CrowdNodeではじめる"; + /* Explore Dash: Filters */ "Gift Card" = "ギフトカード"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "品質を向上させるためにご協力ください"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "高"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "履歴"; +/* CrowdNode */ +"How CrowdNode staking works" = "CrowdNodeのステーキングの仕組み"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "APIのDashアドレスの確認方法"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "ギフトカードの使用方法"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "エボリューションのノードIDキー"; /* No comment provided by engineer. */ "I Accept" = "承認しました"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "CrowdNodeに同意します"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "紙に書き留めました"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "パスフレーズを紛失した場合、他の方法で本人確認を行うことで、再びCrowdNodeの資金にアクセスできるようになります。"; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "このウォレットのパスフレーズを紛失したり、このデバイスをなくしたり、Dash Walletをアンインストールすると、CrowdNode上の資金とこのウォレット内の資金にアクセスできなくなります。"; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "もしまだ消去したければ、次の文をご入力ください: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "手動で再分類した取引を保存したい場合は、CSV取引ファイルをエクスポートする必要があります。"; /* No comment provided by engineer. */ "Ignore" = "無視する"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "直ちに"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "表示されているCoinbaseの手数料に加え、スプレッドも価格に含まれています。アドバンスドトレードを利用する場合、注文帳簿と直接連動をするため、スプレッドは含まれません。\n\n仮想通貨市場は変動が激しいため、取引執行時の価格を一時的に固定できます。"; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "処理中"; /* No comment provided by engineer. */ "Income" = "収入"; +/* CrowdNode */ +"Information about your online account" = "オンラインアカウントに関する情報"; + /* Buy Sell Portal */ "Initializing" = "初期化中"; /* No comment provided by engineer. */ "Insufficient funds" = "資金不足"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "インタラック"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "内部の送金"; /* No comment provided by engineer. */ "Internally moved to" = "内部で移転"; +/* CrowdNode */ +"Introducing Staking" = "ステーキングの導入"; + /* Invalid transaction */ "Invalid" = "無効"; @@ -794,7 +1052,7 @@ "Invalid amount" = "無効な金額"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "無効なDashアドレス"; /* CrowdNode Online */ "Invalid Email" = "無効なEメール"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "無効な入力"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "無効な支払のリクエスト"; /* No comment provided by engineer. */ "Invalid QR Code" = "無効なQRコード"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "お客様の残高が更新されるまで、1分ほどかかる場合があります。"; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "このデバイスでは、CoinbaseからDashウォレットにDashを送金するのに最大10分かかる場合があります。"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "12個の語句からなるリカバリーフレーズを使用してウォレットを復元しようとしているようですが、10個の語句しか入力されていません。これには1時間程度かかる場合があります。デバイスをプラグに接続するのを推奨します。"; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "12個の語句からなるリカバリーフレーズを使ってウォレットを復元しようとしているようですが、11個の語句しか入力されていません。不足している語句を自動的に復元しますか。"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "エボリューションに参加する"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "プールの参加"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "キーID"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "詳細はこちら..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "完了したらお知らせください"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "英数字のみ"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Coinbaseアカウントをリンク"; +/* CrowdNode */ +"Link Existing Account" = "既存アカウントへのリンク"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "既存のCrowdNodeアカウントへのリンク"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "CrowdNodeにログイン"; -/* No comment provided by engineer. */ -"Log Out" = "ログアウトする"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Upholdからログアウトする"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "低"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS許可を管理する"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "マップ"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "マスターノードキー"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "マスターノードのアップデート"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "最大"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "最大%ld文字"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "中間"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "会員は自由にプールを退出することができ、ほとんどの場合すぐに退出できます。"; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "位置情報サービスをオンにすると、加盟店検索がより機能します。"; -/* Validation rule */ -"Minimum 3 characters" = "3文字以上"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "追加"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "コントロールの追加"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "から移動した"; /* No comment provided by engineer. */ "Moved to Address" = "アドレスへ移動した"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "私の連絡先"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "新規"; +/* CrowdNode */ +"New CrowdNode Account" = "CrowdNodeの新規アカウント"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFCデバイス"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "アクティブなユーザーがいません"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "支払い方法がありません"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "有効なDashアドレスではありません"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "全ての店舗でDASHが直接使えるとは限りませんが、Dashでギフトカードが購入できます。"; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "一度%@があなたのリクエストを承認すると、ユーザー名に直接支払えるようになります。"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "オンライン"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "オンライン加盟店"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "運用者の諸々のキー"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "注文プレビュー"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "所有者の諸々のキー"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "支払う"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "ユーザー名に直接支払う"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "支払う"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "支払い方法"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "支払い方法"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "1取引あたり"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "お支払いにはPINが必要です"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "ネットワーク接続を確認してください"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "ウォレットをアップグレードするためPINを入力してください"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "メールはDashウォレットには保存されず、CrowdNodeにのみ送信されることにご留意ください。"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "残高を%@Dashに増加させない限り、CrowdNodeからこのウォレットに資金を引き出すことはできませんので、ご注意ください。"; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "もう一度スキャンしてください"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "お待ちください"; /* No comment provided by engineer. */ "Please wait" = "お待ちください"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "取引履歴をエクスポートする前に、ウォレットが完全に同期されるまでお待ちください"; /* No comment provided by engineer. */ "Please write it down" = "紙に書き留めて下さい"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "以前使われていた場所:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "プライベート/パブリックキー(ベース64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "貯蓄の保護"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "プロバイダーアドレス"; @@ -1194,7 +1644,10 @@ "Public key" = "パブリックキー"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "パブリックキー(レガシー)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "購入"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "クイック入金"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "検証済みのクォーラム: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Dashウォレットに直接入金する"; +/* CrowdNode */ +"Receive your share of rewards daily." = "毎日、報酬の分配金を受け取れます。"; + /* Received transaction */ "Received" = "受取済み"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "から入金済み"; +/* CrowdNode */ +"Receiving rewards" = "報酬の受取"; + /* No comment provided by engineer. */ "Recover" = "リカバー"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "問題を報告する"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "再スキャン"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "アプリのレビューと評価"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "報酬"; /* No comment provided by engineer. */ "Rewards" = "報酬"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "スキャン"; /* No comment provided by engineer. */ "Scan Private Key" = "プライベートキーをスキャン"; +/* No comment provided by engineer. */ +"Scan QR" = "QRをスキャンする"; + /* No comment provided by engineer. */ "Scan QR Code" = "QRコードをスキャン"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "スクリーンショットは、他のアプリやデバイスで閲覧することができます。新しい復元フレーズを作り大事に守って下さい。"; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "連絡先を検索"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Dashネットワークで%@というユーザー名を検索"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "セキュリティ"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Upholdで確認する"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "通貨を選ぶ"; /* Buy Sell Dash */ "Select a service" = "サービスを選択する"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "通貨を選ぶ"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "現在CrowdNodeアカウントで使用しているメインのDashアドレスから%@を送金します。"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "連絡先リクエストを送信する"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "レポートを送信"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "に送信する"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "コピーしたアドレスかQRコードに送金する"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "送金中"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "に送信"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "PINを設定する"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "設定"; /* No comment provided by engineer. */ "Setup Wallet" = "ウォレットをセットアップする"; +/* CrowdNode */ +"Share" = "シェアする"; + /* Receive screen */ "Share address" = "アドレスをシェアする"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "150,000店以上の加盟店でDASHを使ってお買い物"; - /* Enter Address Screen */ "Show content in the clipboard" = "クリップボードのコンテンツを表示する"; /* No comment provided by engineer. */ "Show Masternode Keys" = "マスターノードキーを表示する"; +/* CrowdNode */ +"Show QR" = "QRを表示する"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "復元フレーズを表示する"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "ステーキング"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "サポート"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "同期中…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "クリップボードからアドレスをタップしてペーストする"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "税金の区分"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "チェーンを同期中"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "コードが正しくありません。ご確認の上、再度ご入力ください。"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "このDashはお客様のCoinbaseアカウントに正常に入金されました。しかし、この端末でDashウォレットに送金する際に問題が発生しました。"; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "送金可能な最小金額は、%@です"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "新しい通知はありません。"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "あなたの連絡先に名前%@に一致するユーザーはいません。"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "新しいアドレスの取得中にエラーが発生しました"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "このQRには、すでに%@の支払い請求が含まれています。"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "これは、現在のフル・マスターノードの年間利回りから15%のCrowdNode手数料を差し引いたものです。これは保証された還元率ではなく、CrowdNodeプールの規模やDashの価格によって上下する可能性があります。"; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "このウォレットは何も入っていないか、もしくは同期が終わっていません。復元フレーズがない場合は削除しないでください。"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "この端末のDashウォレットに"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "ステーキングを開始するには、CrowdNodeにアカウントを作成するか、既存のアカウントに接続します。"; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "このデバイスのDashウォレットでCrowdNodeのアカウントに指定したDashアドレスに送金します"; + /* No comment provided by engineer. */ "Tools" = "ツール"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "合計"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch IDの送金可能額"; +/* CrowdNode */ +"Transaction History" = "取引履歴"; + /* No comment provided by engineer. */ "Transaction id" = "取引のid"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Dashを送金する"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "あなたのUpholdアカウントからこのウォレットにDashを送金する"; - /* CrowdNode */ "Transfer Error" = "送金エラー"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "もう一度お試しください"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "端末のパスコードを有効に"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "2段階認証が必要です"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "接続できません"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "新しいQRコードが取得できません"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "未知の"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "サポートされていないURL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "アップデート: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "価格のアップデート中"; /* No comment provided by engineer. */ -"Upgrade Fee" = "アップグレード料金"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "DashPayにアップグレード中"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "ギフトカードを使用する"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "使用場所:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "ユーザー名を取得しました"; -/* CrowdNode Portal */ -"Validating address…" = "アドレスを有効化中"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "ユーザー名の有効化完了"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "アドレスを有効化中"; /* No comment provided by engineer. */ "Validating username failed" = "ユーザー名の有効化失敗"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "検証する"; +/* CrowdNode */ +"Verify your API Dash address" = "APIのDashアドレスの認証"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = " 非常に高い"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "このウォレットのアドレスの所有者であることを認証するために、極めて少額のDashがCrowdNodeで行き来することになります。"; + /* No comment provided by engineer. */ "View All" = "全てを見る"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "復元フレーズを表示する"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = " 投票のアドレス"; /* No comment provided by engineer. */ "Voting Keys" = "投票の諸々のキー"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "チェーンが完全に同期されるまで待ち、お客様の取引履歴を確認できるようにします。CrowdNodeのウェブサイトにアクセスし、ログインまたはサインアップしてください。"; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "アップグレード済み"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "この取引を自動的に検出し、同額をお客様のCrowdNodeアカウントに送金します。その後、このデバイスでDash Walletに入出金することができるようになります。"; + /* Website */ "Website" = "ウェブサイト"; /* No comment provided by engineer. */ "Welcome" = "ようこそ"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "この取引が確定したら、他のウォレットは無価値となり、安全上の理由から再び使用しないようにしてください。"; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "なぜこのような取引があるのですか。"; +/* CrowdNode */ +"Why do you need an online account?" = "なぜオンラインアカウントが必要なのですか。"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "なぜスクリーンショットを撮ってはいけませんか。"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "出金がリクエストされました"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "はい"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "これからこのウォレットを本端末から削除します。削除後にこのウォレットに関連付けられた資金を回収するにはあなたの復元フレーズが必要です。"; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "以下の支払いにはFace IDの顔認証をご利用いただけます"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "以下の支払いにはTouch IDの指紋認証をご利用いただけます"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "お客様は、報酬の支払い方法や支払い時期を変更できます。"; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "お客様の入出金や報酬の獲得に関する詳細な情報を確認できます。"; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "残高が不足しています"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Coinbaseの認証制限を超えてしまいました。"; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "「%@」をあなたのユーザー名として選択しました。あなたのユーザー名は一度登録すると変更はできません。"; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "手続きするのに資金が不足しています"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Dash Walletにパスフレーズをバックアップしておく必要があります"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "DashウォレットにアクセスするにはPINの入力が必要です"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "CrowdNodeの認証を進めるには、%@以上必要です。"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "%@だけでプールに参加できます。"; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "CrowdNodeの認証を進めるには、%@以上必要です。 "; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "またブラウザーを使ってUpholdのウェブサイトからログアウトする必要もあります"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "このデバイスを紛失したり破損した場合、またはDash Walletがこのデバイスからアンインストールされた場合は、資金にアクセスするためにこのリカバリーフレーズが必要です。"; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "この端末のDashウォレットで%@Dashを受け取ります。送金完了まで最長2-3分かかることがあります。 "; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "端数の支払いは自動的に受け取れ、デフォルトでは再投資されますが、定期的な支払いを受け取るための自動出金の設定も簡単に行うことができます。"; + /* CrowdNode */ "Your CrowdNode account is creating…" = "お客様のCrowdNodeアカウントを作成中..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "お客様のCrowdNodeへの入金が完了しました。"; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "お客様の位置情報は、地図上のお客様の位置、選択した圏内にあるATMの表示、検索結果の改善に使用されます。"; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "お客様の位置情報は、地図上でお客様の位置を表示したり、選択された距離内の加盟店を表示したり、検索結果を向上するために使用されます。"; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "あなたの取引は送られたので、数分内にその金額がウォレットに表示されるでしょう"; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "お客様のCrowdNodeアカウントで使用中のメインのDashアドレス"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "あなたのUpholdアカウントのDash残高は"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "あなたの取引は送られたので、数分内にその金額がウォレットに表示されるでしょう"; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "あなたのユーザー名%@はDashネットワークに無事作成されました。"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "あなたのユーザー名%@はDashネットワークに作成中です。"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "現在あなたのウォレットは安全です。復元フレーズを使えばいつでも\n他の端末であなたのアカウントを復元できます。"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 2bbf2c555..cc4f1d82d 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@게 터치 ID 접근 권한이 없습니다"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) 지불 처리 중"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "정보"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "수락"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "직접 DASH 받기"; +/* CrowdNode */ +"Account Recovery" = "계정 복구"; + /* No comment provided by engineer. */ "Activity" = "활동"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "새로운 연락처 추가하기"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "주소"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "향상된 보안"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "모두"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "또한"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "애플 페이"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "이 거래를 정말 취소하시겠습니까?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "확실합니까?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM 검색은 위치 서비스를 사용할 때 더욱 효과적입니다"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "잔액"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "잔고:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "은행 송금"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "크라우드노드를 통해 대시 마스터노드의 일원이 되세요"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "대시 지갑과 코인베이스 사이에서"; +"Between Dash Wallet and Coinbase" = "대시 지갑과 코인베이스 사이"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "대시 지갑과 코인베이스 계정간"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "법정 화폐로 대시 구매하기"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "업홀드 계정으로 대시 매수"; +/* Dash Portal */ +"Buy Dash · No account needed" = "대시 구매하기 · 계정이 필요하지 않습니다"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "대시로 기프트 카드 구매"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "매수/매도"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "이 기기를 삭제하면 더 이상 이 기기의 금액에 액세스할 수 없습니다. 이 작업은 더 이상 암호 문장에 접근할 수 없고 PIN 코드도 분실한 경우에만 실행하십시오."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "취소"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "이 거래를 취소하더라도 거래 주문은 취소되지 않습니다. 곧 귀하의 코인베이스 계좌로 DASH를 받게 됩니다."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "PIN 변경"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "연결을 확인하세요"; /* Choose your Dash username */ "Choose your" = "다음을 선택하세요"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "삭제"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "닫기"; +/* CrowdNode */ +"Close and notify when it’s done" = "완료되면 종료하고 알림받기"; + /* No comment provided by engineer. */ "Close App" = "앱 닫기"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "코인베이스 수수료"; -/* No comment provided by engineer. */ -"Confirm" = "승인"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "승인 & 지불"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "확인 (%@)"; +"Confirm" = "승인"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "확인 (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "PIN 확인"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "확인 중"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "연결됨"; +/* CrowdNode */ +"Connected Dash address" = "연결된 대시 주소"; + /* No comment provided by engineer. */ "Connected peers: %d" = "연결된 피어: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "복사"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "로그 복사하기"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "대시 네트워크에 연결할 수 없습니다. 인터넷 연결 상태를 확인하십시오."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "환율 정보를 찾지 못했습니다."; + /* No comment provided by engineer. */ "Couldn't make payment" = "지불에 실패하였습니다"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "지불 내용을 대시 네트워크에 전송하지 못하였습니다"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "새로운 지갑 생성하기"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "계정 생성하기"; +/* CrowdNode */ +"Create an online CrowdNode account" = "온라인 크라우드노드 계정 생성하기"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "온라인 계정 생성하기"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "신용카드"; /* Crowdnode */ "CrowdNode Account" = "크라우드노드 계정"; +/* CrowdNode */ +"CrowdNode benefits" = "크라우드노드의 이점"; + /* CrowdNode Portal */ "CrowdNode Support" = "크라우드노드 지원"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "크라우드노가 이 주소를 당신의 계정 ID로 사용합니다. 이 주소에 연결된 암호 문구를 잃게되는 경우, 이 지갑 안의 자금 및 크라우드노드 계정에 대한 액세스를 잃게 됩니다. "; + /* CrowdNode */ "CrowdNode withdrawal limits" = "크라우드노드 출금 한도"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "대시"; +/* No comment provided by engineer. */ +"Dash address" = "대시 주소"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "코인베이스의 대시 잔액"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "업홀드 내 대시 잔고"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "대시 지불은 %@보다 적을 수 없습니다"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "이 기기의 대시 지갑"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "대시페이 업그레이드 수수료"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "날짜"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "통화 기본값, 단축키, 관련 정보..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "코인베이스 계정 연결 해제"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "업홀드 계정 연결 해제"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "연결 해제"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "거리"; /* No comment provided by engineer. */ "Do not take a screenshot" = "스크린샷을 찍지 마세요"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "완료"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "예시 johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "이전"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "간단한 클릭만으로 대시를 손쉽게 스테이킹하고 소극적 소득을 얻으세요."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "예시: 홍길동"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "아래에 귀하의 2FA 코드를 입력하세요"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "오류"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "업그레이드 오류"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "나가기"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "암호화폐 매수 수수료"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "정보 가져오는 중"; /* Coinbase/Payment Methods */ "Fiat Account" = "법정 화폐 계좌"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "거래 필터링 하기"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "다음으로 필터:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "대시 네트워크에서 사용자를 검색합니다"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "대시를 받는 판매자를 찾고, 구매처를 확인하고, 수익을 얻는 방법을 확인하세요."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "대시 지불을 받는 상점을 찾아보세요."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "첫 입금은 %@ 이상이어야 합니다"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "보안을 위해 로그아웃 되었습니다."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "대시 지갑에서"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "업홀드에서 대시 지갑으로"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "업홀드에서 당신의 대시 지갑으로"; /* Coinbase */ "from your Coinbase account" = "당신의 코인베이스 계좌로부터"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "대시 마스터노드에 최소 보증금 0.5대시로 리워드를 받아보세요."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "확장된 공개 키를 생성합니까?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "견적 받기"; +/* CrowdNode */ +"Get Rewards Instantly" = "지금 리워드 받기"; + /* No comment provided by engineer. */ "Get Started" = "시작하기"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "크라우드노드 시작하기"; + /* Explore Dash: Filters */ "Gift Card" = "기프트 카드"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "우리가 당신의 경험을 향상할 수 있도록 도와주세요"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "높음"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "내역"; +/* CrowdNode */ +"How CrowdNode staking works" = "크라우드노드 스테이킹이 이루어지는 방식"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "당신의 API 대시 주소를 확인하는 방법"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "기프트 카드 사용 방법"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "에볼루션 노드 ID 키"; /* No comment provided by engineer. */ "I Accept" = "수락합니다"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "크라우드노드에 동의합니다"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "옮겨 적었습니다"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "암호 문구를 잃어버리게 되면 크라우드노드 자금에 다시 액세스하기 위해 다른 방법으로 본인 인증을 해야 합니다."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "이 지갑의 암호 문구를 잃어버리고 기기를 잃는 경우 혹은 대시 지갑을 삭제하는 경우에는 크라우드노드의 자금 및 이 지갑 내 자금에 대한 액세스를 잃게 됩니다."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "그래도 삭제하려면 다음과 같이 입력하십시오: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "수동으로 재분류한 거래 유형을 저장하고자 하는 경우 CSV 거래 파일을 내보내야 합니다."; /* No comment provided by engineer. */ "Ignore" = "무시"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "즉시"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "금액에는 표시된 코인베이스 수수료 외에도 스프레드가 포함되었습니다. 향상된 거래 기능을 사용하는 경우에는 주문장과 직접 상호작용 하므로 스프레드가 포함되지 않습니다.\n\n암호화폐 시장은 변동성이 높기 때문에, 거래 수행을 위해서는 가격을 일시적으로 고정하게 됩니다."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "처리중..."; /* No comment provided by engineer. */ "Income" = "수입"; +/* CrowdNode */ +"Information about your online account" = "당신의 온라인 계정에 대한 정보"; + /* Buy Sell Portal */ "Initializing" = "초기값 설정"; /* No comment provided by engineer. */ "Insufficient funds" = "잔액 부족"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "상호 작용"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "내부 송금"; /* No comment provided by engineer. */ "Internally moved to" = "다음에 내부적으로 이동"; +/* CrowdNode */ +"Introducing Staking" = "스테이킹 소개"; + /* Invalid transaction */ "Invalid" = "유효하지 않음"; @@ -794,7 +1052,7 @@ "Invalid amount" = "유효하지 않은 금액"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "유효하지 않은 대시 주소"; /* CrowdNode Online */ "Invalid Email" = "유효하지 않은 이메일"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "유효하지 않은 입력값"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "유효하지 않은 결제 요청"; /* No comment provided by engineer. */ "Invalid QR Code" = "유효하지 않은 QR 코드"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "잔고가 업데이트되는 데에는 잠시 시간이 소요될 수 있습니다."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "코인베이스로부터 이 기기의 대시 지갑으로 대시를 옮기는 데에는 최대 10분이 소요될 수 있습니다."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "12 단어로 구성된 복구 문구를 이용하여 지갑을 복구하려고 시도하셨으나, 10 단어만을 입력하셨습니다. 입력되지 않은 단어를 자동으로 복구하시겠습니까? 이는 약 한 시간 정도 소요될 수 있습니다. 귀하의 디바이스 전원을 연결할 것을 권장합니다."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "12 단어로 구성된 복구 문구를 이용하여 지갑을 복구하려고 시도하셨으나, 11 단어만을 입력하셨습니다. 입력되지 않은 단어를 자동으로 복구하시겠습니까?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "에볼루션에 합류합니다"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "풀 가입하기"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "키 Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "더 알아보기..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "완료되면 알려주세요"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "숫자와 문자만 가능합니다"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "코인베이스 계정 연결하기"; +/* CrowdNode */ +"Link Existing Account" = "기존 계정 연결"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "기존의 크라우드노드 계정 연결"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "크라우드노드에 로그인"; -/* No comment provided by engineer. */ -"Log Out" = "로그아웃"; - /* No comment provided by engineer. */ "Log out from Uphold" = "업홀드에서 로그아웃"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "낮음"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS 설정 관리하기"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "지도"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "마스터노드 키"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "마스터노드 업데이트"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "최대"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "최대 %ld 글자"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "중간"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "멤버들은 풀을 자유롭게 떠날 수 있으며, 즉시 떠날 수도 있습니다."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "상점 검색은 위치 서비스를 켰을 때 보다 잘 작동합니다."; -/* Validation rule */ -"Minimum 3 characters" = "최소 세 글자"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "더 알아보기"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "보다 큰 제어"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "다음에서 이동"; /* No comment provided by engineer. */ "Moved to Address" = "주소로 이동"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "나의 연락처"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "새로운 알림"; +/* CrowdNode */ +"New CrowdNode Account" = "새로운 크라우드노드 계정"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC 장치"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "활동하지 않는 사용자"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "지불 방법 없음"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "유효한 대시 주소가 아닙니다"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "모든 상점에서 직접 대시를 받는 것은 아니지만, 대시를 통해 기프트 카드를 구매할 수 있습니다."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "%@ 님이 당신의 요청을 수락하면 사용자 이름에 직접 지불할 수 있습니다"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "온라인"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "온라인 판매자"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "운영자 키"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "주문 미리보기"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "소유자 키"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "지불"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "사용자 이름에 직접 지불하기"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "다음으로 지불합니다"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "지불 유형"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "지불 옵션"; + /* Coinbase/Payment Methods */ "PayPal" = "페이팔"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "거래당"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "지불을 처리하기 위해서는 언제나 PIN이 필요합니다"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "네트워크 연결을 확인하세요"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "지갑을 업그레이드하시려면 PIN을 입력하십시오"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "이 이메일은 대시 지갑에 의해 저장되지 않으며 크라우드노드로만 보내진다는 점에 주의하십시오"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "당신의 잔고를 %@ 대시로 올리지 않으면 크라우드노드에서 이 지갑으로 자금을 출금할 수 없다는 점에 주의하세요."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "다시 스캔해주세요"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "기다려주십시오"; /* No comment provided by engineer. */ "Please wait" = "기다려주십시오"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "당신의 거래 내역을 내보내기 전 지갑이 완전히 동기화될 때까지 기다려주세요"; /* No comment provided by engineer. */ "Please write it down" = "적어주세요"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "이전에 사용된 곳:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "개인 / 공공 키 (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "계좌 보호하기"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "공급자 주소"; @@ -1194,7 +1644,10 @@ "Public key" = "공개 키"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "공공 키 (레거시)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "매수하기"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "빠른 송금 수령"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "유효한 쿼럼: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "대시 지갑으로 직접 받기"; +/* CrowdNode */ +"Receive your share of rewards daily." = "매일 당신의 리워드를 받아보세요."; + /* Received transaction */ "Received" = "받음"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "다음으로부터 수신하였습니다"; +/* CrowdNode */ +"Receiving rewards" = "보상 받기"; + /* No comment provided by engineer. */ "Recover" = "복구"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "오류 보고하기"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "재스캔"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "어플 리뷰 & 별점 매기기"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "리워드"; /* No comment provided by engineer. */ "Rewards" = "리워드"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "스캔"; /* No comment provided by engineer. */ "Scan Private Key" = "개인 키 스캔하기"; +/* No comment provided by engineer. */ +"Scan QR" = "QR 코드 스캔"; + /* No comment provided by engineer. */ "Scan QR Code" = "QR 코드 스캔"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "스크린샷은 다른 앱이나 기기에서 볼 수 있습니다. 복원 문구를 새로 만들고 비밀로 간직하세요."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "연락처 검색"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "대시 네트워크에서 사용자 이름 %@ 검색 중"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "보안"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "업홀드에서 확인"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "코인 선택"; /* Buy Sell Dash */ "Select a service" = "서비스를 선택하세요"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "코인 선택"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "현재 당신의 크라우드노드 계정에 사용하고 있는 주요 대시 주소에서 %@ 를 송금합니다"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "연락처 요청 전송"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "보고 전송하기"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "다음에 전송합니다"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "복사된 주소 혹은 QR 코드에 보내기"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "보내는 중"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "다음에 전송합니다"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "PIN 설정"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "설정"; /* No comment provided by engineer. */ "Setup Wallet" = "지갑 설정하기"; +/* CrowdNode */ +"Share" = "공유하기"; + /* Receive screen */ "Share address" = "주소 공유하기"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "15만개 이상의 상점에서 DASH로 쇼핑하세요"; - /* Enter Address Screen */ "Show content in the clipboard" = "클립보드 내용 보이기"; /* No comment provided by engineer. */ "Show Masternode Keys" = "마스터노드 키 확인하기"; +/* CrowdNode */ +"Show QR" = "QR 코드 보기"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "복원 문구 확인하기"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "스테이킹"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "지원"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "동기화중..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "클립보드의 주소를 탭하여 붙여넣기"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "세금 카테고리"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "체인 동기화 중..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "잘못된 코드입니다. 확인 후 다시 시도해주십시오!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "대시가 당신의 코인베이스 계정에 성공적으로 입금되었습니다. 그러나 이 기기의 대시 지갑으로 옮기는 데에 문제가 발생했습니다."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "송금 가능한 최소 금액은 %@ 입니다"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "새로운 알림이 없습니다"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "당신의 연락처에 %@ 라는 이름에 맞는 사용자가 존재하지 않습니다"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "새 주소를 얻는 과정에서 오류가 발생했습니다"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "이 QR은 이미 %@ 에 대한 지불 요청을 포함합니다"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "이것은 전체 마스터노드의 현재 연간 수익률에서 15% 크라우드노드 수수료를 뺀 값을 나타냅니다. 이는 보장된 수익률은 아니며, 크라우드노드 풀의 크기와 대시 가격에 따라 증가하거나 감소할 수 있습니다."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "이 지갑은 비어 있지 않거나 동기화가 완료되지 않았습니다. 복구 문구없이 삭제할 수 없습니다."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "이 기기의 대시 지갑으로"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "스테이킹을 시작하려면 크라우드노드에 계정을 만들거나 기존 계정에 연결하세요."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "이 기기의 대시 지갑 내 크라우드노드 계정에 지정한 대시 주소로 송금합니다."; + /* No comment provided by engineer. */ "Tools" = "도구"; +/* Dash Portal */ +"Topper" = "토퍼"; + /* No comment provided by engineer. */ "Total" = "총합"; /* No comment provided by engineer. */ "Touch ID limit" = "터치 ID 제한"; +/* CrowdNode */ +"Transaction History" = "거래 내역"; + /* No comment provided by engineer. */ "Transaction id" = "거래 ID"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "대시 송금하기"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "당신의 대시를 업홀드 계정에서 이 지갑으로 전송합니다"; - /* CrowdNode */ "Transfer Error" = "송금 오류"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "다시 시도하세요"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "비밀번호 켜기"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "2단계 인증이 필요합니다"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "연결할 수 없습니다"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "새로운 QR 코드를 불러올 수 없습니다"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "알 수 없음"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "지원되지 않는 URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "업데이트됨: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "가격 업데이트중"; /* No comment provided by engineer. */ -"Upgrade Fee" = "업그레이드 수수료"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "대시페이로 업그레이드 중"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "업홀드"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "기프트 카드 사용"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "사용된 곳:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "이미 사용 중인 사용자 이름"; -/* CrowdNode Portal */ -"Validating address…" = "주소 확인중..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "사용자 이름 인증 완료"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "주소 확인중..."; /* No comment provided by engineer. */ "Validating username failed" = "사용자 이름 인증 실패"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "인증하기"; +/* CrowdNode */ +"Verify your API Dash address" = "API 대시 주소 인증하기"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "매우 높음"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "이 지갑의 소유 여부를 검증하기 위해 아주 적은 금액의 대시가 크라우드노드에/로부터 전송됩니다."; + /* No comment provided by engineer. */ "View All" = "모두 보기"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "복구 문구 확인"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "투표 주소"; /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "우리가 당신의 거래 내역을 리뷰할 수 있도록 체인이 완전히 동기화될 때까지 기다려 주세요. 크라우드노드 웹사이트에 방문하셔서 로그인하거나 가입하세요."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "다음을 업그레이드 하였습니다"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "이와 같은 거래는 자동으로 감지되어, 동일한 금액이 당신의 크라우드노드 계정으로 송금됩니다. 이후부터 이 기기의 대시 지갑에서 입금 및 출금을 할 수 있게 됩니다."; + /* Website */ "Website" = "웹사이트"; /* No comment provided by engineer. */ "Welcome" = "환영합니다"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "거래가 확인되면 다른 지갑은 가치를 가지지 않게 되며, 보안 관련 사유를 위해서는 이를 다시 사용해서는 안됩니다."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "왜 모든 거래 내역을 보게 되나요?"; +/* CrowdNode */ +"Why do you need an online account?" = "왜 온라인 계정이 필요한가요?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "왜 스크린샷을 찍으면 안되나요?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "출금이 요청됨"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "예"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "당신은 곧 본 기기로부터 이 지갑을 삭제하게 됩니다. 이 지갑과 관련된 자금은 당신이 복원 문구를 가지고 있을 떄에만 복구할 수 있습니다."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "지불을 위해서는 페이스 ID를 통해 아래에서 인증할 수 있습니다"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "지불을 위해서는 터치 ID를 통해 아래에서 인증할 수 있습니다"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "당신의 리워드 수익을 어떻게 / 언제 받을 것인지 변경할 수 있습니다."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "입금, 출금 및 리워드 수익에 대한 자세한 정보를 확인할 수 있습니다."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "잔액이 충분하지 않습니다"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "코인베이스 인증 제한을 초과하였습니다."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "당신은 \"%@\"을 사용자 이름으로 선택하였습니다. 등록이 완료되면 사용자 이름은 변경할 수 없습니다."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "계속하기 위한 자금이 부족합니다"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "대시 지갑에 암호 문구를 백업해야 합니다"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "대시 지갑에 접근하시려면 PIN을 입력해야 합니다"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "당신의 대시 지갑에 최소 %@ 가 필요합니다"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "%@만 있으면 풀에 가입할 수 있습니다."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "크라우드노드 인증을 계속하기 위해서는 최소 %@가 필요합니다."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "또한 당신의 브라우저를 이용하여 업홀드 웹사이트에서 로그아웃 하십시오."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "이 기기가 분실되거나 망가지는 경우, 혹은 이 기기에서 대시 월렛이 삭제 되는 경우 자금에 접근하기 위해서는 이 복구 문구가 필요합니다."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "이 기기의 대시 지갑에 %@ 대시를 받게 됩니다. 거래를 완료하는 데에는 2-3분 가량 소요될 수 있다는 점에 주의 해주십시오."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "당신은 분할된 지불금을 자동적으로 받게 되며, 이 금액은 디폴트로 다시 투자됩니다. 그러나, 쉬운 설정을 통해 지속적으로 이 수익금을 받아 자동 출금할 수도 있습니다."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "당신의 크라우드노드 계정을 생성하는 중입니다..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "크라우드노드 입금이 완료되었습니다."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "당신의 위치는 지도 상 당신이 있는 곳을 표시하고, 선택한 반경 내 ATM의 위치를 나타내며, 검색 결과를 향상시키는데 사용됩니다."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "당신의 위치는 지도상 당신의 장소와 선택된 반경 내 상점의 위치를 표시하는 것 및 검색 결과 향상을 위해 사용됩니다."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "당신의 거래가 완료되었으며 수 분 이내에 당신의 지갑에 잔액이 표시될 예정입니다."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "당신이 현재 크라우드노드 계정을 위해 사용하고 있는 주요 대시 주소"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "당신의 업홀드 계정 대시 잔고는 다음과 같습니다"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "당신의 거래가 완료되었으며 수 분 이내에 당신의 지갑에 잔액이 표시될 예정입니다."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "당신의 사용자 이름인 %@가 대시 네트워크에 성공적으로 생성되었습니다"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "당신의 사용자 이름인 %@가 대시 네트워크에 생성되는 중입니다"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "이제 당신의 지갑은 안전합니다. 언제든 당신의 복원 문구를 사용하셔서 당신의 계정을 다른 기기에서 복원하실 수 있습니다."; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index 50689f3a4..c0d2e563a 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "За апликацијата"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Адреса"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Откажи"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Копирај"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Грешка"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "ОК"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Скенирај"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Поставувања"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Сподели"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index c13c7f91e..3d0f71dcf 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "About"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Terima"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Terima"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Alamat Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Saya telah menulisnya"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Bayar"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Imbas Kod QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Tetapan"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Share"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index ab466c1b1..6f8ef7d00 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Om"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresse"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Avbryt"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopier"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Kunne ikke finne valutakurser."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash-adresse"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Feil"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Jeg har skrevet ned frasen"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Betal"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skann"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "skann QR-kode"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Skjermbilder er synlige for andre programmer og enheter. Generer en ny gjenopprettingsfrase og hold den hemmelig."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Innstillinger"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Del"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index ec8c2d860..79579e3d4 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ heeft geen toegang tot vingeridentificatie"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Verwerking van betaling"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Over"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accepteren"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepteert DASH direct"; +/* CrowdNode */ +"Account Recovery" = "Accountherstel"; + /* No comment provided by engineer. */ "Activity" = "Activiteit"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Voeg een nieuw contact toe"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adres"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Geavanceerde Beveiliging"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Alles"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = " en "; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Weet jezeker dat je deze transactie wilt annuleren?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Weet je het zeker?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Zoeken naar geldautomaten werkt beter met locatiediensten ingeschakeld."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Saldo:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bankoverschrijving"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Word onderdeel van een Dash Masternode met CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Tussen Dash portemonnee en Coinbase."; +"Between Dash Wallet and Coinbase" = "Tussen de Dash portemonnee en Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Tussen Dash portemonnee en je Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Koop Dash met fiat geld"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Koop Dash met een Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Koop Dash · Geen rekening nodig"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Koop geschenkbonnen met je Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Koop/Verkoop"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Door dit apparaat schoon te vegen heb je geen toegang meer tot het geld op dit apparaat. Dit zou alleen gedaan moeten worden als je de herstelzin hebt verloren en ook de pincode kwijt bent."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Annuleer"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Het annuleren van deze transactie annuleert de handelsorder niet. Je ontvangt binnenkort DASH op je Coinbase account."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Wijzig pin"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Controleer je verbinding"; /* Choose your Dash username */ "Choose your" = "Kies je"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Wis"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Sluit af"; +/* CrowdNode */ +"Close and notify when it’s done" = "Sluiten en melden wanneer het klaar is"; + /* No comment provided by engineer. */ "Close App" = "Sluit app af"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase vergoeding"; -/* No comment provided by engineer. */ -"Confirm" = "Bevestig"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Bevestig en betaal"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Bevestig (%@)"; +"Confirm" = "Bevestig"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Bevestig (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Bevestig pin"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Aan het bevestigen"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Verbonden"; +/* CrowdNode */ +"Connected Dash address" = "Verbonden Dash adres"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Verbonden peers %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopieer"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Kopieer logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Kon niet verbinden met Dash-netwerk, controleer of je verbonden bent met het internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "De wisselkoers kon niet worden gevonden."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Kon betaling niet maken"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "De betaling kan niet worden verstuurd naar het Dash-netwerk"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Maak een nieuwe portemonnee aan"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Maak account aan"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Maak een online CrowdNode account aan"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Maak online account aan"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credticard"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode account "; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode voordelen"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode ondersteuning"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode gebruikt dit adres als account-ID. Je verliest de toegang tot je geld in deze portemonnee alsmode je CrowdNode account als je de wachtwoordzin verliest die aan dit adres is gekoppeld."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode opname limiet"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash-adres"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash saldo op Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Dash saldo bij Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash-betalingen mogen niet kleiner zijn dan %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash portemonnee op dit apparaat"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay upgrade vergoeding"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Standaard valuta, snelkoppelingen, over... "; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Koppel Coinbase account los"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Ontkoppel Uphold account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Verbinding verbroken"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Afstand"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Maak geen screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Klaar"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "bijvoorbeeld jan@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Eerder"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Stake makkelijk Dash en verdien passief inkomen met een paar eenvoudige kliks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "bv: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Voer hieronder je 2FA-code in"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Fout"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Fout bij het upgraden"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Afsluiten"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Kosten bij crypto aankopen"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Info ophalen"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat rekening"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Transacties filteren"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Gefilterd op:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Zoek een gebruiker op het Dash netwerk"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Vind winkeliers die Dash accepteren, waar Dash kunt kopen, en hoe je er inkomsten mee kunt genereren."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Vind acceptanten die Dash als aannemen."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Eerste storting moet meer zijn dan %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Voor de veiligheid ben je afgemeld."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "van Dash portemonnee"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Van Uphold naar je Dash Portemonnee"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Van Uphold naar je Dash Portemonnee"; /* Coinbase */ "from your Coinbase account" = "vanaf je Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ontvang beloningen van deposito's in Dash Masternodes vanaf slechts 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Genereer uitgebreide publieke sleutels?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Offerte aanvragen"; +/* CrowdNode */ +"Get Rewards Instantly" = "Ontvang direct beloningen"; + /* No comment provided by engineer. */ "Get Started" = "Ga aan de slag"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Aan de slag met CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Cadeaukaart"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help ons je ervaring te verbeteren"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Hoog"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Geschiedenis"; +/* CrowdNode */ +"How CrowdNode staking works" = "Hoe staking bij CrowdNode werkt"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Hoe je het API Dash adres kunt bevestigen"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Hoe een geschenkbon te gebruiken"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Evolution Node ID sleutels"; /* No comment provided by engineer. */ "I Accept" = "Ik accepteer"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Ik ga akkoord met CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "ik heb het opgeschreven"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Als je ooit de wachtwoordzin kwijtraakt, kan je op andere manieren verifiëren om weer toegang te krijgen tot CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Als je de wachtwoordzin voor deze portemonnee verliest, dit apparaat verliest of de Dash portemonnee app verwijdert, verliest je de toegang tot je geld op CrowdNode en ook het geld in deze portemonnee."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Als je het nog steeds wilt wissen, voer a.u.b. in: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Als je handmatig geherclassificeerde soorten voor transacties wilt opslaan, moet je een CSV transactiebestand exporteren."; /* No comment provided by engineer. */ "Ignore" = "Negeer"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Onmiddellijk"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Naast de getoonde Coinbase fee, nemen we een spread mee in de prijs. Bij gebruik van Advanced Trade optie is er geen spread inbegrepen omdat je rechtstreeks met het orderboek communiceert.\n\nCryptocurrency-markten zijn volatiel en dit stelt ons in staat om tijdelijk een prijs vast te leggen voor de uitvoering van transacties."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Bezig...."; /* No comment provided by engineer. */ "Income" = "Inkomen"; +/* CrowdNode */ +"Information about your online account" = "Informatie over je online account"; + /* Buy Sell Portal */ "Initializing" = "Initialiseren"; /* No comment provided by engineer. */ "Insufficient funds" = "Ontoereikende fondsen"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interne transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Intern verplaatst naar"; +/* CrowdNode */ +"Introducing Staking" = "Introductie van staking"; + /* Invalid transaction */ "Invalid" = "Ongeldig"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Ongeldig bedrag"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "ongeldig Dash adres"; /* CrowdNode Online */ "Invalid Email" = "Ongeldig emailadres"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Ongeldige invoer"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Ongeldig betalingsverzoek"; /* No comment provided by engineer. */ "Invalid QR Code" = "Ongeldige QR-code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Het kan even duren voordat je saldo is bijgewerkt."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Het kan tot 10 minuten duren om Dash over te maken van Coinbase naar de Dash portemonnee op dit apparaat."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Het ziet er naar uit dat je probeert een portemonnee te herstellen met een herstelzin van 12 woorden, maar je hebt maar 10 woorden ingevoerd, wil je automatisch de ontbrekende woorden herstellen? Dit kan ongeveer een uur duren. We raden aan je apparaat aan de lader te hangen."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Het ziet er naar uit dat je probeert een portemonnee te herstellen met een herstelzin van 12 woorden, maar je hebt maar 11 woorden ingevoerd, wil je automatisch de ontbrekende woorden herstellen?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Sluit je aan bij Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Deelnemen aan de pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Sleutel ID"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Kom meer te weten..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Laat me weten wanneer het klaar is"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Alleen letters en nummers"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Koppel Coinbase account"; +/* CrowdNode */ +"Link Existing Account" = "Link bestaand account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link bestaand account CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in op CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Uitloggen"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Bij Uphold uitloggen"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Laag"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Beheer gpsinstellingen"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Kaart"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode sleutels"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Updaten masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximaal %ld karakters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Leden zijn vrij om de pool te verlaten en kunnen meestal meteen vertrekken."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Zoeken naar acceptanten werkt beter met locatiediensten ingeschakeld."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 karakters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Meer"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Meer controle"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Verplaatst van"; /* No comment provided by engineer. */ "Moved to Address" = "Verplaatst naar adres"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Mijn contacten"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nieuw"; +/* CrowdNode */ +"New CrowdNode Account" = "Nieuw account CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC-apparaat"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Geen actieve gebruiker"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Geen betalingsmethodes"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "ongeldig Dash-adres"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Niet alle winkels accepteren direct DASH, maar je kan een geschenkbon kopen met je Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "Oké"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Zodra%@ jouw verzoek accepteert kunt je direct betalen aan Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online winkelier"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator sleutels"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Voorbeeld bestelling"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Eigenaar sleutels"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Betaal"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Betaal rechtstreeks aan gebruikersnaam"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Betaal met"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Betalingswijze"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Uitbetaalopties"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transactie"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "De PIN is altijd vereist om een betaling uit te voeren"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Controleer de netwerkverbinding"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Voer a.u.b. PIN in om de portemonnee bij te werken"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Houd er rekening mee dat de e-mail niet wordt opgeslagen door de Dash Portemonnee en alleen maar wordt verzonden naar Crowdnode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Let op, je zal geen geld kunnen opnemen van CrowdNode naar deze portemonnee totdat je je saldo verhoogt naar %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Probeer a.u.b. nog een keer te scannen"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Even wachten a.u.b."; /* No comment provided by engineer. */ "Please wait" = "Even wachten a.u.b."; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Wacht tot de portemonnee volledig is gesynchroniseerd alvorens je transactiegeschiedenis je exporteren."; /* No comment provided by engineer. */ "Please write it down" = "Schrijf het a.u.b. op"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Eerder gebruikt op:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "persoonlijke / publieke sleutels (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Bescherm uw spaargeld"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider adres"; @@ -1194,7 +1644,10 @@ "Public key" = "Publieke sleutel"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Publieke sleutel (verouderd)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "Aanschaffen"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Snel Ontvangen"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums gevalideerd: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Ontvang het direct in de Dash portemonnee."; +/* CrowdNode */ +"Receive your share of rewards daily." = "Ontvang dagelijks jouw deel van de beloning."; + /* Received transaction */ "Received" = "Ontvangen"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Ontvangen van"; +/* CrowdNode */ +"Receiving rewards" = "Beloningen ontvangen"; + /* No comment provided by engineer. */ "Recover" = "Herstel"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Meld een probleem"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Scan opnieuw"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Schrijf een recensie & beoordeel de app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Beloning"; /* No comment provided by engineer. */ "Rewards" = "Beloningen"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan persoonlijke sleutel"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Schermafdrukken zijn zichtbaar voor andere apps en apparaten. Genereer een nieuwe herstelzin en houdt deze geheim."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Zoek een contactpersoon"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Zoeken naar gebruikersnaam %@op het Dash netwerk"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Beveiliging"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Bekijk op Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Selecteer een munt"; /* Buy Sell Dash */ "Select a service" = "Kies een dienst"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Selecteer de munt"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Stuur %@ vanaf het primaire Dash adres dat je momenteel gebruikt voor je CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Contactverzoek verzenden"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Verstuur rapport"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Verstuur naar"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Versturen naar gekopieerd adres or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Bezig met verzenden"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Verzenden naar"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Stel PIN in"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Instellingen"; /* No comment provided by engineer. */ "Setup Wallet" = "Portemonnee instellen"; +/* CrowdNode */ +"Share" = "Deel"; + /* Receive screen */ "Share address" = "Deel adres"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Winkel met DASH bij meer dan 150k acceptanten"; - /* Enter Address Screen */ "Show content in the clipboard" = "Toon inhoud op het klembord"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Toon sleutels masternode"; +/* CrowdNode */ +"Show QR" = "Toon QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Toon herstelzin"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Ondersteuning"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Synchroniseren..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tik op het adres van het klembord om het te plakken"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Belastingcategorie"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "De blockchain wordt gesynchroniseerd..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "De code is onjuist. Controleer en probeer het opnieuw."; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "De Dash is succesvol gestort op je Coinbase account. Maar er was een probleem bij het overzetten hiervan naar de Dash portemonnee op dit apparaat."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Het minimumbedrag dat je kan verzenden is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Er zijn geen nieuwe meldingen"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Er zijn geen gebruikers die overeenkomen met de naam %@ in uw contacten"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Er is een fout opgetreden bij het verkrijgen van een nieuw adres"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Deze QR bevat al het betalingsverzoek voor %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Dit vertegenwoordigt het huidig jaarlijkse procentuele rendement van een volledige Masternode minus de 15% vergoeding voor CrowdNode. Het is geen gegarandeerd rendement en kan stijgen of dalen op basis van de grootte van de CrowdNode pools en de prijs van Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Deze portemonnee is niet leeg of sync is nog niet klaar, je mag het niet wissen zonder de herstelzin."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "naar Dash portemonnee op dit apparaat"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Om te beginnen met staking, maak een account aan op CrowdNode of maak verbinding met een bestaande."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "naar het Dash adres dat is toegewezen aan je CrowdNode account in de Dash portemonnee op dit apparaat"; + /* No comment provided by engineer. */ "Tools" = "Gereedschap"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Totaal"; /* No comment provided by engineer. */ "Touch ID limit" = "touch ID limiet"; +/* CrowdNode */ +"Transaction History" = "Transactiegeschiedenis"; + /* No comment provided by engineer. */ "Transaction id" = "Transactie id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Dash overzetten"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Verstuur Dash van je Uphold account naar deze portemonnee"; - /* CrowdNode */ "Transfer Error" = "Overdrachtsfout"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Probeer opnieuw"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Zet apparaat-toegangscode aan"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Twee-factor-authenticatie vereist"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Kan geen verbinding maken"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Verkrijgen van nieuwe QR-code is mislukt"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Onbekend"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Niet-ondersteunde URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Bijgewerkt: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Bezig met updaten van prijs"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgradevergoeding"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgraden naar DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "gebruik cadeaukaart"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Gebruikt op:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Gebruikersnaam al in gebruik"; -/* CrowdNode Portal */ -"Validating address…" = "Adres valideren…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validatie van gebruikersnaam voltooid"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Adres valideren…"; /* No comment provided by engineer. */ "Validating username failed" = "Validatie van gebruikersnaam is mislukt"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verifiëren"; +/* CrowdNode */ +"Verify your API Dash address" = "Verifieer je API Dash adres"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Heel hoog"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Er worden zeer kleine hoeveelheden Dash van en naar CrowdNode verzonden om te verifiëren dat je de eigenaar bent van dit adres in de portemonnee."; + /* No comment provided by engineer. */ "View All" = "Bekijk alles"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Toon herstelzin"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Stem adres"; /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wacht tot de blockchain volledig is gesynchroniseerd, zodat we de transactiegeschiedenis kunnen bekijken. Bezoek de CrowdNode website om in te loggen of aan te melden."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We hebben een upgrade uitgevoerd"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We zullen deze transactie automatisch detecteren en hetzelfde bedrag overboeken naar je CrowdNode account. Daarna kan je op dit apparaat geld storten en opnemen in de Dash portemonnee."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welkom"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Wanneer de transactie is bevestigd, is de andere portemonnee waardeloos en mag deze om veiligheidsredenen niet opnieuw worden gebruikt."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Waarom zie ik al deze transacties?"; +/* CrowdNode */ +"Why do you need an online account?" = "Waarom heb je een online account nodig?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Waarom moet ik geen screenshot maken?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Opname is aangevraagd"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Ja"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "U staat op het punt deze portemonnee van dit apparaat te wissen. Het saldo dat aan deze portemonnee is gekoppeld, kan alleen worden opgehaald als u uw herstelzin hebt."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "U kunt authenticeren met gezichtsherkenning voor onderstaande betalingen"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "U kunt authenticeren met vingerafdruk voor onderstaande betalingen"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Je kunt wijzigen hoe en wanneer inkomsten aan worden uitbetaald."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Je kunt gedetailleerde informatie zien over uw stortingen, opnames en inkomsten."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Je hebt niet genoeg saldo"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Je hebt de autorisatielimiet op Coinbase overschreden."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "U heeft \"%@\" gekozen als gebruikersnaam. Uw gebruikersnaam kan na registratie niet meer worden gewijzigd."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Je hebt onvoldoende saldo om door te gaan"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "U moet een back-up maken van uw wachtwoordzin in de Dash portemonnee"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "PIN invoeren om in de Dash portemonnee te komen"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Je hebt minimaal %@ nodig in je Dash portemonnee"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Je hebt maar %@ nodig om deel te nemen aan een pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "je hebt minimaal %@ nodig om door te gaan met de CrowdNode verificatie."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Je dient ook nog uit te loggen bij Uphold website in je webbrowser."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Je hebt deze herstelzin nodig om toegang te krijgen tot je saldo als dit apparaat is verloren of beschadigd, of als de Dash Portemonnee app van dit apparaat is verwijderd."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Je ontvangt %@ Dash in je Dash portemonnee op dit apparaat. Houd er rekening mee dat het tot 2-3 minuten kan duren om een overdracht te voltooien."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "U ontvangt automatisch fractionele betalingen en deze worden standaard opnieuw geïnvesteerd. Het is ook mogelijk om automatische opnames in te stellen om terugkerende uitbetalingen te ontvangen."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Je CrowdNode account wordt aanmaakt..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Je storting op CrowdNode is ontvangen."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Je locatie wordt gebruikt om je positie op de kaart te tonen, geldautomaten in de geselecteerde straal te tonen, en om zoekresultaten te verbeteren."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Je locatie wordt gebruikt om uw positie op de kaart, om winkels in de geselecteerde radius te tonen, en de zoekresultaten te verbeteren."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "De transactie is verzonden en het bedrag verschijnt binnen een paar minuten in je de portemonnee."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Het primaire Dash adres dat je momenteel gebruikt voor je CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Je saldo in Dash bij Uphold is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "De transactie is verzonden en het bedrag verschijnt binnen een paar minuten in je de portemonnee."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Uw gebruikersnaam %@ is met succes aangemaakt op het Dash netwerk"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Uw gebruikersnaam %@ wordt aangemaakt op het Dash netwerk"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Uw portemonnee is nu beveiligd. U kunt uw herstelzin op elk gewenst moment gebruiken om uw account op een ander apparaat te herstellen."; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 76f8561ca..da1adf5f5 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nie ma zezwolenia na dostęp do Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld znaków"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Przetwarzanie Transakcji"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "O aplikacji"; +/* No comment provided by engineer. */ +"About me" = "O mnie"; + /* No comment provided by engineer. */ "Accept" = "Akceptuj"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Zaakceptuj DASH bezpośrednio"; +/* CrowdNode */ +"Account Recovery" = "Odzyskiwanie Konta"; + /* No comment provided by engineer. */ "Activity" = "Aktywność"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Dodaj Nowy Kontakt"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Dodaj Przyjaciół i Rodzinę"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adres"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Zaawansowane Bezpieczeństwo"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Zgadzam się"; + /* No comment provided by engineer. */ "All" = "Wszystko"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "i"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Czy na pewno chcesz anulować tę transkację?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Jesteś pewien?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Ponieważ większość ludzi nie ma pod ręką dokładnie 1000 Dash, CrowdNode stworzył usługę, w której wszyscy mogą czerpać korzyści z posiadania Masternode poprzez kumulacje mniejszych kwot od wielu użytkowników. "; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Wyszukiwanie ATMów działa lepiej, gdy włączone są usługi lokalizacyjne"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Saldo na CrowdNode"; /* CrowdNode */ "Balance: " = "Saldo:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transfer Bankowy"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Zostań współwłaścicielem Masternoda dzięki CrwodNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Pomiędzy %1$ld a %2$ld znaków"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Pomiędzy Porfelem Dash a Coinbase"; +"Between Dash Wallet and Coinbase" = "Pomiędzy portfelem Dash i Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Pomiędzy twoim Portfelem Dash a twoim kontem na Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Kup Dash za normalne pieniądze"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Kup Dash za pomocą konta Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Kup Dash · Konto nie jest potrzebne"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kup karty podarunkowe za pomocą Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Kupuj/Sprzedawaj"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Jeśli wyczyścisz to urządzenie, stracisz dostęp do funduszy na tym urządzeniu. Tę czynność możesz rozważyć jedynie, gdy nie masz dostępu do frazy odzyskiwania portfela oraz pinu. "; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Anuluj"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Anulowanie tej transakcji nie anuluje zlecenia. Wkrótce otrzymasz DASH na swoje konto na Coinbase."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Zmień kod PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Sprawdź swoje połączenie"; /* Choose your Dash username */ "Choose your" = "Wybierz swój"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Wybierz swoją nazwę użytkownika"; + +/* No comment provided by engineer. */ +"Claimed" = "Odebrane"; + /* No comment provided by engineer. */ "Clear" = "Wyczyść"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Zamknij "; +/* CrowdNode */ +"Close and notify when it’s done" = "Zamknij i powiadom, kiedy konto będzie gotowe"; + /* No comment provided by engineer. */ "Close App" = "Zamknij Aplikacje"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Opłata Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Potwierdź"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Potwierdź i Zapłać"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Potwierdź (%@)"; +"Confirm" = "Potwierdź"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Potwierdź (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Potwierdź kod PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Potwierdzam"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Połączony"; +/* CrowdNode */ +"Connected Dash address" = "Połączony adres Dash"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Podłączone peery %d "; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiuj"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Kopiuj link do zaproszenia"; + /* No comment provided by engineer. */ "Copy Logs" = "Kopiuj Logi"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Niemożliwe jest połączenie z siecią Dash. Sprawdź swoje połączenie z internetem. "; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Kurs nie został znaleziony"; + /* No comment provided by engineer. */ "Couldn't make payment" = "Nie można dokonać płatności"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Nie można przesłać płatności do sieci Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Stwórz nowe zaproszenie"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Stwórz nowe zaproszenie"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Stwórz Nowy Portfel"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Stwórz nazwę użytkownika, oraz dodaj przyjaciół."; + /* CrowdNode */ "Create Account" = "Stwórz Konto"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Stwórz konto CrowdNode online"; + +/* No comment provided by engineer. */ +"Create invitation" = "Stwórz zaproszenie"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Stwórz Konto Online"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Stwórz swoją nazwę użytkownika, znajdź przyjaciół i rodzinę oraz dodaj ich do swoich kontaktów"; + /* Coinbase/Payment Methods */ "Credit Card" = "Karta Kredytowa"; /* Crowdnode */ "CrowdNode Account" = "Konto CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Korzyści CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Wsparcie CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode będzie używał ten adres jako identyfikator twojego konta. Jeśli stracisz kontrolę nad tym adresem, stracisz również dostęp do swoich środków na koncie CrowdNode."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Limit wypłat na CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Adres dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Adres Dash wyznaczony dla twojego konta CrowdNode w porfelu Dash na tym urządzeniu. "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash na Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Saldo Dash na Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Płatności Dash nie mogą być mniejsze niż %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Portfel Dash na tym urządzeniu"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "Zaproszenie do DashPay"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Opłata za ulepszenie DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Domyślna waluta, skróty, o…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Rozłącz Konto Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Odzłącz Konto Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Rozłączony"; +/* No comment provided by engineer. */ +"Display Name" = "Pokaż Imię"; + /* Explore Dash: Filters */ "Distance" = "Dystans"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Nie rób zrzutu ekranu"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Zrobione"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Każde zaproszenie będzie opłacone tą sumą, aby odbiorca mógł szybko stworzyć swój własny profil na Sieci Dash"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Wcześniej"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Z łatwością ulokuj swoje monety Dash i zarabiaj pasywny dochód za pomocą kilku prostych kliknięć. "; +/* No comment provided by engineer. */ +"Edit Profile" = "Edytuj Profil"; + +/* Invitation tag placeholder */ +"eg: Dad" = "np Tato"; + /* Input username textfield placeholder */ "eg: johndoe" = "np. jankowalski"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Poniżej wpisz swój kod 2FA"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Wprowadź swój Gravatar email"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Błąd"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Wystąpił błąd podczas aktualizacji twojego profilu"; + /* No comment provided by engineer. */ "Error Upgrading" = "Wystąpił błąd podczas ulepszania"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Wyjdź"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Opłaty w kupowaniu krypto"; +/* No comment provided by engineer. */ +"Fetching Image" = "Szukanie Obrazka"; + /* Explore Dash */ "Fetching Info" = "Pobieranie informacji"; /* Coinbase/Payment Methods */ "Fiat Account" = "Konto Walutowe"; +/* No comment provided by engineer. */ +"Filter" = "Filtrowanie"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtruj Transakcje"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Od filtrowane pod względem:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Znajdź użytkownika na Sieci Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Znajdź sprzedawców, którzy akceptują DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Znajdź handlowców którzy akceptują Dash, gdzie go zakupić oraz jak zarabiać dzięki niemu."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Znajdź sprzedawcę, który przyjmuje płatności w Dash. "; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Pierwszy przelew powinien być większy niż %@"; +/* CrowdNode */ +"First minimum deposit" = "Pierwszy minimalny depozyt"; + /* Coinbase */ "For your security, you have been signed out." = "Zostałeś wylogowany ze względów bezpieczeństwa."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "Od Portfela Dash"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Z Uphold do portfela Dash"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Z konta Uphold do Portfela Dash"; /* Coinbase */ "from your Coinbase account" = "z twojego konta na Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Pozwól aby twoje monety Dash pracowały na siebie jako zabezpieczenie Masternoda. Możesz zacząć z 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Chcesz stworzyć rozszerzone klucze publiczne?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Otrzymaj wycenę"; +/* CrowdNode */ +"Get Rewards Instantly" = "Otrzymuj Zarobki Natychmiastowo"; + /* No comment provided by engineer. */ "Get Started" = "Zacznij"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Dostań swoją nazwę użytkownika"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Pierwsze kroki z CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Karta podarunkowa"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Pomóż nam poprawić Twoje wrażenia"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Tutaj jest adres Dash wyznaczony dla tojego konta CrowdNode w Porfelu Dash na tym urządzeniu. "; + /* adjective, security level */ "High" = "Wysoki"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Historia"; +/* CrowdNode */ +"How CrowdNode staking works" = "Jak działa lokata procentowa na CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Jak potwierdzić adres API Dash"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Jak Używać Kart Podarunkowych"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Klucze Evolution Node ID"; /* No comment provided by engineer. */ "I Accept" = "Akceptuję"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Zgadzam się z warunkami CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Zapisałem to"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "W przypadku utraty hasła, możesz zweryfikować się za pomocą innych metod aby odzyskać dostęp do funduszy na CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Jeśli stracisz hasło do tego portfela oraz stracisz dostęp do tego urządzenia lub odinstalujesz Portfel Dash, stracisz również dostęp do konta CrowdNode oraz przechowywanych tam funduszy."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Jeś dalej nalegasz na wymazanie, proszę o wpisanie: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Jeśli chcesz zapisać ręcznie przeklasyfikowane typy transakcji, powinieneś wyeksportować plik transakcji CSV."; /* No comment provided by engineer. */ "Ignore" = "Zignoruj"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Wrzucony obrazek będzie dostępny dla wszystkich użytkowników"; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "URL obrazka nie może być dłuższy niż %Id znaków."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Polityka Prywatności Zdjęć"; + /* No comment provided by engineer. */ "Immediately" = "Natychmiast"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Oprócz pokazanej opłaty Coinbase, wliczamy również mały margines błędu. Kiedy używasz Zawansowengo trybu, margines nie jest wliczony, ponieważ używasz bezpośrednio książki zleceń\n\nRynki Kryptowalut są dosyć zmienne, więc ten margines pozwala nam na gwarancje ceny podczas transakcji. "; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "W przypadku zlecenia większych wypłat, CrowdNode dokona wypłaty w ciągu dwóch tygodni. Wynika to z ich protokołów bezpieczeństwa, ale prawdpodobnie środki będą wypłacone znacznie szybciej."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "W trakcie..."; /* No comment provided by engineer. */ "Income" = "Przychód"; +/* CrowdNode */ +"Information about your online account" = "Informacje na temat Twojego konta online"; + /* Buy Sell Portal */ "Initializing" = "Rozpoczynanie"; /* No comment provided by engineer. */ "Insufficient funds" = "Niewystarczająca ilość funduszy"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Nie posiadasz wystarczająco środków"; + /* Coinbase/Payment Methods */ "Interac" = "Oddziaływanie"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Przelew wewnętrzny"; /* No comment provided by engineer. */ "Internally moved to" = "Wewnętrznie przeniesiony do"; +/* CrowdNode */ +"Introducing Staking" = "Zapoznaj się z lokatami"; + /* Invalid transaction */ "Invalid" = "Niewłaściwy"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Niewłaściwa ilość"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Nieprawidłowy adres Dash"; /* CrowdNode Online */ "Invalid Email" = "Email jest niepoprawny"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Niewłaściwe kwoty."; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Nieważne Zaproszenie"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Niewłaściwe rzadanie płatności"; /* No comment provided by engineer. */ "Invalid QR Code" = "Niewłaściwy kod QR"; +/* No comment provided by engineer. */ +"Invitation" = "Zaproszenie"; + +/* Invitation #3 */ +"Invitation %ld" = "Zaproszenie %Id"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Zaproszenie zostało już odebrane"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Zaproszenie zostało stworzone pomyślnie"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Opłata za zaproszenie"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Historia Zaproszeń"; + +/* No comment provided by engineer. */ +"Invite" = "Zaproś"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Zaproś kogoś aby dołączył do sieci Dash"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Zaproś rodzię i znajdź przyjaciół zapomocą wyszukiwarki nazw użytkowników"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Zaproś przyjaciół i rodzię"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Zaproś przyjaciół i rodzinę aby dołączyli do sieci Dash"; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Zaproś przyjaciół i rodzinę do sieci Dash"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Zaktualizowanie salda może potrwać chwilę."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Transfer z Coinbase do Portfela Dash może zająą nawet do 10 minut."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Wygląda na to, że próbujesz przywrócić swój portfel za pomocą 12-wyrazowej frazy odzyskiwania, jednak wprowadziłeś tylko 10 słów, czy chcesz automatycznie odzyskać brakujące słowa? Może to zająć około godziny. Zalecamy podłączenie urządzenia do zasilania."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Wygląda na to, że próbujesz przywrócić swój portfel za pomocą 12-wyrazowej frazy odzyskiwania, jednak wprowadziłeś tylko 11 słów, czy chcesz automatycznie odzyskać brakujące słowa? "; +/* No comment provided by engineer. */ +"Join" = "Dołącz"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Dołącz do DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Dołącz do Ewolucji"; +/* No comment provided by engineer. */ +"Join Now" = "Dołącz Teraz"; + +/* CrowdNode */ +"Joining the pool" = "Dołączanie do Puli CrowdNode"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Identyfikator Klucza"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Dowiedz się więcej..."; +/* CrowdNode */ +"Leaving the pool" = "Opuszczanie CrowdNode"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Daj mi znać kiedy się skończy"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Pozwól twoim przyjaciołom i rodzinie na dołącznie do Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Pozwól twoim przyjaciołom i rodzinie na dołącznie do sieci Dash. Zaproś ich do świata społecznych finansów."; + /* Validation rule */ -"Letters and numbers only" = "Tylko litery i cyfry"; +"Letters, numbers and hyphens only" = "Tylklko litery, cyfry i myślniki są dozwolone"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Zacznijmy"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Połącz Konto Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Połącz się z już istniejącym kontem"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Połącz się z Istniejącym Kontem CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Zaloguj się do CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Wyloguj"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Wyloguj z Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Niski"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Ustaw pozwolenia GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Klucze do Masternoda"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizacji Masternoda"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maksymalnie %ld znaków"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Może później"; /* adjective, security level */ "Medium" = "Średni"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Członkowie mogą swobodnie wyccofać się z CrowdNode i w znaczniej większośći przypadków mogą to zrobić natychmiastowo."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Szukiwanie sprzedawców działa lepiej z włączonymi usługami lokalizacyjnymi."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 znaki"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Więcej"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Więcej Kontroli"; +/* No comment provided by engineer. */ +"More Suggestions" = "Więcej Sugesti"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Przesuń lub przybliż zdjęcie aby znaleźć idealny rozmiar"; + /* No comment provided by engineer. */ "Moved from" = "Przeniesiony z"; /* No comment provided by engineer. */ "Moved to Address" = "Przeniesione na Adres"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Musi się zacząć literą lub cyfrą"; + /* No comment provided by engineer. */ "My Contacts" = "Moje Kontakty"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Nowe"; +/* CrowdNode */ +"New CrowdNode Account" = "Nowe Konto CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC urządzenie"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Brak aktywnych użytkowników"; +/* Coinbase */ +"No cash account found" = "Nie znaleziono konta gotówkowego"; + /* Coinbase/Buy Dash */ "No payment methods" = "Brak metody płatności"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Nieprawidłowy adres Dash"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nie wszystkie sklepy akceptują Dash bezpośrednio, ale zawsze możesz użyć Dash aby kupić kartę podarunkową."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Kiedy %@ zakceptuje twoje zaproszenie to będziesz mógł dokonywać płatności używając jedynie nazwy użytkownika"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Handlowiec online"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Klucze operatora"; +/* No comment provided by engineer. */ +"or" = "lub"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Podgląd Zamówienia"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Klucze właściciela"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Wklej URL swojego obrazka "; + /* No comment provided by engineer. */ "Pay" = "Zapłać"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Płać Użytkownikowi "; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Użwaj normalnych nazw do wysyłania funduszy. Nie musisz się męczyć z długimi losowymi adresami. "; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Zapłać za pomocą"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Typ płatności"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Płatności dokonane bezpośrednio do adresu nie będą zapisane w histori aktywności"; + +/* CrowdNode */ +"Payout Options" = "Opcje Wypłaty"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "w jednej transakcji"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Spersonalizuj"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN jest zawsze wymagany by dokonać płatności"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Sprawdź połączenie z siecią"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Wpisz prawidłwy email gravatar"; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "wprowadź prawidłowy URL obrazka"; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Proszę podaj PIN aby aktualizować portfel"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Email nie jest przchowywany w portfelu Dash i zostaje on wysłany jedynie do CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Pamiętaj, nie będziesz mógł wypłacić środków z CrowdNode do tego portfela, dopóki nie zwiększysz salda do %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Proszę ponownie zeskanować"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Jedna chwila"; /* No comment provided by engineer. */ "Please wait" = "Jedna chwila "; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Poczekaj, aż portfel będzie w pełni zsynchronizowany zanim wyeksportujesz historię transakcji."; /* No comment provided by engineer. */ "Please write it down" = "Proszę to zapisać"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Podgląd zaproszenia"; + /* No comment provided by engineer. */ "Previously used at: " = "Wcześniej użyty w:"; +/* CrowdNode */ +"Primary Dash address" = "Główny adres Dash"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Prywatne / Publiczne (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Chroń Swoje Oszczędnosci"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Dostawca Adresu"; @@ -1194,7 +1644,10 @@ "Public key" = "Klucz publiczny"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Klucz publiczny (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Publiczny URL"; /* Coinbase/Buy Dash */ "Purchase" = "Kup"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Szybki Odbierz"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Zweryfikowane przez Kworum %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Otrzymaj bezpośrednio do portfela Dash"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Otrzymuj swój udział w wynagrodzeniu codziennie."; + /* Received transaction */ "Received" = "Otrzymano"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Odebrane z"; +/* CrowdNode */ +"Receiving rewards" = "Otrzymywanie wynagrodzenia"; + /* No comment provided by engineer. */ "Recover" = "Odzyskaj"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Zgłoś problem"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Ponownie zeskanuj"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Oceń i zostaw recenzje o aplikacji"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Nagroda"; /* No comment provided by engineer. */ "Rewards" = "Nagrody"; +/* No comment provided by engineer. */ +"Save" = "Zapisz"; + +/* No comment provided by engineer. */ +"Save Changes" = "Zapisz Zmiany"; + /* No comment provided by engineer. */ "Scan" = "Zeskanuj"; /* No comment provided by engineer. */ "Scan Private Key" = "Skanuj Klucz Prywatny"; +/* No comment provided by engineer. */ +"Scan QR" = "Skanuj QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Zeskanuj Kod QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screeny są widoczne dla innych aplikacji i urządzeń. Wygeneruj nową frazę odzyskiwania danych i zachowaj ją w tajemnicy."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Szukaj kontaktu"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Szukanie użytkownika o nazwie %@ na Sieci Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Zabezpiecz swój portfel "; + /* No comment provided by engineer. */ "Security" = "Bezpieczeństwo"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Sprawdź na Uphold"; +/* No comment provided by engineer. */ +"Select" = "Wybierz"; + /* Coinbase */ "Select a coin" = "Wybierz monetę"; /* Buy Sell Dash */ "Select a service" = "Wybierz usługę"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Wybierz z Galeri"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Wybierz monetę"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Wyślij %@ Dash z głównego adresu Dash, który jest obecnie połączony z twoim kontem CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Wyślij ponownie"; + /* No comment provided by engineer. */ "Send Contact Request" = "Wyślij zaproszenie do kontaktów"; +/* No comment provided by engineer. */ +"Send Invitation" = "Wyślij zaproszenie"; + /* Coinbase CrowdNode */ "Send Report" = "Wyślij Raport"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Wyślij do"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Wyślij do Kontaktu"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Wyślij do skopiowanego adresu lub kodu QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Wysyłam"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Wysyłanie zaproszenia do kontaktów"; + /* No comment provided by engineer. */ "Sending to" = "Wysyłanie do"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Ustaw PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Ustaw swój PIN"; + /* No comment provided by engineer. */ "Settings" = "Ustawienia"; /* No comment provided by engineer. */ "Setup Wallet" = "Ustaw Portfel"; +/* CrowdNode */ +"Share" = "Udostępnij"; + /* Receive screen */ "Share address" = "Udostępnij Adres"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Rób zakupy z Dash u ponad 150k handlowców"; - /* Enter Address Screen */ "Show content in the clipboard" = "Pokaz zawartość schowka"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Pokaż Klucze Masternoda"; +/* CrowdNode */ +"Show QR" = "Pokaż QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Pokaż Frazy Odzyskiwania Portfela"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Lokata"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Krok %Id"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Wsparcie"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Synchronizowanie..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Oznacz swoje referencje"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Zrób zdjęcie"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Naciśnij, adres ze schowka, aby go wkleić"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategoria Podatkowa"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Łańcuch synchronizuje się…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Kod jest nieprawidłowy. Spróbuj ponownie!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "Sieć Dash jest kierowana przez Masternody które są niezbędną częscią infrastruktury przeznaczonej do dokonywania transakcji. "; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash został pomyślnie przelany na twoje konto Coinbase, ale wystąpił błąd podczas transferu monet do twojego portfela Dash."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "Wybrany obrazek będzie anonimowo wrzucony na Imgur "; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Minimalna kwota jaką możesz wysłać to %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "ich (pobieranie informacji)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Nie ma nowych powiadomień"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Twoje kontakty nie zawierają żadnego użytkownika pasującego do nazwy %@"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Wystąpił błąd podczas generowania nowego adresu"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Ten QR już zawiera żądanie płatności %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Odpowiada to aktualnemu rocznemu oprocentowania pełnego Masternode pomniejszonemu o 15% jako opłata dla CrowdNode. Nie jest to gwarantowana stopa zwrotu i może wzrosnąć lub spaść w zależności od wielkości pul na CrowdNode i ceny Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Portfel ten dalej ma fundusze lub synchronizacja nie jeszcze nie została ukończona. Nie możesz wymazać tego portfela bez listy słów wymaganych do odzysku portfela."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "Do portfela Dash na tym urządzeniu"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Aby otworzyć lokatę, stwórz konto na CrowdNode lub zaloguj się do już istniejącego konta."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "na adres z portfela na tym urządzania, który jest podłączony do twojego konta CrowdNode."; + /* No comment provided by engineer. */ "Tools" = "Narzędzia"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Całkowite"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Historia Transakcji"; + /* No comment provided by engineer. */ "Transaction id" = "Transakcja id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Przetransferuj Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Prześlij Dash ze swojego konta Uphold do tego portfela"; - /* CrowdNode */ "Transfer Error" = "Błąd Przelewu"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Spróbuj jeszcze raz"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Włącz hasło urządzenia"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Wymagane jest uwierzytelnianie dwuetapowe."; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Zaakcptowanie zaproszenia nie powiodło się"; + /* No comment provided by engineer. */ "Unable to connect" = "Połączenie jest niemożliwe"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Pobranie informacji kontaktu nie powiodło się"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Niepowidoło się pobranie obrazka. Wprowadź prawidłowy URL lub sprawdź swoje połącznie internetowe."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Niepowiodło się pobranie Gravatara. Wprowadź prawidłwy identyfikator emaila gavatar. "; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Pobranie nowego kodu QR niemożliwe"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Niemożliwe dostarczenie żadnych sugesti"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Wysłanie zaproszenia do kontaktów nie powiodło się"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Niemożliwe jest wrzucnie twojego obrazka. Spróbuj ponownie."; + /* No comment provided by engineer. */ "Unknown" = "Nieznany"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Nieobsługiwany URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Zaktualizowany %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Aktualizacja Ceny"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Opłata za Ulepszenie"; +"Updating Profile on Dash Network" = "Trwa aktualizacja twojego profilu na Sieci Dash"; + +/* No comment provided by engineer. */ +"Upgrade" = "Aktualizuj"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Przenieś sie na Ewolucję"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Ulepszenie do DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Błąd podczas wysyłania"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Wrzuć swoją fotkę aby spersonolizwać swój profil. "; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Trwa wysyłanie twojego zdjęcia do sieci"; + /* Explore Dash/Filters */ "Use gift card" = "Użyj karty podarunkowej"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Użyty w:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "Użytkownik (pobierz informacje)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Użytkownik został już znaleziony"; + +/* No comment provided by engineer. */ +"Username available" = "Nazwa jest dostępna"; + /* No comment provided by engineer. */ "Username taken" = "Nazwa użytkownika jest już zajęta"; -/* CrowdNode Portal */ -"Validating address…" = "Walidacja adresu..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Koniec walidacji nazwy użytkownika"; +"Users that matches %@ who are currently not in your contacts" = "Użytkownicy którzy pasują do %@ ale nie są w twoich kontaktach"; + +/* CrowdNode Portal */ +"Validating address…" = "Walidacja adresu..."; /* No comment provided by engineer. */ "Validating username failed" = "Walidacja nazwy użytkownika nie powiodła się"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Zweryfikuj"; +/* CrowdNode */ +"Verify your API Dash address" = "Zweryfikuj swój adres API Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Bardzo Wysoki"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Mała kwota Dash zostanie wysłana z i do CrowdNode aby zweryfikować że jesteś właścicielem tego adresu. "; + /* No comment provided by engineer. */ "View All" = "Zobacz wszystkie"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Pokaż Frazę Odzyskiwania Portfela"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Adres Głosowania"; /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Poczekaj aż łańcuch będzie w pełni zsynchronizowany abyśmy mogli przejrzeć Twoją historię transakcji. Odwiedź stronę CrowdNode aby się zalogować lub zarejestrować."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "My zaktualizowaliśmy"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Automatycznie wykryjemy tę transakcję i wyślemy tę samą kwotę na Twoje konto CrowdNode. Następnie będziesz mógł wykonywać wpłaty i wypłaty z portfela Dash na tym urządzeniu."; + /* Website */ "Website" = "Strona internetowa"; /* No comment provided by engineer. */ "Welcome" = "Witaj"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Witaj w DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Po potwierdzeniu transakcji, drugi portfel będzie bezwartościowy i nie powinien być ponownie wykorzystywany ze względów bezpieczeństwa."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Dlaczego widzę te wszystkie transakcje?"; +/* CrowdNode */ +"Why do you need an online account?" = "Dlaczego potrzebujesz konto online?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Dlaczego mam nie robić zrzutu ekranu?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Żądanie wypłaty"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Chcesz zaakcptować zaprosznie?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Czy chcesz dokonać depozytu na twój zakup z połączonego konta bankowego?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Zapisać zmiany w profilu?"; + /* No comment provided by engineer. */ "Yes" = "Tak"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Za chwilę wyczyścisz ten portfel z tego urządzenia. Fundusze powiązane z tym portfelem można odzyskać tylko wtedy, gdy masz frazy odzyskiwania."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "Zawsze masz możliwość skasowania zdjęcia jeśli masz dostęp do portfela. "; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Możesz dokonać uwierzytelnienia za pomocą Face ID dla płatności poniżej"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Możesz dokonać uwierzytelnienia za pomocą Touch ID dla płatności poniżej"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Możesz zmienić sposób, w jaki lub kiedy twoje zarobki są wypłacane."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Możesz zobaczyć szczegółowe informacje na temat swoich depozytów, wypłat oraz zarobków."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "Możesz wybrać jakikolwiek URL jeśli jest publicznie dostępny na internecie i inni użytkownicy mogą go widzieć na sieci Dash."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "Nie możesz odebrać tego zaproszenia, ponieważ już masz własną nazwę użytkownika na sieci Dash."; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "Jak na razie nie masz żadnych kontaktów. "; + +/* Coinbase */ +"You don’t have enough balance" = "Nie masz wystarczająco środków"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Przekroczyłeś limit autoryzacji na Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Wybrałeś \"%@\" jako swoją nazwę użytkownika. Jeżeli ją zarejestrujesz to nie może zostać ona później zmieniona."; +"You have been invited by %@. Start using Dash cryptocurrency." = "Zostałeś zaproszony przez %@. Zacznij używać Dash."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "Wybrałeś \"%@\" jako swoją nazwę użytkownika. Jeśli zostanie ona zarejerstrowana, to nie może zostać zmieniona później. "; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Nie masz wystarczających środków aby kontynować"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Musisz zapisać hasło w Portfelu Dash"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Musisz podać swój PIN, aby wejść do Portfela Dash"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "Potrzebujesz co najmniej %@ Dashy aby stworzyć zaproszenie"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Potrzebujesz co najmniej %@ w swoim portfelu Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Potrzebujesz tylko %@ aby dołączyć do puli stakowania."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Musisz mieć co najmniej %@ aby kontynuować weryfikację z CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Potrzebujesz także wylogować się z przeglądarki na swoim koncie Uphold "; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Szyk słów do odzysku portfela będzie potrzebny aby mieć dostęp do funduszy w wypadku uszkodzenia, utraty tego urządzenia lub jeśli Dash Wallet zostanie przypadkowo odinstalowany. "; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Otrzymasz %@ do portfela Dash na tym urządzeniu. Transfer może zająć 2-3 minuty. "; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Będziesz otrzymywać częściowe płatności automatycznie i domyślnie będą one reinwestowane, jednak jęsli chcesz możesz też ustawić automatyczne wypłaty."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Otwieramy twoje konto CrowNode..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Otrzymaliśmy twój depozyt."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Twój Email nie jest przechowywany w portfelu Dash lub na serwerach sieci. Jest on użyty tylko raz aby pobrać detale twojego konta Gravatar, i później jest kasowany. "; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Twoje zaproszenie od %@ zostało już odebrane"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Twoje zaproszenie od %@ jest nieważne"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Twoja lokalizacja jest używana aby pokazać Twoją pozycje na mapie, ATMy w zaznaczonym okręgu oraz by usprawnić wyniki wyszukiwania."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Używamy twojej lokalizacji do pokazania twojej pozycji na mapie, kupców w wybranym promieniu oraz do ulepszenia wyników wyszukiwania."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Twoja transakcja została wysłana a ilość powinna pojawić się na Twoim koncie w kilka minut."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Twój główny adres Dash które jest obecnie połączone z kontem CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Stan Twojego konta Uphold w Dash to"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Twoja transakcja została wysłana a ilość powinna pojawić się na Twoim koncie w kilka minut."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Twoja nazwa użytkownika %@ została stworzona na Sieci Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Twoja nazwa użytkownika %@ jest tworzona na Sieci Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Twój portfel jest teraz zabezpieczony. Możesz użyć swojej frazy odzyskiwania w dowolnym momencie, aby odzyskać konto na innym urządzeniu."; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 267f70ab1..4d74a77a5 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ não tem permissão para acessar Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processando Pagamento"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Sobre"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Aceitar"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Aceitar DASH diretamente"; +/* CrowdNode */ +"Account Recovery" = "Recuperação de Conta"; + /* No comment provided by engineer. */ "Activity" = "Atividade"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Adicione um Novo Contato"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Endereço"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Segurança Avançada"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Todos"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "e"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Tem certeza de que deseja cancelar esta transação?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Você tem certeza?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "A pesquisa de Caixas Eletrônicos funciona melhor com os Serviços de Localização ativados"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Saldo:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transferência bancária"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Torne-se parte de um Masternode Dash com CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Entre Carteira Dash e Coinbase."; +"Between Dash Wallet and Coinbase" = "Entre Carteira Dash e Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Entre Carteira Dash e sua conta Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Compre Dash com fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Compre Dash com sua conta Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Compre Dash · Não é necessário ter uma conta"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Compre cartões presente com seu Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Comprar/Vender"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Ao limpar este dispositivo, você não terá mais acesso a fundos neste dispositivo. Isso só deve ser feito se você não tiver mais acesso à sua frase secreta e também tiver esquecido o código PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancelar"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Cancelar esta transação não cancela a ordem de negociação. Você receberá DASH em sua conta Coinbase em breve."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Mudar PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Verifique sua conexão"; /* Choose your Dash username */ "Choose your" = "Escolha seu"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Limpar"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Fechar"; +/* CrowdNode */ +"Close and notify when it’s done" = "Fechar e notificar quando finalizar"; + /* No comment provided by engineer. */ "Close App" = "Fechar App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Taxa Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Confirme"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirme & Pague"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirmar (%@)"; +"Confirm" = "Confirme"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmar (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirmar PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirmando"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Conectado"; +/* CrowdNode */ +"Connected Dash address" = "Endereço Dash conectado"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Pares conectados: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copiar"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copiar logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Não foi possível conectar à rede Dash, por favor verifique se você está conectado à internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Não foi possível encontrar a taxa de câmbio."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Não foi possível fazer o pagamento"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Não foi possível transmitir o pagamento à rede Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Criar uma Nova Carteira"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Criar Conta"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Crie uma conta online do CrowdNode"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Criar conta online"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Cartão de crédito"; /* Crowdnode */ "CrowdNode Account" = "Conta CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Benefícios CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Suporte CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode usa este endereço como seu ID da conta. Você perderá o acesso aos seus fundos nesta carteira e à sua conta CrowdNode se perder a frase de recuperação associada a este endereço."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Limites de retirada do CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Endereço Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash na Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Saldo Dash na Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Pagamentos Dash não podem ser menores que %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Carteira Dash neste dispositivo"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Taxa de Upgrade do DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Moeda padrão, atalhos, sobre..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Desconectar conta Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Desconectar conta Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Desconectado"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distância"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Não faça uma captura de tela"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Feito"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "por exemplo: johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Recentes"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Realize facilmente operações de stake no Dash e ganhe renda passiva com apenas alguns cliques."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "ex: joaosilva"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Digite abaixo seu código de autenticação de dois fatores \"2FA\""; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Erro"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Erro no Upgrade"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Sair"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Taxas em compras de criptomoedas"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Buscando informação"; /* Coinbase/Payment Methods */ "Fiat Account" = "Conta Fiat"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtrar Transações"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtrado por:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Encontre um usuário na rede Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encontre comerciantes que aceitem Dash, descubra onde comprar e como gerar renda com ele. "; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Encontre comércios que aceitam Dash como pagamento."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "O primeiro depósito deve ser superior a %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Para sua segurança, você foi desconectado."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "da Carteira Dash"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Da Uphold à sua Carteira Dash"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Da Uphold à sua Carteira Dash"; /* Coinbase */ "from your Coinbase account" = "da sua conta Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ganhe recompensas de depósitos em Dash Masternodes com apenas 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Gerar chaves públicas estendidas?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Obter cotação"; +/* CrowdNode */ +"Get Rewards Instantly" = "Receba Recompensas Instantaneamente"; + /* No comment provided by engineer. */ "Get Started" = "Começar"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Introdução ao CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Vale-presente"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Ajude-nos a melhorar a sua experiência"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Alto"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Histórico"; +/* CrowdNode */ +"How CrowdNode staking works" = "Como funciona o staking no CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Como confirmar seu endereço de API Dash"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Como Usar um Cartão Presente"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Chaves de Identificação de Nós Evolution "; /* No comment provided by engineer. */ "I Accept" = "Eu Aceito"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Eu concordo com o CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Eu anotei"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Se você perder sua frase de recuperação, poderá ser verificado por outros meios para recuperar o acesso aos seus fundos do CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Se você perder sua frase de recuperação para esta carteira, perder este dispositivo ou desinstalar a Carteira Dash, você perderá o acesso aos seus fundos no CrowdNode e aos fundos desta carteira."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Se você ainda gostaria de limpá-lo por favor insira: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Se desejar salvar manualmente as transações reclassificadas, você deve exportar um arquivo de transação CSV."; /* No comment provided by engineer. */ "Ignore" = "Ignorar"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Imediatamente"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Além da taxa Coinbase exibida, nós incluímos um spread no preço. Ao usar o Advanced Trade, nenhum spread é incluído porque você está interagindo diretamente com o livro de pedidos.\n\nOs mercados de criptomoedas são voláteis e isso nos permite bloquear temporariamente um preço para a execução da negociação."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "Processando..."; /* No comment provided by engineer. */ "Income" = "Receita"; +/* CrowdNode */ +"Information about your online account" = "Informações sobre sua conta online"; + /* Buy Sell Portal */ "Initializing" = "Inicializando"; /* No comment provided by engineer. */ "Insufficient funds" = "Fundos insuficientes"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transferência Interna"; /* No comment provided by engineer. */ "Internally moved to" = "Movido internamente para"; +/* CrowdNode */ +"Introducing Staking" = "Introdução ao Staking"; + /* Invalid transaction */ "Invalid" = "Inválido"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Valor inválido"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Endereço Dash inválido"; /* CrowdNode Online */ "Invalid Email" = "E-mail inválido"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Entrada inválida"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Solicitação de Pagamento Inválida"; /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code Inválido"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Pode levar um minuto para que seu saldo seja atualizado."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Pode levar até 10 minutos para transferir o Dash da Coinbase para a Carteira Dash neste dispositivo."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Parece que você está tentando restaurar sua carteira usando uma frase de recuperação de 12 palavras, no entanto, você inseriu apenas 10 palavras, você gostaria de recuperar automaticamente as palavras que faltam? Isso pode levar cerca de uma hora. Recomendamos conectar seu dispositivo em um carregador."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Parece que você está tentando restaurar sua carteira usando uma frase de recuperação de 12 palavras, no entanto, você inseriu apenas 11 palavras, você gostaria de recuperar automaticamente as palavras que faltam?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Junte-se ao Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Entrando no \"pool\""; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Identificador de Chave"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Saiba mais..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Me avise quando estiver pronto"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Apenas letras e números"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Conectar Conta Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Vincular Conta Existente"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Vincular Conta Existente no CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Faça login no CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Sair"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Sair do Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Baixo"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Gerenciar permissão de GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Chaves do Masternode"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Atualização de Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Máximo"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Máximo de %ld caracteres"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Média"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Os membros são livres para sair do pool e na maioria das vezes podem sair imediatamente."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "A pesquisa de comércios funciona melhor com os Serviços de Localização ativados."; -/* Validation rule */ -"Minimum 3 characters" = "Mínimo de 3 caracteres"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Mais"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Mais Controle"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Movido de"; /* No comment provided by engineer. */ "Moved to Address" = "Movido para Endereço"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Meus Contatos"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Novo"; +/* CrowdNode */ +"New CrowdNode Account" = "Nova conta CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Dispositivo NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Nenhum usuário ativo"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Sem métodos de pagamento"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Não é um endereço Dash válido"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nem todas as lojas aceitam DASH diretamente, mas você pode comprar um cartão presente com seu Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Assim que %@ aceitar seu pedido, você poderá Pagar Diretamente ao Nome de Usuário"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Comércio Online"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Chaves do Operador"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Visualização do pedido"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Chaves do Proprietário"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pagar"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pagar Diretamente ao Nome de Usuário"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pagar com"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo de Pagamento"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Opções de Pagamento"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "por transação"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN é sempre necessário para realizar um pagamento"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Por favor, verifique sua conexão de rede"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Por favor, insira seu PIN para atualizar a carteira"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Por favor, observe que o e-mail não é salvo pela Carteira Dash e é enviado apenas para o CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Por favor, observe que você não poderá retirar seus fundos do CrowdNode para esta carteira até que aumente seu saldo para %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Por favor, tente escanear novamente"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Por favor, aguarde"; /* No comment provided by engineer. */ "Please wait" = "Espere por favor"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Por favor, aguarde até que a carteira esteja totalmente sincronizada antes de exportar seu histórico de transações."; /* No comment provided by engineer. */ "Please write it down" = "Por favor, anote"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Anteriormente usado em:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Chaves Públicas / Privadas (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Proteja suas economias"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Endereço do Provedor"; @@ -1194,7 +1644,10 @@ "Public key" = "Chave pública"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Chave Pública (legado)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "Comprar"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Receber Rapidamente"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quórums validados: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receba diretamente na sua Carteira Dash"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receba sua parte de recompensas diariamente."; + /* Received transaction */ "Received" = "Recebido"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Recebido de"; +/* CrowdNode */ +"Receiving rewards" = "Recebendo recompensas"; + /* No comment provided by engineer. */ "Recover" = "Recuperar"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Reportar um Problema"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Reescanear"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Avaliar o App"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Recompensa"; /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; /* No comment provided by engineer. */ "Scan Private Key" = "Scanear Chave Privada"; +/* No comment provided by engineer. */ +"Scan QR" = "Digitalizar QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scanear Código QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Capturas de Tela são visíveis para outros dispositivos e aplicativos. Gere uma nova frase de recuperação e a mantenha secreta."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Pesquisar um contato"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Pesquisar pelo usuário %@ na Rede Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Segurança"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Veja no Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Selecionar uma moeda"; /* Buy Sell Dash */ "Select a service" = "Selecione um serviço"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Selecione a moeda"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Envie %@ do seu endereço primário Dash utilizado atualmente para sua conta CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Enviar Solicitação de Contato"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Enviar Relatório"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Enviar para"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Envie para o endereço copiado ou código QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Enviando"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Enviando para"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Definir PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Ajustes"; /* No comment provided by engineer. */ "Setup Wallet" = "Configurar Carteira"; +/* CrowdNode */ +"Share" = "compartilhe"; + /* Receive screen */ "Share address" = "Compartilhar endereço"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Compre com DASH em mais de 150 mil comércios"; - /* Enter Address Screen */ "Show content in the clipboard" = "Exibir conteúdo na área de transferência "; /* No comment provided by engineer. */ "Show Masternode Keys" = "Mostrar Chaves de Masternode"; +/* CrowdNode */ +"Show QR" = "Mostrar QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperação"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Suporte"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Sincronizando..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Toque no endereço da área de transferência para colá-lo"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoria fiscal"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "A cadeia está sendo sincronizada…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Código incorreto. Por favor, verifique e tente novamente!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "O Dash foi depositado com sucesso na sua conta Coinbase. Mas houve um problema ao transferi-lo para a Carteira Dash neste dispositivo."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "A quantidade mínima que você pode enviar é %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Não há novas notificações"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Não há usuários que correspondam ao nome %@ nos seus contatos"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Ocorreu um erro ao obter o novo endereço"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Este QR já contém a solicitação de pagamento de %@ Dash"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Isso representa o Rendimento Percentual Anual (Annual Percentage Yield - APY) atual de um Masternode completo menos a taxa de 15% do CrowdNode. Não é uma taxa de retorno garantida e pode aumentar ou diminuir com base no tamanho dos pools do CrowdNode e no preço do Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Essa carteira não está vazia ou a sincronização ainda não terminou, você não deve limpá-la sem a frase de recuperação"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "para a Carteira Dash neste dispositivo"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Para iniciar as operações de staking, crie uma conta no CrowdNode ou conecte-se a uma existente."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "para o endereço Dash designado para sua conta CrowdNode na Carteira Dash neste dispositivo"; + /* No comment provided by engineer. */ "Tools" = "Ferramentas"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Limite de ID de toque"; +/* CrowdNode */ +"Transaction History" = "Histórico de Transações"; + /* No comment provided by engineer. */ "Transaction id" = "Id da transação"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transferir Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transferir Dash da sua conta Uphold para essa carteira"; - /* CrowdNode */ "Transfer Error" = "Erro de transferência"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Tentar de novo"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Habilite a senha de dispositivo"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Autenticação de dois fatores necessária"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Não foi possível conectar"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Não foi possível obter um novo código QR"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Desconhecido"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "URL não suportada"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Atualizado: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Atualizando Preço"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Taxa de Upgrade"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrade para DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Usar vale-presente"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Utilizado em:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Nome de usuário já foi registrado"; -/* CrowdNode Portal */ -"Validating address…" = "Validando endereço…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validação de nome de usuário concluída"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validando endereço…"; /* No comment provided by engineer. */ "Validating username failed" = "Validação de nome de usuário falhou"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verificar"; +/* CrowdNode */ +"Verify your API Dash address" = "Verifique seu endereço de API Dash"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Muito Alto"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Quantidades muito pequenas de Dash serão enviadas de/para CrowdNode para verificar se você é o proprietário desta carteira."; + /* No comment provided by engineer. */ "View All" = "Ver Tudo"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ver Frase de Recuperação"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Endereço de Votação"; /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Aguarde até que a cadeia esteja totalmente sincronizada para que possamos revisar seu histórico de transações. Visite o site do CrowdNode para fazer login ou se inscrever."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Nós Atualizamos"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Iremos detectar automaticamente esta transação para transferir o mesmo valor para sua conta CrowdNode. Depois disso, você poderá fazer depósitos e saques na Dash Wallet neste dispositivo."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Bem-vindo"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Quando a transação esteja confirmada, a outra carteira será inutilizada e não deve ser utilizada por razões de segurança."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Por que vejo todas essas transações?"; +/* CrowdNode */ +"Why do you need an online account?" = "Por que você precisa de uma conta online?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Por que não devo fazer uma captura de tela?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Saque solicitado"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Sim"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Você está prestes a limpar esta carteira desse dispositivo. Fundos associados a essa carteira poderão ser recuperados apenas se você tiver a sua frase de recuperação."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Você pode autenticar com Face ID para pagamentos abaixo de"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Você pode autenticar com Touch ID para pagamentos abaixo de"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Você pode alterar como / quando seus ganhos de recompensa serão pagos."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Você pode ver informações detalhadas sobre seus depósitos, saques e ganhos de recompensa."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Você não tem saldo suficiente"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Você excedeu o limite de autorização na Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Você escolher \"%@\" como seu nome de usuário. Seu nome de usuário não pode ser alterado depois de registrado."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Você não tem fundos suficientes para prosseguir."; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Você precisa fazer backup da sua frase de recuperação na Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Você deve inserir o seu PIN para poder ingressar à sua carteira Dash"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Você precisa de pelo menos %@ Dash em sua carteira"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Você só precisa de %@ para entrar no pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Você deve ter pelo menos %@ Dash para prosseguir com a verificação do CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Também será necessário sair do site da Uphold utilizando seu navegador"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Você precisará desta frase de recuperação para acessar seus fundos caso este dispositivo seja perdido, danificado ou se a Carteira Dash for desinstalada deste dispositivo."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Você receberá %@ Dash em sua Carteira Dash neste dispositivo. Por favor, observe que pode levar de 2 a 3 minutos para completar a transferência. "; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Você receberá pagamentos fracionados automaticamente e eles serão reinvestidos por padrão, no entanto, também é fácil configurar saques automáticos para receber pagamentos recorrentes."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Sua conta CrowdNode está sendo criada…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Seu depósito no CrowdNode foi recebido."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Sua localização é usada para mostrar sua posição no mapa, caixas eletrônicos no raio selecionado e melhorar os resultados da pesquisa."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Sua localização é usada para mostrar sua posição no mapa, comércios no raio selecionado e melhorar os resultados da pesquisa."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Sua transação foi enviada e o valor aparecerá na sua carteira em alguns minutos. "; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Seu endereço primário Dash que você usa atualmente para sua conta CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Seu saldo Dash na conta Uphold é "; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Sua transação foi enviada e o valor aparecerá na sua carteira em alguns minutos. "; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Seu nome de usuário %@ foi criado com sucesso na Rede Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Seu nome de usuário %@ está sendo criado na Rede Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = " Sua carteira está segura agora. Você pode usar sua frase de recuperação em qualquer momento para recuperar sua conta em outro dispositivo."; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 36a77e83a..8cdf8237d 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Despre"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresă"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Ești sigur?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Sold"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Cumpără Dash cu contul Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Dacă ștergi acest dispozitiv nu vei mai avea acces la fondurile de pe el. Acest lucru trebuie făcut numai dacă nu mai ai fraza de acces și ai uitat codul PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Anulează"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirmă"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirmă"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copiază"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copiază Jurnalele"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Nu se poate găsi cursul de schimb."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Plata nu a putut fi efectuată"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Plata către rețeaua Dash nu a putut fi decontată"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Adresa Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Gata"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Introdu codul tău 2FA mai jos"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Eroare"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Am scris-o"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Dacă dorești într-adevăr să o ștergi, introdu: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignoră"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Fonduri nesuficiente"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out din Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Chei De Operator"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Cheile Proprietarului"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Plătește"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Introdu codul PIN pentru a actualiza portofelul"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Te rog scrie"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Primiţi"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Scanează din nou"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scanează"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scanează Codul QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshot-urile sunt vizibile altor aplicații și dispozitive. Generează o nouă frază de recuperare și păstreaz-o secretă."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Vezi pe Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Setări"; /* No comment provided by engineer. */ "Setup Wallet" = "Configurează Portofelul"; +/* CrowdNode */ +"Share" = "Distribuie"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Acest portofel nu este gol sau nu s-a terminat sincronizarea, nu puteți șterge fără fraza de recuperare"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "limita pentru Touch ID"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "ID-ul de tranzacție"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transferă Dash din contul Uphold către acest portofel"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Actualizarea Prețului"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Chei de Vot"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "De asemenea, va trebui să te deconectezi de pe site-ul Uphold folosind browserul tău."; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tranzacția ta a fost trimisă, iar suma trebuie să apară în portofel în câteva minute."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Soldul Dash al contului tău Uphold "; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tranzacția ta a fost trimisă, iar suma trebuie să apară în portofel în câteva minute."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index c5e0b39a6..bd2765e23 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ запрещен доступ к Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld символов"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Обработка платежа "; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "О программе"; +/* No comment provided by engineer. */ +"About me" = "Обо мне"; + /* No comment provided by engineer. */ "Accept" = "Подтвердить"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Принять DASH напрямую"; +/* CrowdNode */ +"Account Recovery" = "Восстановление аккаунта"; + /* No comment provided by engineer. */ "Activity" = "Активность"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Добавить новый контакт"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Добавить друзей и членов семьи"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Адрес"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Настройки безопасности"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Согласиться"; + /* No comment provided by engineer. */ "All" = "Все"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = " и "; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Вы уверены, что хотите отменить транзакцию?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Вы уверены?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Часто у людей нет на руках суммы в 1000 Dash, и CrowdNode создал сервис, где можно получить преимущества владения мастернодой за счёт вкладов участников в общий пул."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Поиск банкоматов работает лучше всего с включенными службами геолокации."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Баланс"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Баланс CrowdNode"; /* CrowdNode */ "Balance: " = "Баланс:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Банковский перевод"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Станьте частью мастерноды Dash вместе с CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "От %1$ld до %2$ld символов"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Между Dash Wallet и Coinbase."; +"Between Dash Wallet and Coinbase" = "Между Dash Wallet и Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Между Dash Wallet и вашим аккаунтом Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Купить Dash за фиат"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Купить Dash с помощью Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Купить Dash · Без учётной записи"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Покупайте подарочные карты с помощью Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Куп/Прод"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Удалив кошелёк, у Вас больше не будет доступа к средствам на этом устройстве. Данное действие следует совершать только в том случае, если у Вас больше нет доступа к вашей кодовой фразе и Вы также забыли свой PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Отмена"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Отмена транзакции не повлияет на торговый ордер. Вскоре DASH поступит на ваш счёт в Coinbase."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Изменить PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Проверьте ваше интернет-соединение"; /* Choose your Dash username */ "Choose your" = "Выберите ваше"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Выберите имя пользователя"; + +/* No comment provided by engineer. */ +"Claimed" = "Уже занято"; + /* No comment provided by engineer. */ "Clear" = "Удалить"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Закрыть"; +/* CrowdNode */ +"Close and notify when it’s done" = "Закрыть и уведомить о завершении"; + /* No comment provided by engineer. */ "Close App" = "Закрыть приложение"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Комиссия Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Подтвердить"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Подтвердить и оплатить"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Подтвердить (%@)"; +"Confirm" = "Подтвердить"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Подтвердить (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Подтвердите PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Подтверждается"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Подключено"; +/* CrowdNode */ +"Connected Dash address" = "Связанный адрес Dash "; + /* No comment provided by engineer. */ "Connected peers: %d" = "Подключенные узлы: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Копировать"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Скопировать ссылку-приглашение"; + /* No comment provided by engineer. */ "Copy Logs" = "Копировать логи"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Невозможно подключиться к сети Dash. Пожалуйста, проверьте подключены ли вы к Интернету. "; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Не удалось найти обменный курс."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Не удалось совершить платёж"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Не удалось передать платёж в сеть Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Создать новое Приглашение"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Создать новое приглашение"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Создать новый кошелек"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Создайте имя пользователя, добавьте друзей."; + /* CrowdNode */ "Create Account" = "Создать аккаунт"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Создать онлайн-аккаунт CrowdNode"; + +/* No comment provided by engineer. */ +"Create invitation" = "Создать приглашение"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Создать онлайн аккаунт"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Создайте имя пользователя, найдите членов семьи и друзей по именам пользователей и добавьте их в список контактов"; + /* Coinbase/Payment Methods */ "Credit Card" = "Кредитная карта"; /* Crowdnode */ "CrowdNode Account" = "Аккаунт CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Как присоединиться к пулу"; + /* CrowdNode Portal */ "CrowdNode Support" = "Поддержка CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "Этот адрес используется в CrowdNode как ваш ID. Если вы потеряете кодовую фразу, связанную с этим аккаунтом, то вы потеряете доступ к средствам внутри этого кошелька и этот аккаунт на CrowdNode."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Лимит CrowdNode на вывод"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Адрес Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash адрес, созданный для вашего аккаунта CrowdNode в Dash Wallet на этом устройстве"; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Баланс Dash на Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Баланс Dash на Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Платежи Dash не могут быть меньше, чем %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet на этом устройстве"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "Приглашение DashPay"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Комиссия за обновление DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Дата"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Валюта по умолчанию, ссылки, о программе…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Отключить аккаунт Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Отключить аккаунт Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Подключение отсутствует"; +/* No comment provided by engineer. */ +"Display Name" = "Отображаемое имя"; + /* Explore Dash: Filters */ "Distance" = "Расстояние"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Не делайте скриншот"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Готово"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "например, johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Каждое приглашение сопровождается этой суммой, чтобы получатель мог тут же создать своё имя пользователя в сети Dash"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Ранее"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Отправьте Dash в стейкинг и получите пассивный доход всего за несколько кликов."; +/* No comment provided by engineer. */ +"Edit Profile" = "Редактировать профиль"; + +/* Invitation tag placeholder */ +"eg: Dad" = "напр.: Папа"; + /* Input username textfield placeholder */ "eg: johndoe" = "напр.: ИванИванов"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Введите код 2FA ниже"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Введите Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Ошибка"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Ошибка при обновлении профиля"; + /* No comment provided by engineer. */ "Error Upgrading" = "Ошибка при обновлении"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Выход"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Комиссия при покупке криптовалюты"; +/* No comment provided by engineer. */ +"Fetching Image" = "Загружается изображение"; + /* Explore Dash */ "Fetching Info" = "Получение данных"; /* Coinbase/Payment Methods */ "Fiat Account" = "Фиатный счёт"; +/* No comment provided by engineer. */ +"Filter" = "Фильтр"; + /* No comment provided by engineer. */ "Filter Transactions" = "Показать транзакции"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Отфильтровано по:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Найти пользователя в сети Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Найти магазины, где принимают DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Узнайте, где принимают Dash, где можно купить монеты и как получить доход с их помощью. "; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Найдите места где принимают DASH в качестве оплаты."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Первый депозит должен быть не менее %@"; +/* CrowdNode */ +"First minimum deposit" = "Первый минимальный депозит"; + /* Coinbase */ "For your security, you have been signed out." = "В целях безопасности был совершён выход из учётной записи."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "из Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "С Uphold на Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "С Uphold на ваш кошелёк Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "с аккаунта Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Получайте вознаграждение за инвестирование в мастерноды Dash, начиная с 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Создать расширенный публичный ключ?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Получить Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Получайте мгновенные вознаграждения"; + /* No comment provided by engineer. */ "Get Started" = "Начать"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Получить имя пользователя"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Начало работы с CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Подарочный сертификат"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Помогите нам стать лучше"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Это Dash адрес, созданный для вашего аккаунта CrowdNode в Dash Wallet на этом устройстве"; + /* adjective, security level */ "High" = "Высокий"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "История"; +/* CrowdNode */ +"How CrowdNode staking works" = "Как работает стейкинг CrowdNode "; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Как подтвердить свой API Dash адрес"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Как использовать подарочную карту"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Ключи идентификаторов Evolution нод"; /* No comment provided by engineer. */ "I Accept" = "Принимаю"; @@ -737,23 +947,50 @@ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я понимаю, что потеряю свои средства, если у меня не будет фразы восстановления"; /* CrowdNode */ -"I agree to CrowdNode" = "Согласен на CrowdNode"; +"I agree to CrowdNode" = "Согласен на CrowdNode "; + +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; /* No comment provided by engineer. */ "I wrote it down" = "Я записал"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "В случае, если вы потеряете кодовую фразу, для восстановления доступа к средствам на CrowdNode можно воспользоваться другими методами."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "В случае, если вы потеряете кодовую фразу от этого кошелька, потеряете устройство или удалите Dash Wallet, вы потеряете доступ к средствам на CrowdNode и средствам внутри этого кошелька."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Если Вы всё ещё хотите удалить кошелёк, пожалуйста, введите: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Если вы хотите сохранить введённые вручную типы транзакций, вам нужно выгрузить CSV-файл с транзакциями."; /* No comment provided by engineer. */ "Ignore" = "Игнорировать"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Загруженное изображение будет доступно всем."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Ссылка на изображение не может быть длиннее %ld символов."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Политика конфиденциальности для изображений"; + /* No comment provided by engineer. */ "Immediately" = "Немедленно"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Помимо отображённой комиссии Coinbase, мы учитываем небольшой разброс цены. При работе в режиме Продвинутой Торговли разброс цены не учитывается, потому что вы работаете напрямую с портфелем заказов. \n\nКриптовалютным рынкам свойственна волатильность, и таким образом мы временно замораживаем цену для совершения сделки. "; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "В случае вывода крупных сумм, CrowdNode выплатит эти суммы в течение двух недель. Это зависит от их протоколов безопасности, но часто платежи проводятся намного быстрее."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "В процессе..."; /* No comment provided by engineer. */ "Income" = "Доходы"; +/* CrowdNode */ +"Information about your online account" = "Информация о вашем онлайн аккаунте"; + /* Buy Sell Portal */ "Initializing" = "Инициализация"; /* No comment provided by engineer. */ "Insufficient funds" = "Недостаточно средств"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Недостаточно средств на балансе кошелька"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Внутренний перевод"; /* No comment provided by engineer. */ "Internally moved to" = "Внутренний перевод на"; +/* CrowdNode */ +"Introducing Staking" = "Введение в стейкинг"; + /* Invalid transaction */ "Invalid" = "Некорректная"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Некорректная сумма"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Некорректный адрес Dash"; /* CrowdNode Online */ "Invalid Email" = "Неверный Email"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Ошибка ввода"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Ссылка-приглашение недействительно"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Некорректный платёжный запрос"; /* No comment provided by engineer. */ "Invalid QR Code" = "Некорректный QR-код"; +/* No comment provided by engineer. */ +"Invitation" = "Приглашение"; + +/* Invitation #3 */ +"Invitation %ld" = "Приглашение %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Приглашение уже подтверждено"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Приглашение успешно создано"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Комиссия за приглашение"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "История приглашений"; + +/* No comment provided by engineer. */ +"Invite" = "Пригласить"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Пригласите кого-то присоединиться к сети Dash"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Пригласите членов семьи, найдите друзей по имени пользователя"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Пригласить членов семьи и друзей"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Пригласите друзей и членов семьи присоединиться к сети Dash."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Пригласите друзей и членов семьи в сеть Dash."; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Баланс обновляется в течение минуты."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Перевод Dash с Coinbase на Dash Wallet на этом устройстве может занять до 10 минут."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Кажется, вы пытаетесь восстановить свой кошелёк с помощью фразы восстановления из 12 слов. Однако, вы ввели только 10 слов. Хотите автоматически восстановить пропущенные слова? Это займёт примерно час. Рекомендуем подключить ваш гаджет к зарядному устройству."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Кажется, вы пытаетесь восстановить свой кошелёк с помощью фразы восстановления из 12 слов. Однако, вы ввели только 11 слов. Хотите автоматически восстановить пропущенное слово? "; +/* No comment provided by engineer. */ +"Join" = "Войти"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Войти в DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Присоединиться к Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Войти сейчас"; + +/* CrowdNode */ +"Joining the pool" = "Как присоединиться к пулу"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Ключ Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Узнать больше"; +/* CrowdNode */ +"Leaving the pool" = "Выход из пула"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Сообщить, когда будет готово"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Пусть ваши друзья и семья присоединятся к Dash."; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Пусть ваши друзья и семья присоединятся к сети Dash. Пригласите их в мир социального банкинга."; + /* Validation rule */ -"Letters and numbers only" = "Только цифры и буквы"; +"Letters, numbers and hyphens only" = "Только буквы, цифры и дефисы"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Давайте начнём"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Привязать аккаунт Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Привязать уже существующий аккаунт"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Привязать уже существующий аккаунт CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Войти в CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Выйти"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Выйти из Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Низкий"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Изменить разрешения GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Карта"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode ключи"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Обновление masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Макс"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Максимум %ld символа"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Может, чуть позже"; /* adjective, security level */ "Medium" = "Средний"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Участники могут свободно выходить из пула и чаще всего могут сделать это мгновенно."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Поиск продавцов работает лучше всего с включенными службами геолокации."; -/* Validation rule */ -"Minimum 3 characters" = "Минимум 3 символа"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Больше"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Больше контроля"; +/* No comment provided by engineer. */ +"More Suggestions" = "Больше предложений"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Подвигайте и увеличьте фото, чтобы найти идеальный вариант"; + /* No comment provided by engineer. */ "Moved from" = "Перемещено из"; /* No comment provided by engineer. */ "Moved to Address" = "Перемещно на адрес"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Должно начинаться и заканчиваться на цифру или букву"; + /* No comment provided by engineer. */ "My Contacts" = "Мои контакты"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Новые"; +/* CrowdNode */ +"New CrowdNode Account" = "Новый аккаунт CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC-устройство"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Отсутствует активный пользователь"; +/* Coinbase */ +"No cash account found" = " Денежный счет не найден"; + /* Coinbase/Buy Dash */ "No payment methods" = "Отсутствуют способы оплаты"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Некорректный адрес Dash"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Не все магазины принимают DASH напрямую, но вы можете купить подарочную карту с помощью Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "ОК"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Когда %@ примет ваш запрос, вы сможете оплатить напрямую по Имени пользователя"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Онлайн"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Интернет-магазин"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Ключи оператора"; +/* No comment provided by engineer. */ +"or" = "или"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Просмотр заказа"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Ключи владельца"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Вставьте ссылку на изображение"; + /* No comment provided by engineer. */ "Pay" = "Оплатить"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Оплатить напрямую по Имени пользователя"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Оплата по имени пользователя. Больше никаких цифробуквенных адресов"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Оплатить с помощью"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Способ оплаты"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Платежи напрямую по адресу будут работать как раньше. "; + +/* CrowdNode */ +"Payout Options" = "Варианты выплат"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "за транзакцию"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Персонализировать"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Всегда требовать PIN для совершения платежа"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Пожалуйста, проверьте ваше подключение к сети"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Пожалуйста, введите правильный gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Пожалуйста, введите правильную ссылку на изображение."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Пожалуйста, введите PIN для обновления кошелька"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Обратите внимание! Этот email не сохраняется в Dash Wallet, он всего лишь пересылается в Crowdnode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Помните, что вы не сможете вывести средства из CrowdNode на этот кошелёк, пока на балансе не будет хотя бы %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Попробуйте отсканировать еще раз"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Пожалуйста, подождите"; /* No comment provided by engineer. */ "Please wait" = "Пожалуйста, подождите"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Перед экспортированием истории транзакций дождитесь полной синхронизации кошелька "; /* No comment provided by engineer. */ "Please write it down" = "Пожалуйста, запишите её"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Предпросмотр приглашения"; + /* No comment provided by engineer. */ "Previously used at: " = "Ранее использовалось с:"; +/* CrowdNode */ +"Primary Dash address" = "Основной адрес Dash"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Приватные / Публичные ключи (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Защитите свои сбережения"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Адрес провайдера"; @@ -1194,7 +1644,10 @@ "Public key" = "Публичный ключ"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Публичный ключ (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Публичная ссылка"; /* Coinbase/Buy Dash */ "Purchase" = "Купить"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Получить быстро"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Утверждённые кворумы: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Получать напрямую на Dash Wallet."; +/* CrowdNode */ +"Receive your share of rewards daily." = "Получайте свою долю вознаграждения ежедневно."; + /* Received transaction */ "Received" = "Получено"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Получено от"; +/* CrowdNode */ +"Receiving rewards" = "Получение вознаграждений"; + /* No comment provided by engineer. */ "Recover" = "Восстановить"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Сообщить о проблеме"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Синхронизировать снова"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Оценить приложение"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Вознаграждение"; /* No comment provided by engineer. */ "Rewards" = "Вознаграждения"; +/* No comment provided by engineer. */ +"Save" = "Сохранить"; + +/* No comment provided by engineer. */ +"Save Changes" = "Сохранить изменения"; + /* No comment provided by engineer. */ "Scan" = "Скан."; /* No comment provided by engineer. */ "Scan Private Key" = "Сканировать приватный ключ"; +/* No comment provided by engineer. */ +"Scan QR" = "Сканировать QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Сканировать QR-код"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Скриншоты видимы другими приложениями и устройствами. Создайте новую фразу восстановления и держите её в секрете."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Поиск контакта"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Поиск имени пользователя %@ в сети Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Сохранить кошелёк"; + /* No comment provided by engineer. */ "Security" = "Безопасность"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Посмотреть на Uphold"; +/* No comment provided by engineer. */ +"Select" = "Выбрать"; + /* Coinbase */ "Select a coin" = "Выбрать монету"; /* Buy Sell Dash */ "Select a service" = "Выбрать сервис"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Выбрать из галереи"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Выбрать монету"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Отправьте %@ Dash с основного Dash адреса, который вы сейчас используете с аккаунтом CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Отправить ещё раз"; + /* No comment provided by engineer. */ "Send Contact Request" = "Отправить запрос на добавление в контакты"; +/* No comment provided by engineer. */ +"Send Invitation" = "Отправить приглашение"; + /* Coinbase CrowdNode */ "Send Report" = "Отправить отчёт"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Отправить"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Отправить человеку в списке контактов"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Отправить на скопированный адрес или QR код"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Отправка"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Отправляется запрос на добавление в контакты"; + /* No comment provided by engineer. */ "Sending to" = "Отправка"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Установить PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Установите PIN"; + /* No comment provided by engineer. */ "Settings" = "Настройки"; /* No comment provided by engineer. */ "Setup Wallet" = "Настроить кошелек"; +/* CrowdNode */ +"Share" = "Поделиться"; + /* Receive screen */ "Share address" = "Поделиться адресом"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Покупайте за DASH в более чем 150 000 магазинах"; - /* Enter Address Screen */ "Show content in the clipboard" = "Показать содержимое буфера обмена"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Показать masternode ключи"; +/* CrowdNode */ +"Show QR" = "Показать QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Показать фразу восстановления"; @@ -1465,7 +1984,7 @@ "Sign up error" = "Ошибка при регистрации"; /* CrowdNode */ -"Sign up to CrowdNode" = "Подписаться на новости CrowdNode"; +"Sign up to CrowdNode" = "Создать CrowdNode аккаунт"; /* CrowdNode Portal */ "Sign up to finish setting up account" = "Зарегистрируйтесь, чтобы завершить настройку аккаунта"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Стейкинг"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Шаг %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Поддержка"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Синхронизация..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Примечание"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Сделать фото с камеры"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Чтобы вставить адрес из буфера обмена, нажмите на него"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Категория"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Блокчейн синхронизируется..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Неверный код. Попробуйте ещё раз!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "Сеть Dash работает на основе мастернод, которые играют важную роль в проведении платежей"; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash был успешно зачислен на ваш аккаунт Coinbase. Но при переводе его на Dash Wallet на этом устройстве произошла проблема."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "Выбранное изображение будет загружено на Imgur анонимно."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Минимальная сумма для отправки составляет %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "их (Получение информации)"; + /* No comment provided by engineer. */ "There are no new notifications" = "У вас нет новых уведомлений"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Пользователей, чьё имя совпадает с %@, в вашем списке контактов не найдено"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "При получении нового адреса произошла ошибка"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Этот QR уже содержит запрос на оплату в размере %@Dash"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Это текущая годовая процентная доходность полной мастерноды за минусом 15% комиссии CrowdNode. Эта сумма не является точной и может колебаться в зависимости от размера пулов CrowdNode и курса Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "В кошельке есть средства или синхронизация не была завершена. Вы не сможете удалить его без фразы восстановления."; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "на Dash Wallet на этом устройстве"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Чтобы приступить к стейкингу, создайте аккаунт на CrowdNode или подключитесь к уже существующему"; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "на адрес Dash, созданный для вашего CrowdNode аккаунта в Dash Wallet на этом устройстве"; + /* No comment provided by engineer. */ "Tools" = "Инструменты"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Всего"; /* No comment provided by engineer. */ "Touch ID limit" = "Лимит Touch ID"; +/* CrowdNode */ +"Transaction History" = "История транзакций"; + /* No comment provided by engineer. */ "Transaction id" = "ID транзакции"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Перевести Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Перевести Dash из Вашей учётной записи Uphold на этот кошелёк"; - /* CrowdNode */ "Transfer Error" = "Ошибка при переводе"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Попробовать снова"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Включить код-пароль"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Необходима двухфакторная аутентификация"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Не удалось принять запрос на добавление в контакты"; + /* No comment provided by engineer. */ "Unable to connect" = "Не удалось подключиться"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Не удалось получить контактные данные"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Не удалось загрузить изображение. Пожалуйста, введите правильную ссылку на изображение или проверьте подключение к сети"; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Не удалось загрузить Gravatar. Пожалуйста, введите правильный адрес электронной почты в gravatar."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Не удалось получить новый QR-код"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Не удалось представить рекомендации"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Не удалось отправить запрос на добавление в контакты"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Не удалось загрузить изображение. Пожалуйста, попробуйте ещё раз."; + /* No comment provided by engineer. */ "Unknown" = "Неизвестный"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Неподдерживаемый URL-адрес"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Обновлено: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Обновление цен"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Комиссия за обновление"; +"Updating Profile on Dash Network" = "Обновление профиля в сети Dash"; + +/* No comment provided by engineer. */ +"Upgrade" = "Обновление"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Обновиться до Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Обновление до DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Ошибка при обновлении"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Загрузите своё изображение, персонализируйте свой ID"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Изображение загружается в сеть"; + /* Explore Dash/Filters */ "Use gift card" = "Применить подарочный сертификат"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Использовалось с:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "Пользователь (Получение информации)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Имя пользователя уже найдено"; + +/* No comment provided by engineer. */ +"Username available" = "Имя пользователя доступно"; + /* No comment provided by engineer. */ "Username taken" = "Имя пользователя уже занято"; -/* CrowdNode Portal */ -"Validating address…" = "Подтверждение адреса..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Имя пользователя подтверждено"; +"Users that matches %@ who are currently not in your contacts" = "Пользователи, похожие на %@, которых ещё нет в вашем списке контактов"; + +/* CrowdNode Portal */ +"Validating address…" = "Подтверждение адреса..."; /* No comment provided by engineer. */ "Validating username failed" = "Имя пользователя не подтверждено"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Подтвердить"; +/* CrowdNode */ +"Verify your API Dash address" = "Подтвердить свой API Dash адрес"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Очень высокий"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Чтобы удостовериться, что вы действительно являетесь владельцем этого кошелька, на счёт CrowdNode будут зачислены и списаны небольшие суммы Dash."; + /* No comment provided by engineer. */ "View All" = "Посмотреть все"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Посмотреть фразу восстановления"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Адрес голосования"; /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Дождитесь, пока блокчейн полностью синхронизируется, чтобы посмотреть историю транзакций. Для входа или регистрации посетите сайт CrowdNode."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Мы обновились"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Мы автоматически увидим эту транзакцию и переведём ту же сумму на ваш аккаунт на CrowdNode. После этого вы сможете вносить и выводить средства в Dash Wallet на этом устройстве."; + /* Website */ "Website" = "Вебсайт"; /* No comment provided by engineer. */ "Welcome" = "Добро пожаловать"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Добро пожаловать в DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = " Когда эта транзакция будет подтверждена, другой кошелёк будет бесполезен и не должен быть повторно использован в целях безопасности."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Почему я вижу все эти транзакции?"; +/* CrowdNode */ +"Why do you need an online account?" = "Зачем нужен онлайн аккаунт?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Почему я не могу сделать скриншот?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Запрос на вывод средств отправлен"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Хотите принять приглашение?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Хотите внести депозит за покупку, используя привязанный банковский счет?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Хотите сохранить изменения, которые вы внесли в профиль?"; + /* No comment provided by engineer. */ "Yes" = "Да"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Вы собираетесь удалить кошелек с этого устройства. Средства на этом кошельке смогут быть доступны, только если у Вас есть фраза восстановления."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "Пока у вас есть доступ к этому кошельку, вы всегда можете удалить загруженное изображение."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "В дальнейшем Вам будут доступны платежи через Face ID"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "В дальнейшем Вам будут доступны платежи через Touch ID"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Вы можете настроить, когда и каким образом получите своё вознаграждение."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Здесь можно найти подробную информацию о внесении и выводе средств, а также о вознаграждениях."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "Можно задать любую публично доступную ссылку, чтобы её смогли видеть другие пользователи сети Dash"; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "Нельзя откликнуться на это приглашение, потому что у вас уже есть имя пользователя Dash"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "Сейчас в вашем списке контактов никого нет"; + +/* Coinbase */ +"You don’t have enough balance" = "Средств на балансе недостаточно"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Превышен лимит авторизаций на Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Вы выбрали %@ в качестве имени пользователя. После регистрации смена имени пользователя будет невозможна."; +"You have been invited by %@. Start using Dash cryptocurrency." = "Вас пригласил %@. Начните пользоваться криптовалютой Dash."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "Вы выбрали \"%@\" в качестве имени пользователя. После регистрации смена имени пользователя будет невозможна."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Недостаточно средств для продолжения."; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Необходимо создать резервную копию кодовой фразы Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Вы должны ввести PIN для входа в Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "Чтобы создать приглашение, у вас должно быть не менее %@Dash"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "В вашем Dash Wallet должно быть не менее %@ Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Чтобы присоединиться к пулу, нужно всего лишь %@"; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Для продолжения процесса верификации на CrowdNode у вас на счету должно быть не менее %@Dash."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Вам также необходимо будет выйти из своей учётной записи Uphold используя браузер"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Вам понадобится эта фраза восстановления для доступа к Вашим средствам, если это устройство будет утеряно, повреждено или приложение Dash Wallet будет случайно удалено."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Вы получите %@Dash на Dash Wallet на этом устройстве. Пожалуйста, обратите внимание, что перевод займёт 2-3 минуты."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Вы будете автоматически получать свою долю выплат, и они по умолчанию будут реинвестированы. Однако, для повторяющихся выплат можно легко настроить автоматический вывод средств."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Создаётся аккаунт на CrowdNode..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Ваши средства зачислены на CrowdNode."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Введёный адрес электронной почты нигде не сохраняется - ни в кошельке DashPay, ни на серверах. Он нужен лишь единожды для получения информации с Gravatar."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Приглашение от %@уже подтверждено. "; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Приглашение от %@имеет недопустимый формат."; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Ваше местоположение используется для отображения его на карте, показа банкоматов в выбранном радиусе и улучшения результатов поиска."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Ваше местоположение используется для отображения вашего положения на карте, продавцов в выбранном радиусе и улучшения результатов поиска."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакция была отправлена и её сумма отобразится в вашем кошельке через несколько минут."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Основной адрес Dash, который сейчас используется для аккаунта CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Баланс Dash на вашей учётной записи Uphold составляет"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакция была отправлена и её сумма отобразится в вашем кошельке через несколько минут."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ваше имя пользователя %@ успешно создано в сети Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Ваше имя пользователя %@ создаётся в сети Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Ваш кошелёк защищён. Вы можете использовать фразу восстановления в любое время, чтобы получить доступ к Вашему кошельку на другом устройстве."; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 98716d642..f51b8e089 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nemá povolený prístup k Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Spracovanie platby"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "O programe"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Prijať"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Prijíma priamo DASH"; +/* CrowdNode */ +"Account Recovery" = "Obnovenie účtu"; + /* No comment provided by engineer. */ "Activity" = "Aktivita"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Pridať nový kontakt"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresa"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Pokročilá bezpečnosť"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Všetko"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "a"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Naozaj chcete zrušiť túto transakciu?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Ste si istý?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Vyhľadávanie bankomatov funguje lepšie so zapnutými službami určovania polohy"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Zostatok"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Zostatok: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bankový prevod"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Staňte sa súčasťou Dash Masternode s CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Medzi peňaženkou Dash a Coinbase."; +"Between Dash Wallet and Coinbase" = "Medzi Dash peňaženkou a Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Medzi Dash peňaženkou a vaším účtom na Coinbase"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Kúpiť si Dash za hotovosť"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Kúpiť Dash s účtom na Upholde"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Kúpiť Dash · Nie je potrebný žiadny účet"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kúpte si darčekové poukážky s Dashom"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Kúpiť/Predať"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Vyčistením tohto zariadenia už nebudete mať prístup k prostriedkom na tomto zariadení. Toto by sa malo robiť len vtedy, ak už nemáte prístup k vašej prístupovej fráze a zabudli ste aj váš PIN kód."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Zrušiť"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Zrušenie tejto transakcie nezruší obchodný príkaz. Čoskoro dostanete DASH na svoj Coinbase účet."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Zmeniť PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Skontrolujte pripojenie"; /* Choose your Dash username */ "Choose your" = "Vybrať vaše"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Vymazať"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Zatvoriť"; +/* CrowdNode */ +"Close and notify when it’s done" = "Zatvoriť a upozorniť, keď to bude hotové"; + /* No comment provided by engineer. */ "Close App" = "Zatvoriť Aplikáciu"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Poplatok Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Potvrdiť"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Potvrdiť a zaplatiť"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Potvrďte (%@)"; +"Confirm" = "Potvrdiť"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Potvrďte (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Potvrdiť PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Potvrdzuje sa"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Pripojené"; +/* CrowdNode */ +"Connected Dash address" = "Pripojená Dash adresa"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Pripojené uzle: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopírovať"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Skopírovať Záznamy"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Nepodarilo sa pripojiť k sieti Dash. Skontrolujte, či ste pripojení k internetu."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Nepodarilo sa nájsť výmenný kurz."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Platba sa nedá uskutočniť "; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Platba sa nedá preniesť do dash siete"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Vytvoriť novú peňaženku"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Vytvoriť účet"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Vytvorte si online CrowdNode účet"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Vytvoriť online účet"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Kreditná karta"; /* Crowdnode */ "CrowdNode Account" = "Účet CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Výhody CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "Podpora CrowdNode"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode používa túto adresu ako ID vášho účtu. Ak stratíte prístupovú frázu priradenú k tejto adrese, stratíte prístup k svojim finančným prostriedkom v tejto peňaženke a k účtu CrowdNode."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Limity výberu CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash adresa"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Zostatok Dash na Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Zostatok Dash na Upholde"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash platby nemôžu byť menšie ako %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Peňaženka Dash v tomto zariadení"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Poplatok za inováciu DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Dátum"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Predvolená mena, skratky, o programe..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Odpojte Coinbase účet"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Odpojiť Uphold účet"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Odpojený"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Vzdialenosť"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Nerobte snímku obrazovky"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Hotovo"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "napr. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "pred"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Jednoducho stávkujte Dash a získajte pasívny príjem niekoľkými jednoduchými kliknutiami."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "napr.: mario"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Nižšie zadajte váš 2FA kód"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Chyba"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Chyba pri inovácii"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Zatvoriť"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Poplatky pri nákupoch kryptomien"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Načítavanie informácií"; /* Coinbase/Payment Methods */ "Fiat Account" = "Hotovostný účet"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filtrovať transakcie"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtrované podľa:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Nájsť používateľa v sieti Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Nájdite obchodníkov, ktorí akceptujú Dash, kde ho kúpiť a ako s ním zarobiť."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Nájsť obchodníkov, ktorí akceptujú Dash ako platbu."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Prvý vklad by mal byť vyšší ako %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Pre vašu bezpečnosť ste boli odhlásení."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "z Dash peňaženky"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Z Upholdu do Dash peňaženky"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Z Upholdu do vašej Dash peňaženky"; /* Coinbase */ "from your Coinbase account" = "z vášho Coinbase účtu"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Získajte odmeny z vkladov v Dash Masternodes už za 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generovať rozšírené verejné kľúče?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Získajte ponuku"; +/* CrowdNode */ +"Get Rewards Instantly" = "Získajte odmeny okamžite"; + /* No comment provided by engineer. */ "Get Started" = "Začať"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Začíname s CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Darčeková karta"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Pomôžte nám vylepšiť váš zážitok"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Vysoké"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "História"; +/* CrowdNode */ +"How CrowdNode staking works" = "Ako funguje stávkovanie na CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Ako potvrdiť svoju API Dash adresu "; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Ako používať darčekovú poukážku"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Identifikačné kľúče uzla Evolution"; /* No comment provided by engineer. */ "I Accept" = "Súhlasím"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Súhlasím s CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Zapísal som si ju"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Ak niekedy stratíte svoju prístupovú frázu, môžete sa overiť inými spôsobmi, aby ste znova získali prístup k svojim prostriedkom na CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Ak stratíte prístupovú frázu pre túto peňaženku a stratíte toto zariadenie alebo odinštalujete Dash peňaženku, stratíte prístup k svojim finančným prostriedkom v CrowdNode a k prostriedkom v tejto peňaženke."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Ak si ju stále prajete zmazať, prosím zadajte: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Ak chcete uložiť manuálne preklasifikované typy transakcií, mali by ste exportovať súbor transakcií do CSV."; /* No comment provided by engineer. */ "Ignore" = "Ignorovať"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Hneď"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Okrem zobrazeného Coinbase poplatku, sa do ceny započítavame aj rozptyl. Pri používaní pokročilého obchodovania nie je zahrnutý žiadny rozptyl, pretože interagujete priamo s knihou objednávok.\n\nTrhy s kryptomenami sú volatilné, čo nám umožňuje dočasne uzamknúť cenu na vykonanie obchodu."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "V procese…"; /* No comment provided by engineer. */ "Income" = "Príjem"; +/* CrowdNode */ +"Information about your online account" = "Informácie o vašom online účte"; + /* Buy Sell Portal */ "Initializing" = "Inicializuje sa"; /* No comment provided by engineer. */ "Insufficient funds" = "Nedostatok prostriedkov"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interagovať"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interný prevod"; /* No comment provided by engineer. */ "Internally moved to" = "Interne presunuté do"; +/* CrowdNode */ +"Introducing Staking" = "Predstavujeme stávkovanie"; + /* Invalid transaction */ "Invalid" = "Neplatná"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Neplatný vstup"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Neplatná žiadosť o platbu:"; /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Aktualizácia zostatku môže chvíľu trvať."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Prenos Dash z Coinbase do Dash peňaženky tohto zariadenia môže trvať až 10 minút."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Zdá sa, že sa pokúšate obnoviť svoju peňaženku pomocou 12-slovnej frázy na obnovenie, avšak zadali ste iba 10 slov. Chcete automaticky obnoviť chýbajúce slová? Môže to trvať asi hodinu. Vaše zariadenie odporúčame pripojiť do siete."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Zdá sa, že sa pokúšate obnoviť svoju peňaženku pomocou 12-slovnej frázy na obnovenie, avšak zadali ste iba 11 slov. Chcete automaticky obnoviť chýbajúce slovo?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Pridajte sa k evolúcii"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Pripojenie k členstvu"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Id kľúča"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Ďalšie informácie..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Informovať ma keď bude hotovo"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Iba písmená a čísla"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Prepojiť účet na Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Prepojiť existujúci účet"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Prepojiť existujúci CrowdNode účet"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Prihláste sa do CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Odhlásiť"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Odhlásiť s Upholdu"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Nízke"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Spravovať povolenie GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Mapa"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Kľúče Masternode"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizácia masternódu"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximálne %ld znakov"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Stredné"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Členovia môžu voľne ukončiť členstvo, a zvyčajne môžu odísť okamžite."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Vyhľadávanie obchodníkov funguje lepšie so zapnutými službami určovania polohy."; -/* Validation rule */ -"Minimum 3 characters" = "Minimálne 3 znaky"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Viac"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Viac kontroly"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Presunuté z"; /* No comment provided by engineer. */ "Moved to Address" = "Presunuté k adrese"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Moje kontakty"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "nových"; +/* CrowdNode */ +"New CrowdNode Account" = "Nový CrowdNode účet"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC zariadenie"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Žiadny aktívny používateľ"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Žiadne spôsoby platby"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Nie je to platná Dash adresa"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nie všetky obchody akceptujú priamo DASH, ale môžete si kúpiť darčekovú kartu s Dashom."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Hneď ako %@ akceptuje vašu žiadosť, môžete platiť priamo na meno používateľa"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online obchodník"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Kľúče operátora"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Ukážka objednávky"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Kľúče vlastníka"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Zaplatiť"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Platiť priamo na meno používateľa"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Platiť s"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Typ platby"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Možnosti výplaty"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "za transakciu"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Na vykonanie platby je vždy potrebný PIN"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Skontrolujte svoje sieťové pripojenie"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Pre inováciu peňaženky zadajte PIN"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Upozorňujeme, že e-mail nie je uložený v Dash peňaženke a je odoslaný iba do CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Upozorňujeme, že nebudete môcť vybrať svoje prostriedky z CrowdNode do tejto peňaženky, kým nezvýšite svoj zostatok na %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Skúste naskenovať znova"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Prosím čakajte"; /* No comment provided by engineer. */ "Please wait" = "Prosím čakajte"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Pred exportovaním histórie transakcií počkajte, kým sa peňaženka úplne zosynchronizuje"; /* No comment provided by engineer. */ "Please write it down" = "Prosím, zapíšte si ju"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Predtým použité na:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Súkromné / Verejné kľúče (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Chráňte svoje úspory"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Adresa poskytovateľa"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Verejný kľúč (starý)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Nákup"; /* No comment provided by engineer. */ "Quick Receive" = "Rýchlo prijať"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Overené kvórami: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Obdržať priamo do Dash peňaženky"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Denne získajte svoj podiel na odmenách."; + /* Received transaction */ "Received" = "Prijté"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Prijaté od"; +/* CrowdNode */ +"Receiving rewards" = "Prijímané odmeny"; + /* No comment provided by engineer. */ "Recover" = "Obnoviť"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Nahlásiť problém"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Pre-skenovať"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Ohodnotiť aplikáciu"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Odmena"; /* No comment provided by engineer. */ "Rewards" = "Odmeny"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skenovať"; /* No comment provided by engineer. */ "Scan Private Key" = "Skenovať privátny kľúč"; +/* No comment provided by engineer. */ +"Scan QR" = "Skenovať QR kód"; + /* No comment provided by engineer. */ "Scan QR Code" = "Skenovať QR kód"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Snímky obrazovky sú viditeľné pre iné aplikácie a zariadenia. Vytvorte novú frázu obnovenia a držte ju v tajnosti."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Vyhľadať kontakt"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Hľadá sa používateľské meno %@ v sieti Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Bezpečnosť"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Ukázať na Upholde"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Vyberte mincu"; /* Buy Sell Dash */ "Select a service" = "Vyberte službu"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Vyberte mincu"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Pošlite %@ zo svojej primárnej Dash adresy, ktorú momentálne používate pre svoj účet CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Poslať žiadosť o kontakt"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Poslať správu"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Poslať ku"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Odoslať na skopírovanú adresu alebo QR kód"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Odosielam"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Posiela sa"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Nastaviť PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Nastavenia"; /* No comment provided by engineer. */ "Setup Wallet" = "Nastaviť peňaženku"; +/* CrowdNode */ +"Share" = "Zdieľať"; + /* Receive screen */ "Share address" = "Zdieľať adresu"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Nakupujte s DASH u viac ako 150 tisíc obchodníkov"; - /* Enter Address Screen */ "Show content in the clipboard" = "Zobraziť obsah v schránke"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Zobraziť kľúče masternódu"; +/* CrowdNode */ +"Show QR" = "Zobraziť QR kód"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobraziť frázu obnovenia"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Stávkovanie"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Podpora"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Synchronizácia..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Klepnutím na adresu zo schránky ju použijete"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Daňová kategória"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Reťazec sa synchronizuje..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Kód je nesprávny. Skontrolujte a skúste to znova!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash bol úspešne vložený na váš Coinbase účet. Pri prenose do Dash peňaženky na tomto zariadení sa však vyskytol problém."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Minimálna suma, ktorú môžete poslať, je %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Nie sú k dispozícii žiadne nové upozornenia"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Vo vašich kontaktoch neexistujú žiadni používatelia, ktorí sa zhodujú s menom %@ "; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Pri získavaní novej adresy sa vyskytla chyba"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Tento QR kód už obsahuje žiadosť k platbe pre %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "To predstavuje to aktuálny ročný percentuálny výnos celého Masternódu mínus 15 % poplatok CrowdNode. Nie je to zaručená miera návratnosti a môže stúpať alebo klesať v závislosti od veľkosti fondov CrowdNode a ceny Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Táto peňaženka nie je prázdna, alebo synchronizácia nie je dokončená. Nemali by ste ju vymazať bez frázy na obnovenie"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "do Dash peňaženky na tomto zariadení"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Ak chcete začať stávkovať, vytvorte si účet na CrowdNode alebo sa pripojte k existujúcemu účtu."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "na Dash adresu určenú pre váš účet CrowdNode v Dash peňaženke na tomto zariadení"; + /* No comment provided by engineer. */ "Tools" = "Nástroje"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Celkovo"; /* No comment provided by engineer. */ "Touch ID limit" = "Limit pre Touch ID"; +/* CrowdNode */ +"Transaction History" = "História transakcií"; + /* No comment provided by engineer. */ "Transaction id" = "Id transakcie"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Preniesť Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Preneste Dash z vášho účtu na Upholde do tejto peňaženky"; - /* CrowdNode */ "Transfer Error" = "Chyba prenosu"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Skúsiť znova"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Zapnúť prístupový kód"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Vyžaduje sa dvojfaktorové overenie"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Nedá sa pripojiť"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Nepodarilo sa získať nový QR kód"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Neznáme"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Nepodporovaná URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aktualizované: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Aktualizuje sa cena"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Poplatok za inováciu"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Inovuje sa na DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Použiť darčekovú kartu"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Použité na:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Používateľské meno sa už používa"; -/* CrowdNode Portal */ -"Validating address…" = "Overuje sa adresa…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Overenie používateľského mena je hotové"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Overuje sa adresa…"; /* No comment provided by engineer. */ "Validating username failed" = "Overenie používateľského mena zlyhalo"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Overiť"; +/* CrowdNode */ +"Verify your API Dash address" = "Overte svoju API Dash adresu"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Veľmi vysoké"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Do a z CrowdNode budú odoslané veľmi malé množstvá Dash, aby sme overili, že ste vlastníkom tejto adresy peňaženky."; + /* No comment provided by engineer. */ "View All" = "Zobraziť všetko"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobraziť frázu pre obnovenie"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Adresa pre hlasovanie"; /* No comment provided by engineer. */ "Voting Keys" = "Hlasovacie kľúče"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Počkajte, kým sa reťazec úplne zosynchronizuje, aby sme mohli skontrolovať vašu históriu transakcií. Pre prihlásenie alebo registráciu navštívte webovú stránku CrowdNode."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Aktualizovali sme"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Túto transakciu automaticky zistíme a prevedieme rovnakú sumu na váš účet CrowdNode. Potom budete môcť na tomto zariadení vykonávať vklady a výbery v Dash peňaženke."; + /* Website */ "Website" = "Webová stránka"; /* No comment provided by engineer. */ "Welcome" = "Vitajte"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Po potvrdení transakcie bude druhá peňaženka bezcenná a z bezpečnostných dôvodov by sa nemala znovu používať."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Prečo sa mi zobrazujú všetky tieto transakcie?"; +/* CrowdNode */ +"Why do you need an online account?" = "Prečo potrebujete online účet?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Prečo by som nemal robiť snímku obrazovky?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Žiadosť o výber podaná"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Áno"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Chystáte sa vymazať túto peňaženku z tohto zariadenia. Prostriedky spojené s touto peňaženkou je možné získať iba v prípade, že máte frázu pre obnovenie."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Platby nižšie môžete overiť pomocou Face ID"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Platby nižšie môžete overiť pomocou Touch ID"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Môžete zmeniť spôsob alebo kedy sa vám budú vyplácať vaše zárobky."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Môžete vidieť podrobné informácie o svojich vkladoch, výberoch a zárobkoch z odmien."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Váš zostatok je nedostatočný"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Prekročili ste autorizačný limit na Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Ako svoje používateľské meno ste si vybrali „%@“. Vaše používateľské meno nie je možné po zaregistrovaní zmeniť."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Na pokračovanie nemáte dostatok finančných prostriedkov"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "V Dash peňaženke si musíte zálohovať svoju prístupovú frázu "; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Aby ste sprístupnili Dash Wallet, musíte zadať PIN"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "V Dash peňaženke potrebujete aspoň %@"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "K členstvu potrebujete iba %@."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Pre pokračovanie s overením na CrowdNode, by ste mali mať aspoň %@."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Budete sa tiež musieť odhlásiť z webovej stránky Upholdu pomocou svojho prehliadača"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Túto frázu pre obnovenie budete potrebovať na prístup k vašim finančným prostriedkom, ak dôjde k strate či poškodeniu zariadenia, alebo odinštalovaniu Dash Wallet zo zariadenia."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Na tomto zariadení dostanete %@ Dash do svojej Dash peňaženky . Upozorňujeme, že dokončenie prevodu môže trvať 2 až 3 minúty."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Čiastkové platby budete dostávať automaticky a štandardne budú reinvestované, ale je tiež jednoduché nastaviť automatické výbery pre prijímanie opakujúcich sa platieb."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Váš CrowdNode účet sa vytvára…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Váš vklad do CrowdNode je prijatý."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Vaša poloha sa používa na zobrazenie vašej polohy na mape, bankomatov vo vybranom okruhu a zlepšenie výsledkov vyhľadávania."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Vaša poloha sa používa na zobrazenie vašej pozície na mape, obchodníkov vo vybranom okolí a k zlepšeniu výsledkov vyhľadávania."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Vaša transakcia bola odoslaná a čiastka by sa mala objaviť vo vašej peňaženke v priebehu niekoľkých minút."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Vaša primárna Dash adresa, ktorú momentálne používate pre váš CrowdNode účet"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Zostatok na vašom Uphold účte je"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Vaša transakcia bola odoslaná a čiastka by sa mala objaviť vo vašej peňaženke v priebehu niekoľkých minút."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Vaše používateľské meno %@ bolo úspešne vytvorené v sieti Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Vaše používateľské meno %@ sa vytvára v sieti Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Vaša peňaženka je zabezpečená. Frázu pre obnovenie môžete kedykoľvek použiť na obnovenie svojho účtu na inom zariadení."; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index cd492000e..22fb36b38 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Vizitka"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Naslov"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Stanje"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Nakup Dash kovancev z Uphold računom"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Prekliči"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiraj"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Ne najdem menjalnih tečajev."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Napaka"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Prečitaj"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Preveri v Upholdu"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Nastavitve"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Deli"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Skupaj"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Prenakaži Dash kovance iz vašega Uphold računa v Dash denarnico "; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Stanje Dash kovancev v vašem Uphold računu je"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index 9f4609da0..69c89d5f5 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "About"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Settings"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Share"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Preveri seznam skrivnih besed za obnovo denarnice"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 86339d68a..7ad9efd01 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Rreth"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresa"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Are you sure?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balanca"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "anullo"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Confirm"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopjo"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Nuk mund të gjej kursin e këmbimit."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash adresa"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Gabim"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Paguaj"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skano"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "skano QR kodin"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshot mund të shihen nga aplikacionet dhe pajisjet tjera. Gjenero një frazë tjetër rikthyese dhe mbaje sekret."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Konfigurimi"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Shpërndaje"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index b953c3eb3..98b8ed0f5 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Opis"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adresa"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Da li ste sigurni?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Stanje"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Kupi Dash sa Uphold nalogom"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Otkaži"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Potvrdi"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Potvrdi"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiraj"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Ne može da se pronadje kurs za razmenu."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash adresa"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Gotovo"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Greška"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Zapisao sam"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Ukoliko i dalje želite da izvršite brisanje molimo vas da unesete: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Plati"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Molimo vas zapišite"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Primljeno"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skeniraj"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Skeniraj QR Kod"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshot-ovi su vidljivi drugim aplikacijama i uređajima. Generišite novu frazu za oporavak i čuvajte je u tajnosti."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Vidi na Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Podešavanja"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Podeli"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Ovaj novčanik nije prazan ili još uvek nije završena sinhronizacija, ne možete izvršiti brisanje bez fraze za obnovu"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Ukupno"; /* No comment provided by engineer. */ "Touch ID limit" = "Limit za Touch ID"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Prebaci Dash sa vašeg Uphold naloga na ovaj novčanik"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Nepoznato"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Ažuriranje Cene"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Dash stanje na vašem Uphold nalogu je"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index ebcc33694..9171d9736 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Om"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adress"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Alla"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Är du säker?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Saldo"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Ångra"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Kontrollera din anslutning"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Stäng"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Bekräfta"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Bekräfta"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Bekräfta PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopiera"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Kopiera Loggar"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Kunde inte hitta växlingskurs"; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Skapa en ny Plånbok"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash-adress"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Done"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Fel"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Avsluta"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Historik"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Jag har skrivit ned den"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignorera"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Omedelbart"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Logga ut"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Låg"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC enhet"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Betala"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Received"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Skanna"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "läs av QR-kod"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Skärmbilder är synliga för andra appar och enheter. Skapa en ny återställningsfras och håll den hemlig."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Inställningar"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Dela"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Denna plånbok är inte tom eller så är den inte färdigsynkroniserad, du kan inte radera den utan att ha din återställningsfras"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Uppdaterar pris"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 538e222fd..65525aa99 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ ไม่สามารถเข้าถึง Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) การประมวลผลการชำระเงิน"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "เกี่ยวกับ"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "ยอมรับ"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "ยอมรับ DASH โดยตรง"; +/* CrowdNode */ +"Account Recovery" = "การกู้คืนบัญชี"; + /* No comment provided by engineer. */ "Activity" = "กิจกรรม"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "เพิ่มรายชื่อใหม่"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "ที่อยู่"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "ความปลอดภัยขั้นสูง"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "ทั้งหมด"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "และ"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "แน่ใจหรือว่าต้องการยกเลิกธุรกรรมนี้?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "คุณแน่ใจหรือไม่?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "การค้นหา ATM ทำงานได้ดีขึ้นเมื่อเปิดใช้บริการสถานที่"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "ยอดคงเหลือ"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "ยอดคงเหลือ: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "การโอนเงินผ่านทางธนาคาร "; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "เป็นส่วนหนึ่งของ Dash มาสเตอร์โหนด กับ CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "ระหว่างกระเป๋าเงิน Dash และ Coinbase"; +"Between Dash Wallet and Coinbase" = "ระหว่าง Dash Wallet และ Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "ระหว่างกระเป๋าเงิน Dash และบัญชี Coinbase ของคุณ"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "ซื้อ Dash ด้วยเงินสด"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "ซื้อ Dash ด้วยบัญชี Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "ซื้อ Dash · ไม่ต้องใช้บัญชี"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "ซื้อบัตรของขวัญด้วย Dash ของคุณ"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "ซื้อ/ขาย"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "การกำจัดอุปกรณ์นี้คุณจะไม่สามารถเข้าถึงเงินทุนในอุปกรณ์นี้ได้อีกต่อไป สิ่งนี้ควรจะทำเฉพาะในกรณีที่คุณไม่จำเป็นต้องเข้าถึงข้อความรหัสผ่านของคุณและยังลืมรหัส PIN ของคุณอีกด้วย"; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "ยกเลิก"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "การยกเลิกธุรกรรมนี้ไม่ได้ยกเลิกคำสั่งซื้อขาย คุณจะได้รับ Dash ในบัญชี Coinbase ของคุณในไม่ช้า"; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "เปลี่ยนแปลง PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "ตรวจสอบการเชื่อมต่อ"; /* Choose your Dash username */ "Choose your" = "เลือกของคุณ"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "ลบออก"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "ปิด"; +/* CrowdNode */ +"Close and notify when it’s done" = "ปิดและแจ้งเมื่อเสร็จแล้ว"; + /* No comment provided by engineer. */ "Close App" = "ปิดแอพพลิเคชั่น"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "ค่าธรรมเนียม Coinbase "; -/* No comment provided by engineer. */ -"Confirm" = "ยืนยัน"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "ยืนยันและชำระเงิน"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "ยืนยัน (%@)"; +"Confirm" = "ยืนยัน"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "ยืนยัน (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "ยืนยัน PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "กำลังยืนยัน"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "เชื่อมต่อแล้ว"; +/* CrowdNode */ +"Connected Dash address" = "ที่อยู่ Dash ที่เชื่อมต่อ"; + /* No comment provided by engineer. */ "Connected peers: %d" = "เชื่อมต่อ เพียร์: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "คัดลอก"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "คัดลอกข้อมูลจากกการบันทึก"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "ไม่สามารถเชื่อมต่อกับเครือข่าย DASH โปรดตรวจสอบว่าคุณเชื่อมต่อกับอินเทอร์เน็ต"; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "ไม่พบอัตราแลกเปลี่ยน"; + /* No comment provided by engineer. */ "Couldn't make payment" = "ไม่สามารถชำระเงินได้"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "ไม่สามารถชำระเงินส่งไปยังเครือข่าย Dash ได้"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "สร้างกระเป๋าสตางค์ใหม่"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "สร้างบัญชี"; +/* CrowdNode */ +"Create an online CrowdNode account" = "สร้างบัญชี CrowdNode ออนไลน์"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "สร้างบัญชีออนไลน์"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "บัตรเครดิต"; /* Crowdnode */ "CrowdNode Account" = "บัญชี CrowdNode "; +/* CrowdNode */ +"CrowdNode benefits" = "ผลประโยชน์ของ CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "ฝ่ายสนับสนุน CrowdNode "; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode ใช้ที่อยู่นี้เป็นรหัสบัญชีของคุณ คุณจะสูญเสียการเข้าถึงเงินทุนของคุณภายในกระเป๋าเงินนี้และบัญชี CrowdNode ของคุณหากคุณสูญเสียวลีรหัสผ่านที่เกี่ยวข้องกับที่อยู่นี้"; + /* CrowdNode */ "CrowdNode withdrawal limits" = "ข้อจำกัดการถอน CrowdNode "; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "ที่อยู่ Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "ยอดคงเหลือของ Dash บน Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "ยอด Dash คงเหลือใน Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "การชำระเงิน Dash ไม่สามารถจะน้อยกว่า %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "กระเป๋าเงิน Dash บนอุปกรณ์นี้"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay อัพเกรดค่าบริการ"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "วันที่"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "สกุลเงินเริ่มต้น, ทางลัด, เกี่ยวกับ..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "ตัดการเชื่อมต่อบัญชี Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "ยกเลิกการเชื่อมต่อบัญชี Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "ตัดการเชื่อมต่อ"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "ระยะทาง"; /* No comment provided by engineer. */ "Do not take a screenshot" = "อย่าใช้วิธีการบันทึกภาพหน้าจอ"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "เสร็จแล้ว"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "ตัวอย่างเช่น johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "ก่อน"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = " Stake Dash ได้อย่างง่ายดายและได้รับรายได้แบบ passive income ด้วยการคลิกง่ายๆ"; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "ตัวอย่างเช่น: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "ป้อนรหัส 2FA ของคุณด้านล่าง"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "ผิดพลาด"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "อัพเกรดข้อผิดพลาด"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "ออก"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "ค่าธรรมเนียมในการซื้อคริปโต"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "การดึงข้อมูล"; /* Coinbase/Payment Methods */ "Fiat Account" = "บัญชีเงินสด"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "กรองธุรกรรม"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "กรองโดย:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "ค้นหาผู้ใช้บนเครือข่าย Dash"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ค้นหาร้านค้าที่รับ Dash ซื้อได้ที่ไหนและวิธีสร้างรายได้จาก Dash"; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "ค้นหาร้าค้าที่ยอมรับการชำระเงินด้วย Dash "; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "เงินฝากครั้งแรกควรมากกว่า %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "เพื่อความปลอดภัยของคุณคุณได้ลงทะเบียนแล้ว"; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "จากกระเป๋าเงิน Dash "; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "จาก Uphold สู่กระเป๋าเงิน Dash"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "จาก Uphold ไปสู่กระเป๋าเงิน Dash ของคุณ"; /* Coinbase */ "from your Coinbase account" = "จากบัญชี Coinbase ของคุณ"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "รับรางวัลจากเงินฝากใน Dash มาสเตอร์โหนดที่มีเพียง 0.5 Dash"; + /* No comment provided by engineer. */ "Generate extended public keys?" = "สร้างขยายกุญแจสาธารณะหรือไม่"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "รับใบเสนอราคา"; +/* CrowdNode */ +"Get Rewards Instantly" = "รับรางวัลทันที"; + /* No comment provided by engineer. */ "Get Started" = "เริ่มต้น"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "เริ่มต้นใช้งาน CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "บัตรของขวัญ"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "ช่วยเราเพื่อพัฒนาประสบการณ์ของคุณ"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "สูง"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "ประวัติ"; +/* CrowdNode */ +"How CrowdNode staking works" = "การ staking CrowdNode ทำงานอย่างไร"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "วิธียืนยันที่อยู่ API Dash ของคุณ"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "การใช้บัตรของขวัญ"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "วิวัฒนาการรหัส Node ID"; /* No comment provided by engineer. */ "I Accept" = "ฉันยอมรับ"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "ฉันเห็นด้วยกับ CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "ฉันได้เขียนลงไปแล้ว"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "หากคุณสูญเสียวลีรหัสผ่านคุณสามารถยืยยันตัวตนด้วยวิธีอื่นเพื่อให้สามารถเข้าถึงเงินทุน CrowdNode ของคุณได้"; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "หากคุณสูญเสียวลีรหัสผ่านสำหรับกระเป๋าเงินนี้และสูญเสียอุปกรณ์นี้หรือถอนการติดตั้งกระเป๋าเงิน Dash คุณจะสูญเสียการเข้าถึงเงินทุนของคุณใน CrowdNode และเงินทุนภายในกระเป๋าเงินนี้"; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "ถ้าคุณยังต้องการกำจัด กรุณาใส่: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "หากคุณต้องการบันทึกประเภทการจัดประเภทใหม่ด้วยตนเองสำหรับการทำธุรกรรมคุณควรส่งออกไฟล์ธุรกรรม CSV"; /* No comment provided by engineer. */ "Ignore" = "เพิกเฉย"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "ทันที"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "นอกเหนือจากค่าธรรมเนียม Coinbase ที่แสดงแล้วเรายังรวมถึงสเปรดในราคา เมื่อใช้การค้าขั้นสูงจะไม่มีการแพร่กระจายเนื่องจากคุณมีปฏิสัมพันธ์โดยตรงกับหนังสือสั่งซื้อ\n\nตลาด cryptocurrency มีความผันผวนและสิ่งนี้ช่วยให้เราสามารถล็อคราคาสำหรับการดำเนินการทางการค้าชั่วคราว"; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "อยู่ในระหว่างการดำเนินงาน…"; /* No comment provided by engineer. */ "Income" = "รายได้"; +/* CrowdNode */ +"Information about your online account" = "ข้อมูลเกี่ยวกับบัญชีออนไลน์ของคุณ"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "ยอดเงินไม่เพียงพอ"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "โอนเงินภายใน"; /* No comment provided by engineer. */ "Internally moved to" = "ย้ายไปภายในแล้ว"; +/* CrowdNode */ +"Introducing Staking" = "แนะนำ Staking"; + /* Invalid transaction */ "Invalid" = "ไม่ถูกต้อง"; @@ -794,7 +1052,7 @@ "Invalid amount" = "จำนวนเงินไม่ถูกต้อง"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "ที่อยู่ Dash ไม่ถูกต้อง"; /* CrowdNode Online */ "Invalid Email" = "อีเมลไม่ถูกต้อง"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "อินพุตที่ไม่ถูกต้อง"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "คำขอการชำระเงินไม่ถูกต้อง"; /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code ไม่ถูกต้อง"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "อาจใช้เวลาสักครู่เพื่ออัปเดตยอดคงเหลือของคุณ"; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "อาจใช้เวลานานถึง 10 นาทีในการโอน Dash จาก Coinbase ไปยังกระเป๋าเงิน Dash บนอุปกรณ์นี้"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "ดูเหมือนว่าคุณกำลังพยายามที่จะกู้คืนกระเป๋าเงินของคุณโดยใช้วลีการกู้คืนคำ 12 คำ แต่คุณได้ป้อน 10 คำเท่านั้นคุณต้องการกู้คืนคำที่หายไปโดยอัตโนมัติหรือไม่ อาจใช้เวลาประมาณหนึ่งชั่วโมง เราขอแนะนำให้เสียบเข้ากับอุปกรณ์ของคุณ"; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "ดูเหมือนว่าคุณกำลังพยายามกู้คืนกระเป๋าเงินของคุณโดยใช้วลีการกู้คืน 12 คำ แต่คุณได้ป้อน 11 คำเท่านั้นคุณต้องการกู้คืนคำที่หายไปโดยอัตโนมัติหรือไม่"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "เข้าร่วมกับวิวัฒนาการ"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "เข้าร่วม pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "เรียนรู้เพิ่มเติม..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "แจ้งให้ฉันทราบเมื่อเสร็จแล้ว"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "ตัวอักษรและตัวเลขเท่านั้น"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "เชื่อมต่อบัญชี Coinbase ของคุณ "; +/* CrowdNode */ +"Link Existing Account" = "ลิงก์บัญชีที่มีอยู่"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "ลิงก์บัญชี CrowdNode ที่มีอยู่"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "ลงชื่อเข้าใช้ CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "ออกจากระบบ"; - /* No comment provided by engineer. */ "Log out from Uphold" = "ออกจากระบบ Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "ต่ำ"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "การอนุญาต GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "แผนที่"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "มาสเตอร์โหนดคีย์"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "อัพเดตมาสเตอร์โหนด"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "สูงสุด"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "สูงสุด %ld ตัวอักษร"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "ปานกลาง"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "สมาชิกมีอิสระที่จะออกจาก pool และมักจะออกไปทันที"; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "การค้นหาร้านค้าทำงานได้ดีขึ้นเมื่อเปิดการใช้งานบริการสถานที่"; -/* Validation rule */ -"Minimum 3 characters" = "ขั้นต่ำ 3 ตัวอักษร"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "มากขึ้น"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "ควบคุมมากขึ้น"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "เคลื่อนย้ายจาก"; /* No comment provided by engineer. */ "Moved to Address" = "ย้ายไปยังที่อยู่"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "ติดต่อของฉัน"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "ใหม่"; +/* CrowdNode */ +"New CrowdNode Account" = "บัญชี CrowdNode ใหม่"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "อุปกรณ์ NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "ไม่มีผู้ใช้ที่ใช้งานอยู่"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "ไม่มีวิธีการชำระเงิน"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "ไม่ใช่ที่อยู่ dash ที่ถูกต้อง"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "ไม่ใช่ร้านค้าทั้งหมดที่ยอมรับ Dash โดยตรง แต่คุณสามารถซื้อบัตรของขวัญด้วย Dash ของคุณ"; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "ตกลง"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "เมื่อ %@ ยอมรับคำขอของคุณคุณสามารถชำระเงินโดยตรงกับชื่อผู้ใช้"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "ออนไลน์"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "ร้านค้าออนไลน์"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "ตัวดำเนินการกุญแจ"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "คำสั่งซื้อตัวอย่าง"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "เจ้าของกุญแจ"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "ชำระเงิน"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "ชำระเงินโดยตรงกับชื่อผู้ใช้"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "จ่ายเงินด้วย"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "ประเภทการชำระเงิน"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "ตัวเลือกการจ่ายเงิน"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "ต่อธุรกรรม"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "ต้องระบุ PIN ทุกครั้งเพื่อชำระเงิน"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "โปรดตรวจสอบการเชื่อมต่อเครือข่ายของคุณ"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "โปรดป้อน PIN เพื่ออัปเกรด Wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "โปรดทราบว่าอีเมลที่ไม่ได้รับการบันทึกโดยกระเป๋าเงิน Dash และจะถูกส่งไปยัง CrowdNode เท่านั้น"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "โปรดทราบว่าคุณจะไม่สามารถถอนเงินจาก CowdNode ไปยังกระเป๋าเงินนี้ได้จนกว่าคุณจะเพิ่มยอดคงเหลือเป็น%@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "โปรดลองสแกนใหม่อีกครั้ง"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "กรุณารอสักครู่"; /* No comment provided by engineer. */ "Please wait" = "กรุณารอสักครู่"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "โปรดรอจนกว่ากระเป๋าเงินจะถูกซิงค์อย่างเต็มที่ก่อนที่จะส่งออกประวัติการทำธุรกรรมของคุณ"; /* No comment provided by engineer. */ "Please write it down" = "กรุณาเขียนลงไป"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "ใช้ก่อนหน้านี้ที่:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "ปกป้องเงินทุนของคุณ"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "ที่อยู่ผู้จัดหา"; @@ -1194,7 +1644,10 @@ "Public key" = "Public key"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "รหัสสาธารณะ (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "ซื้อ"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "ได้รับอย่างรวดเร็ว"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "องค์ประชุมที่ได้รับการรับรอง%1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "รับโดยตรงไปยังกระเป๋าเงิน Dash"; +/* CrowdNode */ +"Receive your share of rewards daily." = "รับส่วนแบ่งของรางวัลทุกวัน"; + /* Received transaction */ "Received" = "ได้รับ"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "ได้รับจาก"; +/* CrowdNode */ +"Receiving rewards" = "การรับรีวอร์ด"; + /* No comment provided by engineer. */ "Recover" = "กู้คืน"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "รายงานปัญหา"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "สแกนอีกครั้ง"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "วิจารณ์และให้คะแนนแอพพลิเคชั่นนี้"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "รางวัล"; /* No comment provided by engineer. */ "Rewards" = "รางวัล"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "สแกน"; /* No comment provided by engineer. */ "Scan Private Key" = "สแกนกุญแจส่วนตัว"; +/* No comment provided by engineer. */ +"Scan QR" = "สแกน QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "สแกนโค้ด QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "การบันทึกภาพจะปรากฏแก่แอพพลิเคชันและอุปกรณ์อื่น ๆ สร้างวลีกู้คืนใหม่และเก็บไว้เป็นความลับ"; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "ค้นหารายชื่อผู้ติดต่อ"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "กำลังหาชื่อผู้ใช้ %@ บนเครือข่าย Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "ความปลอดภัย"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "เปิดดูที่ Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "เลือกเหรียญ"; /* Buy Sell Dash */ "Select a service" = "เลือกบริการ"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "เลือกเหรียญ"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "ส่ง %@ จากที่อยู่หลักของ Dash ของคุณที่คุณใช้สำหรับบัญชี CrowdNode ของคุณในปัจจุบัน"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "ส่งคำขอการติดต่อ"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "ส่งรายงาน"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "ส่งไปยัง"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "ส่งไปยังที่อยู่ที่คัดลอกหรือรหัส QR"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "กำลังส่ง"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "ส่งไปยัง"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "ตั้งค่า PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "ตั้งค่า"; /* No comment provided by engineer. */ "Setup Wallet" = "ตั้งค่า wallet"; +/* CrowdNode */ +"Share" = "แชร์"; + /* Receive screen */ "Share address" = "แบ่งปันที่อยู่"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "ซื้อสินค้าด้วย DASH ที่มีร้านค้ามากกว่า 150k ร้าน"; - /* Enter Address Screen */ -"Show content in the clipboard" = "Show content in the clipboard"; +"Show content in the clipboard" = "แสดงเนื้อหาในคลิปบอร์ด"; /* No comment provided by engineer. */ "Show Masternode Keys" = "แสดง masternode keys"; +/* CrowdNode */ +"Show QR" = "แสดง QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "แสดงวลีกู้คืน"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "ฝ่ายสนับสนุน"; @@ -1536,8 +2064,14 @@ /* Balance */ "Syncing…" = "กำลังซิงค์ ..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ -"Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; +"Tap the address from the clipboard to paste it" = "แตะที่อยู่จากคลิปบอร์ดเพื่อวาง"; /* No comment provided by engineer. */ "Tap to hide balance" = "กดเพื่อซ่อนยอดคงเหลือ"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "หมวดภาษี"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "โซ่กำลังซิงค์..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "รหัสไม่ถูกต้อง กรุณาตรวจสอบและลองอีกครั้ง!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash ถูกฝากเข้าบัญชี Coinbase ของคุณเรียบร้อยแล้ว แต่มีปัญหาในการโอนไปยังกระเป๋าเงิน Dash ของคุณบนอุปกรณ์นี้"; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "จำนวนเงินขั้นต่ำที่คุณสามารถส่งได้คือ %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "ไม่มีการแจ้งเตือนใหม่"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "ไม่มีผู้ใช้ที่ตรงกับชื่อ %@ ในรายชื่อผู้ติดต่อของคุณ"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "มีข้อผิดพลาดในขณะที่ได้รับที่อยู่ใหม่"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "QR นี้มีคำขอชำระเงินแล้ว %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "สิ่งนี้แสดงถึงอัตราผลตอบแทนร้อยละต่อปีปัจจุบันของมาสเตอรืโหนด เต็มน้อยกว่าค่าธรรมเนียม CrowdNode 15% แต่มันไม่ได้เป็นอัตราผลตอบแทนที่รับประกันได้และอาจเพิ่มขึ้นหรือลงตามขนาดของกลุ่ม CrowdNode และราคา Dash"; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Wallet นี้ยังมีข้อมูลหรือการซิงค์ที่ยังไม่เสร็จสิ้น คุณไม่สามารถลบข้อมูลได้โดยไม่ใช้วลีกู้คืน"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "เพื่อกระเป๋า Dash บนอุปกรณ์นี้"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "ในการเริ่มการ stakingให้สร้างบัญชีบน CrowdNode หรือเชื่อมต่อกับบัญชีที่มีอยู่"; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "ไปยังที่อยู่ Dash ที่กำหนดไว้สำหรับบัญชี CrowdNode ของคุณในกระเป๋าเงิน Dash บนอุปกรณ์นี้"; + /* No comment provided by engineer. */ "Tools" = "เครื่องมือ"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "ทั้งหมด"; /* No comment provided by engineer. */ "Touch ID limit" = "ขีดจำกัด Touch ID"; +/* CrowdNode */ +"Transaction History" = "ประวัติการทำรายการ"; + /* No comment provided by engineer. */ "Transaction id" = "id ธุรกรรม"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "โอน Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "โอน Dash จากบัญชี Uphold ไปยัง wallet นี้"; - /* CrowdNode */ "Transfer Error" = "การโอนผิดพลาด"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "ลองอีกครั้ง"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "เปิดรหัสผ่านของอุปกรณ์"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "ต้องการการรับรองความถูกต้องแบบ Two factor auth"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "ไม่สามารถเชื่อมต่อ"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "ไม่สามารถได้รับโค้ด QR ใหม่"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "ซึ่งเป็นไม่เป็นที่รู้จัก"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "ไม่รับรองแหล่งที่มาของทรัพยากร URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "อัพเดต: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "อัพเดตราคา"; /* No comment provided by engineer. */ -"Upgrade Fee" = "อัพเกรดค่าธรรมเนียม"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "อัพเกรดเป็น DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "ใช้บัตรของขวัญ"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "ใช้ที่:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "ใช้ชื่อผู้ใช้แล้ว"; -/* CrowdNode Portal */ -"Validating address…" = "ตรวจสอบที่อยู่..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "ตรวจสอบชื่อผู้ทำ"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "ตรวจสอบที่อยู่..."; /* No comment provided by engineer. */ "Validating username failed" = "ตรวจสอบชื่อผู้ใช้ล้มเหลว"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "ตรวจสอบ"; +/* CrowdNode */ +"Verify your API Dash address" = "ตรวจสอบที่อยู่ API Dash ของคุณ"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "สูงมาก"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Dash จำนวนน้อยมากจะถูกส่งไปและกลับจาก CrowdNode เพื่อตรวจสอบว่าคุณเป็นเจ้าของที่อยู่กระเป๋าเงินนี้"; + /* No comment provided by engineer. */ "View All" = "ดูทั้งหมด"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "ดูวลีกู้คืน"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "ที่อยู่ซึ่งใช้ในการออกเสียงลงคะแนน"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "รอจนกว่าบล็อกเชนจะถูกซิงค์อย่างเต็มที่ดังนั้นเราสามารถตรวจสอบประวัติการทำธุรกรรมของคุณ เยี่ยมชมเว็บไซต์ CrowdNode เพื่อเข้าสู่ระบบหรือลงทะเบียน"; @@ -1749,7 +2430,7 @@ "Wait until wallet is synced to complete the transaction" = "รอจนกว่ากระเป๋าเงินจะถูกซิงค์เพื่อทำธุรกรรมให้เสร็จสมบูรณ์"; /* Enter Address Screen */ -"Wallet Address" = "Wallet Address"; +"Wallet Address" = "ที่อยู่กระเป๋าเงิน"; /* No comment provided by engineer. */ "Wallet disabled" = "wallet ถูกปิดการใช้งาน"; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "อัพเกรด"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "เราจะตรวจสอบการทำธุรกรรมนี้โดยอัตโนมัติและโอนจำนวนเท่ากันไปยังบัญชี CrowdNode ของคุณ หลังจากนั้นคุณจะสามารถฝากเงินและการถอนในกระเป๋าเงิน Dash บนอุปกรณ์นี้"; + /* Website */ "Website" = "เว็บไซต์"; /* No comment provided by engineer. */ "Welcome" = "ยินดีต้อนรับ"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "เมื่อธุรกรรมถูกยืนยัน วอลเล็ทอื่นๆจะไม่มีจราคาและไม่ควรนำมาใช้อีกครั้งเพื่อความปลอดภัย"; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "ทำไมฉันถึงเห็นธุรกรรมเหล่านี้ทั้งหมด?"; +/* CrowdNode */ +"Why do you need an online account?" = "ทำไมคุณถึงต้องการบัญชีออนไลน์?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "ทำไมฉันจึงไม่ควรใช้การบันทึกภาพหน้าจอ"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "ขอถอนเงิน"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "ใช่"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "คุณกำลังจะล้างวอลเล็ทนี้จากอุปกรณ์นี้ เงินทุนที่เกี่ยวข้องกับกระเป๋าเงินนี้สามารถเรียกคืนได้หากคุณมีวลีกู้คืนของคุณ"; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "คุณสามารถตรวจสอบด้วย Face ID สำหรับการชำระเงินด้านล่าง"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "คุณสามารถตรวจสอบด้วย Touch ID สำหรับการชำระเงินด้านล่าง"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "คุณสามารถเปลี่ยนวิธีการที่คุณได้รับจากรายได้จากรางวัลของคุณ"; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับเงินฝากการถอนและรางวัลของคุณ"; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "คุณมียอดคงเหลือไม่เพียงพอ"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "คุณทำรายการเกินขีดจำกัดการอนุญาตของ Coinbase"; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "คุณได้เลือก \"%@\" เป็นชื่อผู้ใช้ของคุณ ชื่อผู้ใช้ของคุณจะไม่สามารถเปลี่ยนแปลงได้เมื่อลงทะเบียนแล้ว"; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "คุณมีเงินไม่เพียงพอที่จะดำเนินการต่อ"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "คุณต้องสำรองข้อมูลรหัสผ่านของคุณในกระเป๋าเงิน Dash"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "คุณต้องใส่รหัสผ่านเพื่อทำการเข้า Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "คุณต้องมีอย่างน้อย %@ บนกระเป๋า Dash ของคุณ"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "คุณต้องใช้เพียงแค่ %@ เพื่อเข้าร่วมใน pool"; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "คุณต้องมีอย่างน้อย %@ เพื่อดำเนินการตรวจสอบ CrowdNode"; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "คุณจะต้องออกจากระบบของเว็บไซต์ Uphold โดยใช้เบราว์เซอร์ของคุณ"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "คุณจะต้องใช้วลีการกู้คืนนี้เพื่อเข้าถึงเงินของคุณ หากอุปกรณ์นี้สูญหาย เสียหาย หรือหากถอนการติดตั้ง Dash Wallet จากอุปกรณ์นี้"; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "คุณจะได้รับ %@ Dash บนกระเป๋าของคุณบนอุปกรณ์นี้ โปรดทราบว่าอาจใช้เวลาสูงสุด 2-3 นาทีในการโอน"; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "คุณจะได้รับการชำระเงินแบบเศษส่วนโดยอัตโนมัติและโดยค่าเริ่มต้นจะถูกนำกลับมาลงทุนใหม่อย่างไรก็ตามมันเป็นเรื่องง่ายที่จะตั้งค่าการถอนอัตโนมัติเพื่อรับการจ่ายเงินที่เกิดขึ้นซ้ำ"; + /* CrowdNode */ "Your CrowdNode account is creating…" = "บัญชี CrowdNode ของคุณกำลังสร้าง ..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "ได้รับเงินฝากของคุณไปยัง CrowdNode"; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "ตำแหน่งของคุณใช้เพื่อแสดงตำแหน่งของคุณบนแผนที่ตู้เอทีเอ็มในขอบเขตที่เลือกและปรับปรุงผลการค้นหา"; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "ตำแหน่งของคุณใช้เพื่อแสดงตำแหน่งของคุณบนแผนที่ร้านค้าใน redius ที่เลือกและปรับปรุงผลการค้นหา"; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "ธุรกรรมของคุณถูกส่งแล้วและจำนวนเงินจะปรากฏใน wallet ของคุณในอีกไม่กี่นาที"; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "ที่อยู่หลัก Dash ของคุณที่คุณใช้สำหรับบัญชี CrowdNode ของคุณในปัจจุบัน"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "ยอด Dash ของบัญชี Uphold ของคุณคือ"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "ธุรกรรมของคุณถูกส่งแล้วและจำนวนเงินจะปรากฏใน wallet ของคุณในอีกไม่กี่นาที"; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "ชื่อผู้ใช้ของคุณ %@ ได้รับการสร้างที่ประสบความสำเร็จบนเครือข่าย Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "ชื่อผู้ใช้ของคุณ %@ กำลังถูกสร้างขึ้นบนเครือข่าย Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "กระเป๋าเงินของคุณปลอดภัยแล้ว คุณสามารถใช้วลีกู้คืนได้ทุกเวลาเพื่อกู้คืนบัญชีของคุณบนอุปกรณ์อื่น"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 8ad47adcc..5e088b473 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ Dokunmatik Kimliğe erişim izni verilmiyor"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Ödeme İşleniyor"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Hakkında"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Kabul et"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Doğrudan DASH kabul eder"; +/* CrowdNode */ +"Account Recovery" = "Hesap Kurtarma"; + /* No comment provided by engineer. */ "Activity" = "Faaliyet"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Yeni Kişi Ekle"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Adres"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Gelişmiş Güvenlik"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Hepsi"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "ve"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Bu işlemi iptal etmek istediğinizden emin misiniz?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Emin misiniz?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Konum Servisleri açıkken ATM araması daha iyi çalışır"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Bakiye"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Bakiye:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Banka Havalesi"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "CrowdNode ile Dash Masternode'un parçası olun"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Dash Cüzdanı ve Coinbase arasında."; +"Between Dash Wallet and Coinbase" = "Coinbase ve Dash Cüzdanı arasında"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Dash Cüzdanı ile Coinbase hesabınız arasında"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Fiat ile Dash satın alın"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Uphold hesabı ile Dash al"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Dash Satın Al · Hesap gerekmez"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Dash'iniz ile hediye kartları satın alın"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Al/Sat"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Bu cihazı silerseniz bu cihazdaki paraya artık ulaşamazsınız. Bunu sadece parola cümlenize ulaşamıyorsanız ve PİN kodunuzu unuttuysanız yapmalısınız."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "İptal"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Bu işlemin iptal edilmesi işlem emrini iptal etmez. Kısa bir süre sonra Coinbase hesabınızda DASH alacaksınız."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "PİN Değiştir"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Bağlantınızı kontrol edin"; /* Choose your Dash username */ "Choose your" = "Seçin"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Temizle"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Kapat"; +/* CrowdNode */ +"Close and notify when it’s done" = "Kapat ve bittiğinde haber ver"; + /* No comment provided by engineer. */ "Close App" = "Uygulamayı kapat"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Ücreti"; -/* No comment provided by engineer. */ -"Confirm" = "Onayla"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Onayla ve Öde"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Onay (%@)"; +"Confirm" = "Onayla"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Onay (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "PİN'i Onayla"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Onaylanıyor"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Bağlandı"; +/* CrowdNode */ +"Connected Dash address" = "Bağlantılı Dash adresleri"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Bağlı dağıtıcılar: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Kopyala"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Kayıtları kopyala"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Dash ağına bağlanılmadı, lütfen internete bağlı olup olmadığınızı kontrol edin."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Döviz kuru bulunamadı."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Ödeme yapılamadı"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Ödeme dash ağına iletilemedi"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Yeni Cüzdan Oluştur"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Hesab Oluştur"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Çevrimiçi bir CrowdNode hesabı oluşturun"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Çevrimiçi Hesap Oluştur"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Kredi Kartı"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Hesabı"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode avantajları"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Desteği"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode, bu adresi hesap kimliğiniz olarak kullanır. Bu adresle ilişkili parolayı kaybederseniz, bu cüzdandaki ve CrowdNode hesabınızdaki paranıza erişiminizi kaybedersiniz."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode para çekme limitleri"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "dash adresi"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase'deki Dash bakiyesi"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Uphold’daki Dash bakiyeniz"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash ödemesi %@ altında olamaz"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Bu cihazdaki Dash Cüzdanı"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Yükseltme Ücreti"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Tarih"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Varsayılan para birimi, kısayollar, hakkında…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Coinbase Hesabının Bağlantısını Kes"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Uphold Hesabının Bağlantısını Kes"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Bağlantı kesildi"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Mesafe"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Ekran görüntüsü almayın"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Bitti"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "Örneğin. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Önceki"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Dash'i kolayca stake edin ve birkaç basit tıklamayla pasif gelir elde edin."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "örneğin: mehmetali"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "2FA kodunu aşağıya girin"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Hata"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Yükseltme Hatası"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Çıkış"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Kripto alımlarında ücretler"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Bilgi Alınıyor"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Hesabı"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "İşlemleri Filtrele"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Şuna göre filtrelendi:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Dash Ağında bir kullanıcı bulun"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dash'i kabul eden satıcıları bulun. Nereden satın alınır ve onunla nasıl gelir elde edilir."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Dash'i ödeme olarak kabul eden satıcıları bulun."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "İlk yatırılan para %@ değerinden fazla olmalıdır"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "Güvenliğiniz için oturumunuz kapatıldı."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "Dash Cüzdanından"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Uphold’dan Dash Cüzdanına"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Uphold'dan Dash Cüzdanınıza"; /* Coinbase */ "from your Coinbase account" = "Coinbase hesabınızdan"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "0,5 Dash gibi küçük bir miktar ile Dash Masternode'da para yatırma işlemlerinden ödüller kazanın."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Genişletilmiş umumi anahtarlar oluşturulsun mu?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Teklif Al"; +/* CrowdNode */ +"Get Rewards Instantly" = "Anında Ödül Kazanın"; + /* No comment provided by engineer. */ "Get Started" = "Başla"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "CrowdNode'a başlayın"; + /* Explore Dash: Filters */ "Gift Card" = "Hediye Kartı"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Deneyiminizi geliştirmemize yardımcı olun"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Yüksek"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Geçmiş"; +/* CrowdNode */ +"How CrowdNode staking works" = "CrowdNode staking nasıl çalışır?"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "API Dash adresinizi nasıl onaylarsınız?"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Hediye Kartı Nasıl Kullanılır"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Evolution Node Kimlik Anahtarları"; /* No comment provided by engineer. */ "I Accept" = "Kabul ediyorum"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "CrowdNode'u kabul ediyorum"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Not aldım"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Parolanızı kaybederseniz, CrowdNode fonlarınıza yeniden erişim kazanmak için kimliğinizi çeşitli yollarla doğrulayabilirsiniz."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "Bu cüzdan için parolanızı kaybederseniz ve bu cihazı kaybederseniz veya Dash Cüzdanını kaldırırsanız, CrowdNode'daki fonlarınıza ve bu cüzdandaki fonlara erişiminizi kaybedersiniz."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Eğer hala sıfırlamak istiyorsanız lütfen şu metni girin: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Manuel olarak yeniden sınıflandırılan işlemleri kaydetmek isterseniz, CSV işlem dosyasını aktarmalısınız."; /* No comment provided by engineer. */ "Ignore" = "Yoksay"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Derhal"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "Görüntülenen Coinbase ücretine ek olarak, fiyata bir makas dahil ediyoruz. Advanced Trade'i kullanırken, emir defteriyle doğrudan etkileşime girdiğiniz için herhangi bir makas ilave edilmez.\n\nKripto para piyasaları değişkendir ve bu, alım satımın yürütülmesi için geçici olarak bir fiyat belirlememize olanak tanır."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "İşlemde…"; /* No comment provided by engineer. */ "Income" = "Gelir"; +/* CrowdNode */ +"Information about your online account" = "Çevrimiçi hesabınızla ilgili bilgiler"; + /* Buy Sell Portal */ "Initializing" = "Başlatılıyor"; /* No comment provided by engineer. */ "Insufficient funds" = "Yetersiz bakiye"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Etkileşim"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Dahili Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Dahili olarak taşındı"; +/* CrowdNode */ +"Introducing Staking" = "Staking'e Giriş"; + /* Invalid transaction */ "Invalid" = "Geçersiz"; @@ -794,7 +1052,7 @@ "Invalid amount" = "Geçersiz tutar"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "Geçersiz Dash adresi"; /* CrowdNode Online */ "Invalid Email" = "Geçersiz e-posta"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Geçersiz Girdi"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Geçersiz Ödeme Talebi"; /* No comment provided by engineer. */ "Invalid QR Code" = "Geçersiz QR Kodu"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Bakiyenizin güncellenmesi birkaç dakika sürebilir."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Bu cihazdaki Dash Cüzdan'ınıza Dash'in Coinbase'den aktarılması 10 dakika kadar sürebilir."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Görünüşe göre cüzdanınızın 12 kelimelik bir kurtarma sözcük grubu kullanarak geri kurtarmaya çalışıyorsunuz, ancak yalnızca 10 kelime girdiniz, eksik kelimeleri otomatik olarak kurtarmak ister misiniz? Bu yaklaşık bir saat sürebilir. Cihazınızı fişe takmanızı öneririz."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Görünüşe göre cüzdanınızın 12 kelimelik bir kurtarma sözcük grubu kullanarak geri kurtarmaya çalışıyorsunuz, ancak yalnızca 11 kelime girdiniz, eksik kelimeyi otomatik olarak kurtarmak ister misiniz?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Evolution'a katıl"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Havuza katılmak"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Anahtar Kimliği"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Daha fazla bilgi edin..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Bittiğinde bana haber ver"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Sadece harfler ve rakamlar"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Coinbase Hesabını Bağla"; +/* CrowdNode */ +"Link Existing Account" = "Mevcut Hesabı Bağla"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Mevcut CrowdNode Hesabını Bağla"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "CrowdNode'da oturum açın"; -/* No comment provided by engineer. */ -"Log Out" = "Çıkış Yap"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Uphold'dan çıkış yap"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Düşük"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS İznini Yönet"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Harita"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Ana düğüm Anahtarları"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Anadüğüm Güncellemesi"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Maksimum"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maksimum %ld karakter"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Orta"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Üyeler havuzdan istedikleri zaman ayrılabilme özgürlüğüne sahiplerdir."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Tüccar araması, Konum Servisleri açıkken daha iyi çalışır."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 karakter"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Daha Fazla"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Daha Fazla Kontrol"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Taşındı"; /* No comment provided by engineer. */ "Moved to Address" = "Adrese Taşındı"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Kişilerim"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Yeni"; +/* CrowdNode */ +"New CrowdNode Account" = "Yeni CrowdNode Hesabı"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC cihazı"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Aktif kullanıcı yok"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Ödeme yöntemi yok"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Geçerli bir Dash adresi değil"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tüm mağazalar DASH'i doğrudan kabul etmez, ancak Dash'inizle bir hediye kartı satın alabilirsiniz."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "Tamam"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "%@ isteğinizi kabul ettiğinizde Kullanıcı Adına Doğrudan Ödeme yapabilirsiniz"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Çevrimiçi"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Çevrimiçi Tüccar"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operatör Anahtarları"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Sipariş Önizleme"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Sahip Anahtarları"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Ödeme"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Kullanıcı Adına Doğrudan Ödeme Yap"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "İle öde"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Ödeme türü"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Ödeme Seçenekleri"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "işlem başına"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Ödeme yapmak için her zaman PIN gereklidir"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Lütfen ağ bağlantınızı kontrol edin"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Cüzdanı yükseltmek için lütfen PİN kodunu girin"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Lütfen e-postanın Dash Cüzdanı tarafından kaydedilmediğini ve yalnızca CrowdNode'a gönderildiğini unutmayın."; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Bakiyenizi %@ Dash'e yükseltene kadar CowdNode'dan bu cüzdana para çekemeyeceğinizi lütfen unutmayın."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Lütfen tekrar taramayı deneyin"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Lütfen Bekleyin"; /* No comment provided by engineer. */ "Please wait" = "Lütfen bekleyin"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "İşlem geçmişinizi dışa aktarmadan önce lütfen cüzdanın tamamen senkronize edilmesini bekleyin."; /* No comment provided by engineer. */ "Please write it down" = "Lütfen bir yere yazın"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Daha önce şurada kullanıldı:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Özel / Genel Anahtarlar (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Birikimlerinizi koruyun"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Sağlayıcının Adresi"; @@ -1194,7 +1644,10 @@ "Public key" = "Herkese açık anahtar"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "Genel Anahtar (legacy)"; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "Satın alma"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "Hızlı Al"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Doğrulanan nisaplar: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Doğrudan Dash Cüzdan'a al"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Günlük ödül payınızı alın."; + /* Received transaction */ "Received" = "Alındı"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Gönderen"; +/* CrowdNode */ +"Receiving rewards" = "Ödüller alınıyor"; + /* No comment provided by engineer. */ "Recover" = "Kurtar"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Sorun rapor et"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Yeniden tara"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Uygulamamızı değerlendirip puanlayın"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Ödül"; /* No comment provided by engineer. */ "Rewards" = "Ödüller"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Tara"; /* No comment provided by engineer. */ "Scan Private Key" = "Özel Anahtarı Tara"; +/* No comment provided by engineer. */ +"Scan QR" = "QR Tara"; + /* No comment provided by engineer. */ "Scan QR Code" = "QR kodunu tara"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Ekran görüntüleri diğer uygulamalar ve cihazlar tarafından görülebilir. Yeni bir kurtarma metni oluşturun ve gizli tutun."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Kişi arayın"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Dash ağında %@ kullanıcı adı aranıyor"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Güvenlik"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Uphold'da Gör"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Bir koin seçin"; /* Buy Sell Dash */ "Select a service" = "Bir servis seç"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Koin seçin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Şu anda CrowdNode hesabınız için kullandığınız birincil Dash adresinizden %@ gönderin"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "İletişim İsteği Gönderin"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Rapor Gönder"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Gönder"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Kopyalanan adrese veya QR koduna gönder"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Gönderiliyor"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Gönderiliyor"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "PİN Oluştur"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Ayarlar"; /* No comment provided by engineer. */ "Setup Wallet" = "Cüzdan Kurulumu"; +/* CrowdNode */ +"Share" = "Paylaş"; + /* Receive screen */ "Share address" = "Adresi paylaş"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "150 binden fazla satıcıda DASH ile alışveriş yapın"; - /* Enter Address Screen */ -"Show content in the clipboard" = "Show content in the clipboard"; +"Show content in the clipboard" = "İçeriği panoda göster"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Anadüğüm Anahtarlarını Göster"; +/* CrowdNode */ +"Show QR" = "QR Göster"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Destek"; @@ -1536,8 +2064,14 @@ /* Balance */ "Syncing…" = "Senkronize ediliyor…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ -"Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; +"Tap the address from the clipboard to paste it" = "Yapıştırmak için panodaki adresi seçin"; /* No comment provided by engineer. */ "Tap to hide balance" = "Bakiyeyi gizlemek için tıkla"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Vergi Kategorisi"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Zincir senkronize ediliyor…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Kod yanlış. Lütfen kontrol edip tekrar deneyin!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash başarıyla Coinbase hesabınıza yatırıldı. Fakat bu cihazdaki Dash Cüzdan'a aktarılırken bir sorun oluştu."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Gönderebileceğiniz minimum miktar %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Yeni bildirim yok"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Kişilerinizde %@ adıyla eşleşen kullanıcı yok"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Yeni adres alınırken bir hata oluştu"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Bu QR zaten %@ için ödeme talebini içeriyor"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Bu, tam bir Ana Düğümün mevcut Yıllık Faiz Getirisini CrowdNode ücretinden %15 daha az temsil eder. Garantili bir getiri oranı değildir ve CrowdNode havuzlarının boyutuna ve Dash fiyatına bağlı olarak yukarı veya aşağı yönlü değişebilir."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Bu cüzdan boş değil veya eşleşme daha bitmedi, kurtarma metni olmadan sıfırlayamazsınız"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "bu cihazdaki Dash Cüzdan'ına"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Stake etmeye başlamak için CrowdNode'da bir hesap oluşturun veya mevcut bir hesaba bağlanın."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "bu cihazdaki Dash Cüzdanından CrowdNode hesabınız için belirlenen Dash adresine"; + /* No comment provided by engineer. */ "Tools" = "Araçlar"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Toplam"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limiti"; +/* CrowdNode */ +"Transaction History" = "İşlem Geçmişi"; + /* No comment provided by engineer. */ "Transaction id" = "İşlem kimliği"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Upholf hesabınızdan bu cüzdana Dash aktarın"; - /* CrowdNode */ "Transfer Error" = "Aktarım Hatası"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Tekrar dene"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Cihaz parolasını aç"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "İki faktörlü kimlik doğrulaması gerekli"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Bağlanılamıyor"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Yeni QR kod alınamıyor"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Bilinmeyen"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Desteklenmeyen bağlantı"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Güncellendi: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Fiyat Güncelleniyor"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Yükseltme Ücreti"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "DashPay'e yükseltiliyor"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Hediye kartı kullan"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Şurada kullanılmış:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Kullanıcı adı alınmış"; -/* CrowdNode Portal */ -"Validating address…" = "Adres doğrulanıyor…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Kullanıcı adı doğrulandı"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Adres doğrulanıyor…"; /* No comment provided by engineer. */ "Validating username failed" = "Kullanıcı adı doğrulanamadı"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Onayla"; +/* CrowdNode */ +"Verify your API Dash address" = "API Dash adresinizi doğrulayın"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Çok Yüksek"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Bu cüzdan adresinin sahibi olduğunuzu doğrulamak için CrowdNode'a ve CrowdNode'dan çok küçük miktarlarda Dash gönderilecektir."; + /* No comment provided by engineer. */ "View All" = "Hepsini gör"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Oy Verme Adresi"; /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Zincir tamamen senkronize olana kadar bekleyin, böylece işlem geçmişinizi gözden geçirebiliriz. Giriş yapmak veya kaydolmak için CrowdNode web sitesini ziyaret edin."; @@ -1749,7 +2430,7 @@ "Wait until wallet is synced to complete the transaction" = "İşlemi tamamlamak için cüzdan senkronize edilene kadar bekleyin"; /* Enter Address Screen */ -"Wallet Address" = "Wallet Address"; +"Wallet Address" = "Cüzdan Adresi"; /* No comment provided by engineer. */ "Wallet disabled" = "Cüzdan devredışı"; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Yeni sürüme geçtik"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Bu işlemi otomatik olarak algılayacağız ve aynı tutarı CrowdNode hesabınıza aktaracağız. Bundan sonra, bu cihazda Dash Cüzdan'dan para yatırma ve çekme işlemi yapabileceksiniz."; + /* Website */ "Website" = "İnternet sitesi"; /* No comment provided by engineer. */ "Welcome" = "Hoşgeldiniz"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "İşlem onaylandığında, diğer cüzdan değersiz olacaktır ve güvenlik nedeniyle yeniden kullanılmamalıdır."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Neden tüm bu işlemleri görüyorum?"; +/* CrowdNode */ +"Why do you need an online account?" = "Neden çevrimiçi bir hesaba ihtiyacınız var?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Neden ekran görüntüsü almamalıyım?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Para çekme isteği gönderildi"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Evet"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Bu cüzdanı bu cihazdan silmek üzeresiniz. Bu cüzdanla ilişkili fonlar yalnızca kurtarma sözcük grubunuz varsa geri alınabilir."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Yüz Kimliği doğrulaması ile aşağıdaki ödemeleri yapabilirsiniz"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Dokunmatik Kimlik doğrulaması ile aşağıdaki ödemeleri yapabilirsiniz"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Ödüllerinizin nasıl ve ne zaman ödeneceğini değiştirebilirsiniz."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Para yatırma, çekme ve ödüllerinizin detaylı bilgileri görebilirsiniz."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Yeterli bakiyeniz yok"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Coinbase'deki yetki sınırını aştınız."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Kullanıcı adınızı \"%@\" olarak belirlediniz. Kullanıcı adınız kayıt olduktan sonra değiştirilemez."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Devam etmek için yeterli bakiyeniz yok"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Dash Cüzdan'da parolanızı yedeklemeniz gerekir"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Dash Wallet'a girmek için bir PİN kodu girmelisiniz"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "Dash Cüzdan'ınızda en az %@ olması gerekir"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Havuza katılmak için yalnızca %@'a ihtiyacınız var."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "CrowdNode doğrulamasına devam etmek için en az %@'a sahip olmalısınız."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Aynı zamanda tarayıcınızda Uphold internet sitesinden çıkış yapmanız gerekecek"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Bu cihaz kaybolursa, hasar görürse veya Dash Cüzdan'ı bu cihazdan kaldırılırsa paranıza erişmek için bu kurtarma ifadesine ihtiyacınız olacaktır."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Bu cihazdaki Dash Cüzdan'ınızda %@ Dash alacaksınız. Bir transfer işleminin tamamlanmasının 2-3 dakika kadar sürebileceğini lütfen unutmayın."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Kısmı ödemeleri otomatik olarak alacaksınız ve bunlar yeniden yatırım için kullanılacak. Tekrarlayan ödemeleri almak için otomatik para çekme işlemlerini ayarlamak kolaydır."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "CrowdNode hesabınız oluşturuyor…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "CrowdNode'a yaptığınız ödeme alındı."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Konumunuz, haritada konumunuzu ve seçilen yarıçaptaki ATMleri gösterip arama sonuçlarını iyileştirmek için kullanılır."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Konumunuz, haritada konumunuzu ve seçilen yarıçaptaki tüccarları gösterip arama sonuçlarını iyileştirmek için kullanılır."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "İşleminiz yapıldı ve birkaç dakika içinde tutar cüzdanınızda görülecek."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Şu anda CrowdNode hesabınız için kullandığınız birincil Dash adresiniz"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Uphold hesabınızın Dash bakiyesi:"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "İşleminiz yapıldı ve birkaç dakika içinde tutar cüzdanınızda görülecek."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Kullanıcı adınız %@ Dash Ağında başarıyla oluşturuldu"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Kullanıcı adınız %@ Dash Ağında oluşturuluyor"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Cüzdanınız artık güvende. Hesabınızı başka bir cihaza aktarmak için kurtarma sözcük grubunuzu istediğiniz zaman kullanabilirsiniz."; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index ca4c62196..e4e668d9b 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ не має доступу до Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Обробка платежу"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Про програму"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Прийняти"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Приймає DASH безпосередньо"; +/* CrowdNode */ +"Account Recovery" = "Відновлення Акаунта"; + /* No comment provided by engineer. */ "Activity" = "Активність"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Додати новий контакт"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Адреса"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Розширений захист"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Все"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "і"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Ви впевнені, що хочете скасувати транзакцію?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Ви впевнені?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Пошук банкоматів працює краще, якщо ввімкнено служби визначення місцезнаходження."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Баланс"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Баланс:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Банківський переказ"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Стань частиною Dash Мастерноди з CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Між Dash Wallet і Coinbase."; +"Between Dash Wallet and Coinbase" = "Між Dash Wallet і Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Між Dash Wallet і вашим Coinbase акаунтом"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Купити Dash за фіат"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Купити Dash за допомогою акаунта Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Купити Dash · Обліковий запис не потрібен"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Купуйте подарункові картки за допомогою Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Купити/Продати"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Видаливши гаманець, у вас більше не буде доступу до коштів на цьому пристрої. Цю дію слід здійснювати лише в тому випадку, якщо у вас більше немає доступу до вашої кодової фрази і ви забули свій PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Відміна"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Скасування цієї операції не скасовує трейд. Незабаром ви отримаєте DASH на свій обліковий запис Coinbase."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Змінити PIN-код"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Перевірте з'єднання"; /* Choose your Dash username */ "Choose your" = "Виберіть свій"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Очистити"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Закрити"; +/* CrowdNode */ +"Close and notify when it’s done" = "Закрити і сповістити коли готово"; + /* No comment provided by engineer. */ "Close App" = "Закрити додаток"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Комісія Coinbase"; -/* No comment provided by engineer. */ -"Confirm" = "Підтверджую"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Підтвердити & сплатити"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Підтвердження (%@)"; +"Confirm" = "Підтверджую"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Підтвердження (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Підтвердіть PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Підтвердження"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Підключено"; +/* CrowdNode */ +"Connected Dash address" = "Підключена адреса Dash"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Підключені вузли: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Копіювати"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Копіювати логи"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Не вдалося підключитися до мережі Dash. Будь ласка, перевірте, чи ви підключені до Інтернету."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Не вдалося знайти обмінний курс."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Не вдалося здійснити платіж"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Не вдалося передати платіж у мережу Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Створитит нови"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Створити обліковий запис"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Створити обліковий запис CrowdNode онлайн"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Створити Онлайн Акаунт"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Кредитна картка"; /* Crowdnode */ "CrowdNode Account" = "Акаунт CrowdNode"; +/* CrowdNode */ +"CrowdNode benefits" = "Переваги CrowdNode"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Підтримка"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "Ця адреса використовується в CrowdNode як ваш ID. Якщо ви втратите кодову фразу, пов'язану з цим обліковим записом, ви втратите доступ до засобів усередині цього гаманця і цей обліковий запис на CrowdNode."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "Ліміти виведення з CrowdNode"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Баланс Dash на Coinbase"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Баланс Dash на Uphold"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Платежі Dash не можуть бути меншими ніж %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet на цьому пристрої"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Комісія за оновлення DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Дата"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Валюта за замовчуванням, ярлики, про програму."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "ВІдключити обліковий запис Coinbase"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "ВІдключити обліковий запис Uphold"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Відстань"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Не робіть скріншот"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Готово"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Раніше"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Застейкайте Dash і отримайте пасивний дохід за кілька кліків."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "наприклад: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Введіть код 2FA нижче"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Помилка"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Помилка оновлення"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Вихід"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Комісії за покупки криптовалюти"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Отримання інформації"; /* Coinbase/Payment Methods */ "Fiat Account" = "Фіатний рахунок"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Фільтрувати транзакції"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Відфільтровано за:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "Знайдіть користувача в Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Знайти торговців, які приймають Dash, де їх купити та як з ними заробити."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "Знайдіть місця де приймають DASH в якості оплати."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "Перший депозит має бути більшим ніж %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "З міркувань безпеки ви вийшли з акаунту."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "з Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "Від Uphold до Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "Від Uphold до вашого Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "з вашого акаунта Coinbase"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Отримуйте нагороди від депозитів у Dash Мастерноди лише за 0,5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Згенерувати розширені відкриті ключі?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Отримати пропозицію"; +/* CrowdNode */ +"Get Rewards Instantly" = "Отримуйте винагороди миттєво"; + /* No comment provided by engineer. */ "Get Started" = "Почати"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Початок роботи з CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Подарункова карта"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Допоможіть нам стати кращими"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Високий"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Історія"; +/* CrowdNode */ +"How CrowdNode staking works" = "Як працює стейкінг у CrowdNode"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "Як підтвердити свою API Dash адресу"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "Як використовувати подарункову карту"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Ключі ідентифікатора вузла Evolution"; /* No comment provided by engineer. */ "I Accept" = "Я приймаю"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "Я погоджуюсь з CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Я записав її"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Якщо ви втратите свою кодову фразу, ви можете підтвердити себе іншими способами, щоб відновити доступ до своїх коштів CrowdNode."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "У випадку, якщо ви втратите кодову фразу від цього гаманця, втратите пристрій або видалите Dash Wallet, ви втратите доступ CrowdNode і коштів всередині цього гаманця."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Якщо ви все ще бажаєте видалити гаманець, будь ласка, введіть: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "Якщо ви хочете зберегти перекласифіковані вручну типи для транзакцій, вам слід експортувати файл транзакцій CSV."; /* No comment provided by engineer. */ "Ignore" = "Ігнорувати"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Негайно"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "На додаток до відображеної комісії Coinbase ми включаємо спред у ціну. Під час використання Advanced Trade спред не включається, оскільки ви взаємодієте безпосередньо з книгою замовлень. \n\nКриптовалютні ринки нестабільні, що дозволяє нам тимчасово зафіксувати ціну на здійснення торгів."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "В процесі..."; /* No comment provided by engineer. */ "Income" = "Дохід"; +/* CrowdNode */ +"Information about your online account" = "Інформація про ваш онлайн-акаунт"; + /* Buy Sell Portal */ "Initializing" = "Ініціалізація"; /* No comment provided by engineer. */ "Insufficient funds" = "Недостатньо коштів"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Внутрішній переказ"; /* No comment provided by engineer. */ "Internally moved to" = "Внутрішньо переміщено в"; +/* CrowdNode */ +"Introducing Staking" = "Введення в стейкінг"; + /* Invalid transaction */ "Invalid" = "Недійсний"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Введено неправильно"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Недопустимий запит на оплату"; /* No comment provided by engineer. */ "Invalid QR Code" = "Неправильний QR код"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "Це може зайняти близько хвилини, доки ваш баланс буде оновлено."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Перенесення Dash із Coinbase у Dash Wallet цього пристрою може зайняти до 10 хвилин."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Ви намагаєтеся відновити свій гаманець за допомогою фрази відновлення з 12 слів. Однак, ви ввели лише 10 слів. Бажаєте автоматично відновити пропущені слова? Це займе приблизно годину. Рекомендуємо підключити гаджет до зарядного пристрою."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "Ви намагаєтеся відновити свій гаманець за допомогою фрази відновлення з 12 слів. Однак, ви ввели лише 11 слів. Бажаєте автоматично відновити пропущене слово?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Приєднатись до Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Приєднання до пула"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Ідентифікатор ключа"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Дізнатися більше..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Повідомити, коли буде готово"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Лише букви та цифри"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Прив’яжіть обліковий запис Coinbase"; +/* CrowdNode */ +"Link Existing Account" = "Прив'язати Існуючий Обліковий Запис"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Прив'язати Існуючий Обліковий Запис CrowdNode"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Ввійти в CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Вийти"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Вийти з Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Низький"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Керувати дозволом GPS"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Карта"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Ключі Мастернод"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Оновлення Мастерноди"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Максимум"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Максимум %ld символів"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Середній"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Учасники можуть вільно залишити пул і найчастіше можуть вийти негайно."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Пошук продавців працює краще, якщо ввімкнено служби локації."; -/* Validation rule */ -"Minimum 3 characters" = "Мінімум 3 символи"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Більше"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Більше контролю"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Переміщено з"; /* No comment provided by engineer. */ "Moved to Address" = "Переміщено на адресу"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Мої контакти"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Нові"; +/* CrowdNode */ +"New CrowdNode Account" = "Новий акаунт CrowdNode"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC пристрій"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "Немає активного користувача"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "Немає способів оплати"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Неправильна Dash адреса"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Не всі магазини приймають DASH напряму, але ви можете купити подарункову картку за допомогою Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Щойно %@ прийме ваш запит, ви зможете здійснити оплату безпосередньо на ім’я користувача"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Інтернет-магазин"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Інтернет-продавець"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Ключі оператора"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Попередній перегляд замовлення"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Ключі власника"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Оплатити"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Платіть безпосередньо на ім'я користувача"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Платіть з"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Типа платежу"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Варіанти Виплат"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "за транзакцію"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Для здійснення платежу завжди потрібен PIN-код"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Будь ласка, перевірте підключення до мережі"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Введіть PIN-код, щоб оновити гаманець"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Майте на увазі, що електронна адреса не зберігається в Dash Wallet, а лише пересилається в CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Пам'ятайте, що ви не зможете вивести кошти з CrowdNode на цей гаманець, доки на балансі не буде хоча б %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Спробуйте відсканувати ще раз"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Будь ласка, зачекайте"; /* No comment provided by engineer. */ "Please wait" = "Будь ласка, зачекайте"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Перш ніж експортувати історію транзакцій, зачекайте, доки гаманець повністю синхронізується."; /* No comment provided by engineer. */ "Please write it down" = "Будь ласка, запишіть її"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Раніше використовувався з:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Приватні / публічні ключі (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Захистіть свої заощадження"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Адреса провайдера"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Публічний ключ (застарілий)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Покупка"; /* No comment provided by engineer. */ "Quick Receive" = "Швидке отримання"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Затверджені кворуми: %1$d/%2$d."; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Отримуйте безпосередньо в Dash Wallet."; +/* CrowdNode */ +"Receive your share of rewards daily." = "Отримуйте свою частину нагороди щоденно."; + /* Received transaction */ "Received" = "Отримано"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Отримано з"; +/* CrowdNode */ +"Receiving rewards" = "Отримання нагород"; + /* No comment provided by engineer. */ "Recover" = "Відновити"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Повідомити про проблему"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Повторне сканування"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Оцінити додаток"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Нагорода"; /* No comment provided by engineer. */ "Rewards" = "Нагороди"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Сканувати"; /* No comment provided by engineer. */ "Scan Private Key" = "Сканувати приватний ключ"; +/* No comment provided by engineer. */ +"Scan QR" = "Сканувати QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Сканувати QR код"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Знімки екрана доступні для інших програм і пристроїв. Створіть нову фразу відновлення та збережіть її в секреті."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Пошук контакта"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Пошук по імені користувача %@ в Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Безпека"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Переглянути на Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Виберіть монету"; /* Buy Sell Dash */ "Select a service" = "Виберіть послугу"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Виберіть монету"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Надішліть %@ зі своєї основної адреси Dash, яку ви зараз використовуєте для свого облікового запису CrowdNode"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Надіслати запит на додавання до контактів"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Надіслати Звіт"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Відправити"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Надіслати на скопійовану адресу або на QR код"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Відправка"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Відправка"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Встановіть PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Налаштування"; /* No comment provided by engineer. */ "Setup Wallet" = "Налаштувати гаманець"; +/* CrowdNode */ +"Share" = "Поділитися"; + /* Receive screen */ "Share address" = "Поділитися адресою"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Купуйте з DASH у понад 150к магазинів"; - /* Enter Address Screen */ "Show content in the clipboard" = "Показати вміст у буфері обміну"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Показати ключі Мастернод"; +/* CrowdNode */ +"Show QR" = "Показати QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Показати фразу відновлення"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Стейкінг"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Підтримка"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Синхронізація..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Натисніть на адресу з буфера обміну, щоб вставити її"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Податкова категорія"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "Блокчейн синхронізується..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "Код не правильний. Перевірте та повторіть спробу!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash успішно внесено на ваш обліковий запис Coinbase. Але виникла проблема під час перенесення його в Dash Wallet на цьому пристрої."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "Мінімальна сума, яку ви можете надіслати, становить %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Немає нових сповіщень"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Немає користувачів, які з ім'ям %@ у ваших контактах"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "Під час отримання нової адреси сталася помилка"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "Цей QR вже містить запит на оплату в розмірі %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "Це поточний річний відсоток прибутку повної Мастерноди мінус комісія CrowdNode у розмірі 15%. Це не гарантована норма прибутку, і вона може зростати або знижуватися залежно від розміру пулів CrowdNode і ціни Dash."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Цей гаманець не порожній або синхронізація не завершена, ви не можете стерти його без фрази відновлення"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "На Dash Wallet на цьому пристрої"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "Щоб почати стейкінг, створіть обліковий запис на CrowdNode або підключіться до існуючого."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "на адресу Dash, призначену для вашого облікового запису CrowdNode у Dash Wallet на цьому пристрої"; + /* No comment provided by engineer. */ "Tools" = "Інструменти"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Всього"; /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID ліміт"; +/* CrowdNode */ +"Transaction History" = "Історія Транзакцій"; + /* No comment provided by engineer. */ "Transaction id" = "Id транзакції"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Переказати Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Переказати Dash з Uphold облікового запису на цей гаманець"; - /* CrowdNode */ "Transfer Error" = "Помилка передачі"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Спробуйте ще раз"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Увімкніть пароль"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Потрібна двофакторна авторизація"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Не вдалось підключитись"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Не вдалося отримати новий QR-код"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Невідомий"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Непідтримувана URL-адреса"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Оновлено: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Оновлення ціни"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Комісія за оновлення"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Оновлення до DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Використати подарункову картку"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Використовується в:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Ім'я користувача зайняте"; -/* CrowdNode Portal */ -"Validating address…" = "Підтвердження адреси..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Ім'я користувача підтверджено"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Підтвердження адреси..."; /* No comment provided by engineer. */ "Validating username failed" = "Ім'я користувача не підтверджено"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Підтвердити"; +/* CrowdNode */ +"Verify your API Dash address" = "Підтвердити свою API Dash адресу"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Дуже високий"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Щоб переконатися, що ви дійсно власник цього гаманця, на рахунок CrowdNode будуть зараховані і списані невелика кількість Dash."; + /* No comment provided by engineer. */ "View All" = "Переглянути все"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Переглянути фразу відновлення"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Адреса голосування"; /* No comment provided by engineer. */ "Voting Keys" = "Ключі голосування"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Дочекайтеся, поки блокчейн повністю синхронізується, щоб переглянути історію транзакцій. Відвідайте веб-сайт CrowdNode для входу або реєстрації."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Ми оновились"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "Ми автоматично побачимо цю транзакцію і переведемо ту ж суму на ваш обліковий запис на CrowdNode. Після цього ви зможете вносити та виводити кошти в Dash Wallet на цьому пристрої."; + /* Website */ "Website" = "Веб-сайт"; /* No comment provided by engineer. */ "Welcome" = "Ласкаво просимо"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Коли ця транзакція буде підтверджена, гаманець буде непотрібним і не зможе бути повторно використаний з метою безпеки."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Чому я бачу всі ці транзакціїї?"; +/* CrowdNode */ +"Why do you need an online account?" = "Для чого потрібен онлайн акаунт?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Чому я не можу зробити скріншот?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Запит на вивід коштів відправлено"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Так"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Ви збираєтеся стерти цей гаманець із цього пристрою. Кошти, пов’язані з цим гаманцем, можна отримати, лише якщо у вас є фраза для відновлення."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Ви можете пройти автентифікацію за допомогою Face ID для платежів нижче"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Ви можете пройти автентифікацію за допомогою Touch ID для платежів нижче"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "Ви можете налаштувати, коли та яким чином отримаєте свою винагороду."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "Ви можете переглянути детальну інформацію про свої депозити, зняття коштів і доходи."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "Ваш баланс недостатній"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "Ви перевищили ліміт авторизації на Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Ви вибрали \"%@\" як своє ім'я користувача. Ваше ім'я користувача не можна буде змінити після реєстрації."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "Недостатньо коштів для продовження"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "Вам необхідно створити резервну копію фрази відновлення Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Ви повинні ввести свій PIN-код, щоб увійти в Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "На балансі Dash Wallet має бути хоча б %@"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "Щоб приєднатися до пулу вам потрібно %@"; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "Ви повинні мати принаймні %@ Dash, щоб продовжити верифікацію CrowdNode."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Вам також потрібно буде вийти з веб-сайту Uphold за допомогою браузера"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Вам знадобиться ця фраза відновлення, щоб отримати доступ до своїх коштів, якщо цей пристрій буде втрачено, пошкоджено або якщо Dash Wallet буде видалено з цього пристрою."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Ви отримаєте %@ Dash на свій Dash гаманець на цьому пристрої. Зверніть увагу, що передача може тривати 2-3 хвилини."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Ви отримуватимете дробові виплати автоматично, і за замовчуванням вони будуть реінвестовані, однак також легко налаштувати автоматичне зняття коштів для отримання регулярних виплат."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Ваш обліковий запис CrowdNode створюється…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Ваш депозит на CrowdNode отримано."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Ваше місцезнаходження використовується для відображення вашого положення на карті, банкоматів у вибраному радіусі та покращення результатів пошуку."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Ваше місцезнаходження використовується для відображення вашого положення на карті, продавців у вибраному радіусі та покращення результатів пошуку."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакція була відправлена ​​і її сума відобразиться у вашому гаманці за кілька хвилин."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Ваша основна адреса Dash, яку ви зараз використовуєте для свого облікового запису CrowdNode"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Ваш баланс Dash на Uphold складає"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакція була відправлена ​​і її сума відобразиться у вашому гаманці за кілька хвилин."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ваше ім’я користувача %@ було успішно створено в Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Ваше ім’я користувача %@ створюється в Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Тепер ваш гаманець у безпеці. Ви можете будь-коли використати свою фразу відновлення, щоб відновити обліковий запис на іншому пристрої."; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 59a7b1646..bd050df23 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ không được cho phép truy cập chức năng Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Đang xử lý giao dịch"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "Giới thiệu"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Chấp nhận"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Các hoạt động"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Thêm một liên hệ"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Địa chỉ"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Bảo mật nâng cao"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "Tất cả"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "Bạn chắc chứ?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Số dư"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Mua Dash với tài khoản Uphold"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "Bằng việc xoá thiết bị này bạn sẽ không còn có thể truy cập vào số tiền trong thiết bị này nữa. Điều này chỉ nên thực hiện nếu bạn không còn nhớ mật khẩu hoặc quên mất mã PIN."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Huỷ bỏ"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Đổi mã PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Kiểm tra kết nối của bạn"; /* Choose your Dash username */ "Choose your" = "Chọn của bạn"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Xoá"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Đóng"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Đóng ứng dụng"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase Fee"; -/* No comment provided by engineer. */ -"Confirm" = "Xác thực"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Xác nhận & Thanh toán"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "Xác thực"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Xác nhận mã PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Đang xác nhận"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Số kết nối ngang hàng: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Sao chép"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Sao chép logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Không thể tìm thấy tỷ giáo giao dịch."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Không thể thực hiện giao dịch"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Không thể gửi giao dịch đến mạng lưới Dash"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Tạo một ví mới"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Địa chỉ Dash"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "Chi phí nâng cấp DashPay"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Ngày"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Tiền tệ ngầm định, lối tắt, về..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Đừng chụp ảnh màn hình"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "Xong"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Trước đó"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "ví dụ: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Hãy nhập mà xác thực 2 lớp vào dưới đây"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Lỗi"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Lỗi nâng cấp"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Thoát"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Lọc các giao dịch"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Tìm một người dùng trên mạng lưới Dash"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Tạo khoá công khai mở rộng?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Bắt đầu"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Hãy giúp chúng tôi cải thiện trải nghiệm cho bạn"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "Cao"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "Lịch sử"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "Tôi đã viết xuống"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "Nếu bạn vẫn muốn xoá sách nó thì hãy nhập \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Bỏ qua"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Ngay lập tức"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Không đủ tiền"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Giao dịch nội bộ"; /* No comment provided by engineer. */ "Internally moved to" = "Được di chuyển nội bộ đến"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Không hợp lệ"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Yêu cầu thanh toán không hợp lệ"; /* No comment provided by engineer. */ "Invalid QR Code" = "Mã QR không hợp lệ"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Tham gia Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Hãy cho tôi biết khi nó xong"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Chỉ dùng chữ cái và chữ số"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Đăng xuất"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Đăng xuất khỏi Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Thấp"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Cập nhật Masternode"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Tối đa"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Tối đa %ld ký tự"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Trung bình"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Tối thiểu 3 ký tự"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "Thêm"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "Kiểm soát nhiều hơn"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Được di chuyển từ"; /* No comment provided by engineer. */ "Moved to Address" = "Được chuyển đến Địa chỉ"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "Các liên hệ của tôi"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "Thêm mới"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "Thiết bị NFC"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Không phải một địa chỉ Dash hợp lệ"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Một khi %@ chấp nhận yêu cầu của bạn thì bạn có thể gửi tiền trực tiếp theo tên người dùng đó"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Chìa khoá của người vận hành"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Khoá của chủ sở hữu"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "thanh toán"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Trả trực tiếp cho Tên Người dùng"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Mã PIN luôn được cần đến khi thực hiện giao dịch"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Hãy nhập mã PIN để nâng cấp ví"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Hãy thử quét lại lần nữa"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Vui lòng đợi"; /* No comment provided by engineer. */ "Please wait" = "Vui lòng đợi"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Hãy vui lòng ghi xuống"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Địa chỉ nhà cung cấp"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Nhận nhanh"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums xác nhận: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "Đã nhận"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Nhận được từ"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Báo cáo về lỗi"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Quét lại"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Viết nhận xét & đánh giá cho ứng dụng này"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Phần thưởng"; /* No comment provided by engineer. */ "Rewards" = "Phần thưởng"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Quét"; /* No comment provided by engineer. */ "Scan Private Key" = "Quét khoá riêng"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Quét mã QR"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Chụp ảnh màn hình có thể nhìn thấy bởi các ứng dụng và thiết bị khác. Hãy sinh ra một cụm từ phục hồi mới và giữ nó bí mật."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Tìm một liên lạc"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Tìm kiếm tên người dùng %@ trên mạng lưới Dash"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Bảo mật"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "Xem trên Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Gửi yêu cầu liên hệ"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Gửi đến"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Đang gửi"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Gửi tới"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Đặt mã PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "Các thiết lập"; /* No comment provided by engineer. */ "Setup Wallet" = "Thiết lập ví"; +/* CrowdNode */ +"Share" = "Chia sẻ"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Hiển thị các khoá Masternode"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Hiển thị câu phục hồi"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Hỗ trợ"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "Không có thông báo mới"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "Không có người dùng nào có tên trùng với %@ trong danh sách liên hệ của bạn"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "Ví này không rỗng hoặc quá trình đồng bộ chưa xong, bạn không thể xoá nó mà không có dòng khôi phục"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Công cụ"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Tổng số"; /* No comment provided by engineer. */ "Touch ID limit" = "Giới hạn Touch ID"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Mã giao dịch"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Chuyển Dash từ tài khoản Uphold của bạn vào ví này"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Thử lại"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Hãy bật chế độ mật khẩu cho thiết bị"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Không thể kết nối"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Không thể lấy mã QR mới"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Không biết"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Địa chỉ URL không được hỗ trợ"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Đã cập nhật: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Đang cập nhật giá"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Phí nâng cấp"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Đang nâng cấp cho DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Tên người dùng đã được chọn"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Thực hiện xong việc Kiểm tra tính hợp lệ của tên người dùng"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Kiểm tra tính hợp lệ của tên người dùng không thành công"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Kiểm tra"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Rất cao"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "Xem tất cả"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Xem cụm từ phục hồi"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Địa chỉ bỏ phiếu"; /* No comment provided by engineer. */ "Voting Keys" = "Khoá bỏ phiếu"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "Chúng tôi đã Nâng cấp"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Chào mừng"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Khi các giao dịch được xác thực, ví kia sẽ trở nên vô giá trị và không nên được tiếp tục sử dụng vì những lý do an toàn."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Tại sao tôi không nên chụp ảnh màn hình?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Bạn đang sắp xoá sạch ví này từ thiết bị này. Khoản tiền liên quan đến ví này chỉ có thể lấy lại được nếu bạn có cụm từ phục hồi."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "Bạn có thể xác thực với Face ID cho giao dịch bên dưới"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "Bạn có thể xác thực với Touch ID cho giao dịch bên dưới"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "Bạn đã chọn \"%@\" làm tên người dùng của mình. Tên người dùng của bnaj không thể thay đổi một khi đã được đăng ký."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "Bạn cần phải nhập mã PIN để truy cập vào ví Dash"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Bạn sẽ cần phải đăng xuất khỏi tài khoản từ trang web Uphold với trình duyệt của mình"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Giao dịch của bạn đã được gửi và số tiền sẽ xuất hiện trong ví của bạn trong vài phút."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Số dư tài khoản Uphold bằng Dash là"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Giao dịch của bạn đã được gửi và số tiền sẽ xuất hiện trong ví của bạn trong vài phút."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tên người dùng của bạn %@ đã được tạo lập thành công trên mạng lưới Dash"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Tên người dùng của bạn %@ đang được tạo trên mạng lưới Dash"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Bây giờ ví của bạn đã được an toàn. Bạn có thể sử dụng dòng chữ phục hồi bất kỳ khi nào để khôi phục số tiền của mình trên một thiết bị khác."; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 3453894eb..947f13ba1 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "关于"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "你确定吗?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -327,13 +408,10 @@ "Coinbase Fee" = "Coinbase Fee"; /* No comment provided by engineer. */ -"Confirm" = "确认"; +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "确认"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "完成"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "如果您仍想清空钱包, 请输入:\"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "收到"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截图可以被其他程序或者设备获得。请生成一个新的恢复密语并妥善保管。"; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "设置"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Share"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "此钱包并不是空的或同步尚未完成, 如果没有恢复密语, 请不要清空钱包"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "触控ID限制"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 612aa87e6..961a70462 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) Processing Payment"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "關於"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "Accept"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "Accepts DASH directly"; +/* CrowdNode */ +"Account Recovery" = "Account Recovery"; + /* No comment provided by engineer. */ "Activity" = "Activity"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "Add a New Contact"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "Address"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "Advanced Security"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "All"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "and"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "你確定嗎?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on."; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "Balance"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "Balance: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "Between Dash Wallet and Coinbase."; +"Between Dash Wallet and Coinbase" = "Between Dash Wallet and Coinbase"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "Buy Dash with fiat"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; +/* Dash Portal */ +"Buy Dash · No account needed" = "Buy Dash · No account needed"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "Buy/Sell"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "Cancel"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "Close"; +/* CrowdNode */ +"Close and notify when it’s done" = "Close and notify when it’s done"; + /* No comment provided by engineer. */ "Close App" = "Close App"; @@ -327,13 +408,10 @@ "Coinbase Fee" = "Coinbase Fee"; /* No comment provided by engineer. */ -"Confirm" = "確認:"; +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "Confirm & Pay"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "Confirm (%@)"; +"Confirm" = "確認:"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "Confirming"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "Connected"; +/* CrowdNode */ +"Connected Dash address" = "Connected Dash address"; + /* No comment provided by engineer. */ "Connected peers: %d" = "Connected peers: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "Copy"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "Could not connect to the Dash network, please check that you are connected to the internet."; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "Could not find exchange rate."; + /* No comment provided by engineer. */ "Couldn't make payment" = "Couldn't make payment"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "Create a New Wallet"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "Create Account"; +/* CrowdNode */ +"Create an online CrowdNode account" = "Create an online CrowdNode account"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "Credit Card"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode Account"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode benefits"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode Support"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode withdrawal limits"; @@ -452,6 +569,12 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "Dash address"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay Upgrade Fee"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "Disconnect Coinbase Account"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "Disconnect Uphold Account"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "Distance"; /* No comment provided by engineer. */ "Do not take a screenshot" = "Do not take a screenshot"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "完成"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "Easily stake Dash and earn passive income with a few simple clicks."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "Error"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "Error Upgrading"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "Exit"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "Fees in crypto purchases"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "Fetching Info"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Account"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "Filter Transactions"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "Filtered by:"; @@ -637,6 +808,9 @@ /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; +/* No comment provided by engineer. */ +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + /* No comment provided by engineer. */ "Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "For your security, you have been signed out."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "from Dash Wallet"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "From Uphold to Dash Wallet"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "From Uphold to your Dash Wallet"; /* Coinbase */ "from your Coinbase account" = "from your Coinbase account"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "Generate extended public keys?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "Get Quote"; +/* CrowdNode */ +"Get Rewards Instantly" = "Get Rewards Instantly"; + /* No comment provided by engineer. */ "Get Started" = "Get Started"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "Getting started with CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; @@ -718,12 +913,27 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "Help us improve your experience"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "High"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "History"; +/* CrowdNode */ +"How CrowdNode staking works" = "How CrowdNode staking works"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "How to confirm your API Dash address"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "How to Use a Gift Card"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "I agree to CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "I wrote it down"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "如果你仍然想擦拭它,請輸入: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ "Ignore" = "Ignore"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "Immediately"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "In process…"; /* No comment provided by engineer. */ "Income" = "Income"; +/* CrowdNode */ +"Information about your online account" = "Information about your online account"; + /* Buy Sell Portal */ "Initializing" = "Initializing"; /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "Interac"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; /* No comment provided by engineer. */ "Internally moved to" = "Internally moved to"; +/* CrowdNode */ +"Introducing Staking" = "Introducing Staking"; + /* Invalid transaction */ "Invalid" = "Invalid"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "Invalid Input"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "It can take a minute for your balance to be updated."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "Joining the pool"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "Key Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "Learn More..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "Let me know when it’s done"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "Letters and numbers only"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "Link Coinbase Account"; +/* CrowdNode */ +"Link Existing Account" = "Link Existing Account"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "Link Existing CrowdNode Account"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "Log Out"; - /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "Low"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "Manage GPS Permission"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "Map"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "Masternode Keys"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "Maximum %ld characters"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "Medium"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "Members are free to leave the pool and can most often leave immediately."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; -/* Validation rule */ -"Minimum 3 characters" = "Minimum 3 characters"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "More"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "More Control"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "Moved from"; /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "My Contacts"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "New"; +/* CrowdNode */ +"New CrowdNode Account" = "New CrowdNode Account"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "No active user"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "No payment methods"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "Not a valid Dash address"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "Online"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "Online Merchant"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "Pay"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "Pay Directly to Username"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "Pay with"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "Payout Options"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "per transaction"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "Please check your network connection"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "Please try scanning again"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "Please Wait"; /* No comment provided by engineer. */ "Please wait" = "Please wait"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "Private / Public Keys (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "Protect your savings"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "Public key (legacy)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "Receive directly into Dash Wallet"; +/* CrowdNode */ +"Receive your share of rewards daily." = "Receive your share of rewards daily."; + /* Received transaction */ "Received" = "己收到"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "Received from"; +/* CrowdNode */ +"Receiving rewards" = "Receiving rewards"; + /* No comment provided by engineer. */ "Recover" = "Recover"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "Rescan"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "Review & Rate the app"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "Reward"; /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "Scan"; /* No comment provided by engineer. */ "Scan Private Key" = "Scan Private Key"; +/* No comment provided by engineer. */ +"Scan QR" = "Scan QR"; + /* No comment provided by engineer. */ "Scan QR Code" = "Scan QR Code"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截圖可以被其他程序或者設備獲得。請生成一個新的恢復詞組並妥善保管。"; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "Security"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "Select a coin"; /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "Select the coin"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "Send Contact Request"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "Send Report"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "Send to"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "Send to copied address or QR code"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "Sending"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "Sending to"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "Set PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "設置"; /* No comment provided by engineer. */ "Setup Wallet" = "Setup Wallet"; +/* CrowdNode */ +"Share" = "Share"; + /* Receive screen */ "Share address" = "Share address"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "Shop with DASH at over 150k merchants"; - /* Enter Address Screen */ "Show content in the clipboard" = "Show content in the clipboard"; /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; +/* CrowdNode */ +"Show QR" = "Show QR"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "Staking"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "Support"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "Syncing…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "Tap the address from the clipboard to paste it"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "The code is incorrect. Please check and try again!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "There are no new notifications"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "There are no users that match with the name %@ in your contacts"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "There was an error while obtaining new address"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "This QR already contains the payment request for %@"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "此錢包不是空的或同步尚未完成,如果沒有恢復詞組請不要進行擦除"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* No comment provided by engineer. */ "Tools" = "Tools"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "Total"; /* No comment provided by engineer. */ "Touch ID limit" = "指紋辨識解鎖的限制"; +/* CrowdNode */ +"Transaction History" = "Transaction History"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "Transfer Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; - /* CrowdNode */ "Transfer Error" = "Transfer Error"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "Try again"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "Two factor auth required"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "Unknown"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Upgrade Fee" = "Upgrade Fee"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "Upgrading to DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "Used at: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "Username taken"; -/* CrowdNode Portal */ -"Validating address…" = "Validating address…"; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "Validating username done"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "Validating address…"; /* No comment provided by engineer. */ "Validating username failed" = "Validating username failed"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* CrowdNode */ +"Verify your API Dash address" = "Verify your API Dash address"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "Very High"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address."; + /* No comment provided by engineer. */ "View All" = "View All"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device."; + /* Website */ "Website" = "Website"; /* No comment provided by engineer. */ "Welcome" = "Welcome"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "Why do I see all these transactions?"; +/* CrowdNode */ +"Why do you need an online account?" = "Why do you need an online account?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "Why I should not take a screenshot?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "Withdrawal requested"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "Yes"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "You can authenticate with Touch ID for payments below"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "You can change how / when your reward earnings are paid to you."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "You don’t have enough balance"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "You exceeded the authorization limit on Coinbase."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "You have chosen \"%@\" as your username. Your username cannot be changed once registered."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "You have to backup your passphrase in Dash Wallet"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "You must enter your PIN in order to enter Dash Wallet"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "You need at least %@ on your Dash Wallet"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "You should have at least %@ to proceed with the CrowdNode verification."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "Your CrowdNode account is creating…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "Your deposit to CrowdNode is received."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "Your location is used to show your position on the map, ATMs in the selected redius and improve search results."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "Your location is used to show your position on the map, merchants in the selected redius and improve search results."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "Your primary Dash address that you currently use for your CrowdNode account"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "Your username %@ is being created on the Dash Network"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index 7d2f22351..254203a4f 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ 不被允许访问指纹识别"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) 正在处理付款"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "关于"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "同意"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "直接接受DASH"; +/* CrowdNode */ +"Account Recovery" = "账号恢复"; + /* No comment provided by engineer. */ "Activity" = "活动"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "添加新朋友"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "地址"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "高级安全"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "所有"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "和"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "您确定要取消此交易吗?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "您确定吗?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "开启位置服务能获得更好的ATM搜索效果"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "余额"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "余额:"; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "电汇"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "通过CrowdNode成为Dash主节点的一部分"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "在 Dash钱包和 Coinbase之间."; +"Between Dash Wallet and Coinbase" = "在 Dash钱包与 Coinbase之间"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "在Dash钱包和您的Coinbase账户之间"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "通过法币购买Dash"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "通过Uphold账户购买Dash"; +/* Dash Portal */ +"Buy Dash · No account needed" = "购买Dash · 无需账户"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "使用Dash购买礼品卡"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "购买/出售"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "通过清除此设备, 您将无法在此设备上使用您的资金. 只有当您无法访问密码并忘记PIN时才应当这样做."; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "取消"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易无法撤销这笔交易订单. 您的Coinbase账户不久会将收到Dash."; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "更改PIN"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "检查您的连接"; /* Choose your Dash username */ "Choose your" = "选择您的"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "清除"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "关闭"; +/* CrowdNode */ +"Close and notify when it’s done" = "完成后关闭并发送通知"; + /* No comment provided by engineer. */ "Close App" = "关闭App"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase 费用"; -/* No comment provided by engineer. */ -"Confirm" = "确认"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "确认并付款"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "确认 (%@)"; +"Confirm" = "确认"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "确认 (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "确认PIN"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "确认中"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "已连接"; +/* CrowdNode */ +"Connected Dash address" = "连接的 Dash地址"; + /* No comment provided by engineer. */ "Connected peers: %d" = "已连接节点: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "复制"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "复制日志"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "无法连接到Dash网络,请检查您是否已连接到了互联网。"; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "汇率未找到."; + /* No comment provided by engineer. */ "Couldn't make payment" = "无法付款"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "无法将交易发送到Dash网络"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "创建新钱包"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "创建账户"; +/* CrowdNode */ +"Create an online CrowdNode account" = "创建一个线上CrowdNode账户"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "创建线上账户"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "信用卡"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode 账户"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode 的福利"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode帮助"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode使用此地址作为您的账户ID. 若您丢失了与此地址关联的密码, 您将无法访问此钱包和您CrowdNode账户中的资金."; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode 提款限额"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "Dash"; +/* No comment provided by engineer. */ +"Dash address" = "达世币地址"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase上的Dash余额"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Uphold 上的Dash余额"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "Dash付款不能小于 %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "此设备的 Dash钱包"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay升级费用"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "日期"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "默认货币, 快捷方式, 关于..."; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "取消 Coinbase账户的关联"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "断开 Uphold 账户"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "连接断开"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "距离"; /* No comment provided by engineer. */ "Do not take a screenshot" = "请勿截屏"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "完成"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例 johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "先前的"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "只需点击几下, 即可轻松质押Dash并赚取被动收益."; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "例: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "下方输入您的2次验证码"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "错误"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "错误升级"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "退出"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "购买加密货币的费用"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "正在获取信息"; /* Coinbase/Payment Methods */ "Fiat Account" = "法币账户"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "过滤交易"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "筛选条件:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "在Dash网络上查找用户"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "寻找接受 Dash 的商家, 可以在哪里购买以及如何通过它获得收益."; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "查找接受Dash支付方式的商户."; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "首次存款应超过 %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "为了保障您的账户安全, 您已被登出."; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "来自Dash钱包"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "从 Uphold 转到您的Dash钱包"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "从Uphold到您的Dash钱包"; /* Coinbase */ "from your Coinbase account" = "从您的 Coinbase 账户"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "仅需 0.5 Dash的存款即可从Dash主节点中获得奖励."; + /* No comment provided by engineer. */ "Generate extended public keys?" = "生成扩展公钥?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "获得报价"; +/* CrowdNode */ +"Get Rewards Instantly" = "立即获得奖励"; + /* No comment provided by engineer. */ "Get Started" = "开始使用"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "开始使用CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "礼品卡"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "帮助我们改善您的体验"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "高"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "历史"; +/* CrowdNode */ +"How CrowdNode staking works" = "CrowdNode 质押的运作原理"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "如何确认您的API Dash地址"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "如何使用礼品卡"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Evolution 节点 ID 私钥"; /* No comment provided by engineer. */ "I Accept" = "我同意"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "我同意 CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "我已将它写下来"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "如果您丢失了密码, 您可以通过其他方式验证自己以重新获得对您CrowdNode资金的访问权限."; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "如果您丢失此钱包的密码并丢失此设备或卸载Dash钱包, 您将无法访问CrowdNode上和此钱包中的资金."; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "如果您仍想清空钱包, 请输入: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "如果您想要保存手动重新分类的交易, 您应当导出 CSV 交易文件."; /* No comment provided by engineer. */ "Ignore" = "忽略"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "立即"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "除了显示的 Coinbase费用外, 我们还包括价格差. 当使用高级交易时将不包括差价, 因为您正在直接与订单簿直接交互.\n\n加密货币市场变化无常, 这使我们能够暂时锁定交易执行的价格."; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "正在进行..."; /* No comment provided by engineer. */ "Income" = "收入"; +/* CrowdNode */ +"Information about your online account" = "有关您线上账户的信息"; + /* Buy Sell Portal */ "Initializing" = "正在初始化"; /* No comment provided by engineer. */ "Insufficient funds" = "资金不足"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "交互"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "内部转账"; /* No comment provided by engineer. */ "Internally moved to" = "内部移动至"; +/* CrowdNode */ +"Introducing Staking" = "介绍质押"; + /* Invalid transaction */ "Invalid" = "无效"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "无效输入"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "无效的付款请求"; /* No comment provided by engineer. */ "Invalid QR Code" = "无效二维码"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "您的余额可能需要一分钟后才能被更新."; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "将 Dash从 Coinbase转账到此设备的 Dash钱包最多可能需要10分钟."; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "似乎您正在尝试使用12个单词的助记词来恢复您的钱包, 但是您只输入了10个单词, 是否想要自动找回缺失的单词? 过程可能需要一个小时左右. 我们建议您插入设备."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "似乎您正在尝试使用12个单词的助记词来恢复您的钱包, 但是您只输入了11个单词, 是否想要自动找回缺失的单词?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "加入进化之旅"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "加入资金池"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "密钥 Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "了解更多..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "完成后通知我"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "只限字母和数字"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "关联Coinbase账户"; +/* CrowdNode */ +"Link Existing Account" = "连接现有账户"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "连接现有的CrowdNode账户"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "登录到CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "退出"; - /* No comment provided by engineer. */ "Log out from Uphold" = "从Uphold退出"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "低"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "管理 GPS 权限"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "地图"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "主节点密钥"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "主节点升级"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "最大"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "最大 %ld 个字符"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "中等"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "会员可以自由离开资金池, 并且通常可以立刻离开."; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "开启位置服务能获得更好的商户搜索效果."; -/* Validation rule */ -"Minimum 3 characters" = "最小 3 个字符"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "更多"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "更多控制"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "移动于"; /* No comment provided by engineer. */ "Moved to Address" = "移动至地址"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "我的通讯录"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "新的"; +/* CrowdNode */ +"New CrowdNode Account" = "新的CrowdNode账户"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC设备"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "没有活跃用户"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "没有支付方式"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "不是一个有效Dash地址"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "并非所有商店都直接接受Dash支付, 但您可以使用Dash购买礼品卡."; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "一旦 %@ 通过了您的朋友请求, 您就可以使用用户名直接付款"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "线上"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "在线商户"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "运营者私钥"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "订单预览"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "所有者私钥"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "支付"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "直接付款给用户名"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "使用...来支付"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "付款类型"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "支付选项"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "每笔交易"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "付款时始终需要输入PIN"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "请检查您的网络连接"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "请输入PIN码以升级钱包"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "请注意, Dash钱包不保存电子邮件, 仅发送至 CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "请注意, 您需要增加余额至 %@ Dash才能够从CrowdNode账户中提币到此钱包."; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "请尝试重新扫描"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "请稍等"; /* No comment provided by engineer. */ "Please wait" = "请稍等"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "请等钱包完全同步后再导出您的交易记录"; /* No comment provided by engineer. */ "Please write it down" = "请将其写下来"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "此前使用的:"; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "私钥 / 公钥 (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "保护您的存款"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "供应商地址"; @@ -1196,12 +1646,18 @@ /* No comment provided by engineer. */ "Public key (legacy)" = "公钥 (继承)"; +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; + /* Coinbase/Buy Dash */ "Purchase" = "购买"; /* No comment provided by engineer. */ "Quick Receive" = "快速接收"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "经仲裁链验证: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "直接在Dash钱包上收款"; +/* CrowdNode */ +"Receive your share of rewards daily." = "每天接收属于您份额的奖励."; + /* Received transaction */ "Received" = "已接收"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "接收于"; +/* CrowdNode */ +"Receiving rewards" = "领取奖励"; + /* No comment provided by engineer. */ "Recover" = "恢复"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "报告问题"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "重新扫描"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "对app进行评论和评分"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "奖励"; /* No comment provided by engineer. */ "Rewards" = "奖励"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "扫描"; /* No comment provided by engineer. */ "Scan Private Key" = "扫描私钥"; +/* No comment provided by engineer. */ +"Scan QR" = "扫描二维码"; + /* No comment provided by engineer. */ "Scan QR Code" = "扫描二维码"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截图可以被其他程序或者设备获得. 请生成一个新的助记词并妥善保管."; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "搜索朋友"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "正在Dash网络上搜索用户名 %@"; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "安全"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "查看Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "选择一个币种"; /* Buy Sell Dash */ "Select a service" = "选择服务"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "选择币种"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "从您当前用于CrowdNode账户的Dash主地址发送%@"; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "发送朋友请求"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "发送报告"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "发送至"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "发送到复制的地址或二维码"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "正在发送"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "正在发送至"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "设置PIN"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "设置"; /* No comment provided by engineer. */ "Setup Wallet" = "设置钱包"; +/* CrowdNode */ +"Share" = "分享"; + /* Receive screen */ "Share address" = "分享地址"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "在超过 150k 家商户使用Dash购物"; - /* Enter Address Screen */ "Show content in the clipboard" = "显示剪切板中的内容"; /* No comment provided by engineer. */ "Show Masternode Keys" = "显示主节点密钥"; +/* CrowdNode */ +"Show QR" = "显示二维码"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "显示助记词"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "质押"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "帮助支持"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "同步中..."; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "点击剪切板中的地址进行粘贴"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "税务种类"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "区块链正在同步..."; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "验证码不正确. 请检查并重试!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash已成功存入您的 Coinbase账户. 但是把 Dash转账到此设备上的 Dash钱包时出错."; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "您可以发送的最小额度是%@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "没有新的通知"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "您的朋友中没有与名称 %@ 匹配的用户"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "在获取新地址时出现了一个错误"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "此二维码已包含 %@的付款请求"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "这代表完整主节点当前年度百分比收益减去15%的CrowdNode费用. 这不是保证回报率, 可能会根据CrowdNode资金池的大小和Dash价格而上下浮动."; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "此钱包并不是空的或同步尚未完成, 如果没有助记词, 请不要清空钱包"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "到此设备的Dash钱包"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "开始质押前, 需要创建一个CrowdNode账户或连接到现有账户."; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "在此设备上的Dash钱包上为您CrowdNode账户指定的Dash地址"; + /* No comment provided by engineer. */ "Tools" = "工具"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "总计"; /* No comment provided by engineer. */ "Touch ID limit" = "触控ID限制"; +/* CrowdNode */ +"Transaction History" = "交易记录"; + /* No comment provided by engineer. */ "Transaction id" = "交易 id"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "转账 Dash"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "将Dash从您的Uphold账户转移到此钱包"; - /* CrowdNode */ "Transfer Error" = "转账发生错误"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "再试一次"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "打开设备密码"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "需要二次验证"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "无法连接"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "未能获得新的QR码"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "未知"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "不支持的链接"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "已更新: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "更新价格"; /* No comment provided by engineer. */ -"Upgrade Fee" = "升级费用"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "正在升级到DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "使用礼品卡"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "使用在:"; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "用户名已被使用"; -/* CrowdNode Portal */ -"Validating address…" = "正在确认地址..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "验证用户名完成"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "正在确认地址..."; /* No comment provided by engineer. */ "Validating username failed" = "验证用户名失败"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "验证"; +/* CrowdNode */ +"Verify your API Dash address" = "验证您的API Dash地址"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "非常高"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "将会向CrowdNode发送非常少的Dash用以验证您是该钱包地址的所有者."; + /* No comment provided by engineer. */ "View All" = "查看全部"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看助记词"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "投票者地址"; /* No comment provided by engineer. */ "Voting Keys" = "投票者密钥"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "等待区块链完全同步后, 我们才能查看您的交易记录. 访问CrowdNode网站登录或注册."; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "我们升级了"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "我们将自动检测到此交易并将相同的额度转移到您的CrowdNode账户. 之后, 您将能够在此设备上的Dash钱包中进行存款和提款."; + /* Website */ "Website" = "网站"; /* No comment provided by engineer. */ "Welcome" = "欢迎"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "当交易被确认后, 另一个钱包将会分文不值, 并且出于安全原因不应当再被使用."; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "为什么我看到所有这些交易?"; +/* CrowdNode */ +"Why do you need an online account?" = "为什么您需要线上账户?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "为什么我不应该截屏?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "提款请求"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "是的"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "您即将从此设备清除本钱包. 本钱包相关联的资金只能通过该钱包对应的助记词找回."; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "您可以使用脸部识别来认证下方交易"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "您可以使用指纹识别来认证下方交易"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "您可以更改向您支付奖励收入的方式 / 时间."; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "您可以查看有关您的存款, 提款和奖励收入的详细信息."; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "您没有足够的余额"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "您超出了 Coinbase的授权限制."; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "您已经选择了 \"%@\" 作为您的用户名. 您的用户名一旦注册就无法更改."; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "您没有足够的资金来继续操作"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "您必须在Dash钱包重备份您的密码"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "您必须输入密码才能进入Dash钱包"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "您的Dash钱包中至少需要有%@ Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "您至少需要%@来加入资金池."; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "您至少需要有%@才能进行CrowdNode验证."; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "您同样需要使用浏览器从Uphold网站退出"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "如果此设备丢失, 或Dash钱包从此设备被卸载, 则需要此助记词来找回您的资金."; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "您将会在此设备的钱包中收到%@Dash. 请注意, 完成转账最多可能需要2-3分钟."; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "您将自动收到小额付款, 默认下它们将被再次投资, 但是设置自动提款以接收定期付款也很容易."; + /* CrowdNode */ "Your CrowdNode account is creating…" = "正在创建您的CrowdNode账户..."; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "您向CrowdNode的存款已收到."; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "您的位置用于显示您在地图上的位置, 所选半径内的自动提款机以及优化搜索结果."; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "您的位置用于显示您在地图上的位置, 所属区域中的商家, 以及改进搜索结果."; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已被发送, 金额将几分钟内出现在您的钱包."; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "您当前用于CrowdNode账户的主要Dash地址"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "您Uphold账户中Dash余额是"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已被发送, 金额将几分钟内出现在您的钱包."; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "您的用户名 %@ 已经在Dash网络上成功创建"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "您的用户名 %@ 正在Dash网络上创建中"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "您的钱包现已安全. 您可以随时在其他设备通过您的助记词找回您的账户."; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index b772265e8..b718198c2 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -22,6 +22,15 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ 不允許訪問Touch ID"; +/* Voting */ +"%ld duplicates" = "%ld duplicates"; + +/* Voting */ +"%ld requests" = "%ld requests"; + +/* 10/20 Characters */ +"%ld/%ld Characters" = "%1$ld/%2$ld Characters"; + /* No comment provided by engineer. */ "(1/3) Processing Payment" = "(1/3) 處理付款中"; @@ -94,6 +103,9 @@ /* No comment provided by engineer. */ "About" = "關於"; +/* No comment provided by engineer. */ +"About me" = "About me"; + /* No comment provided by engineer. */ "Accept" = "接受"; @@ -106,6 +118,9 @@ /* No comment provided by engineer. */ "Accepts DASH directly" = "直接接受達世幣"; +/* CrowdNode */ +"Account Recovery" = "恢復帳戶"; + /* No comment provided by engineer. */ "Activity" = "活動"; @@ -118,12 +133,33 @@ /* No comment provided by engineer. */ "Add a New Contact" = "新增聯絡人"; +/* No comment provided by engineer. */ +"Add your Friends & Family" = "Add your Friends & Family"; + +/* Usernames */ +"Add your friends & family" = "Add your friends & family"; + /* No comment provided by engineer. */ "Address" = "位址"; +/* CoinJoin */ +"Advanced" = "Advanced"; + /* No comment provided by engineer. */ "Advanced Security" = "進階的安全性"; +/* Coinbase */ +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; + +/* Usernames */ +"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; + +/* Usernames */ +"After voting is completed on %@ you can create any username that has not already been created" = "After voting is completed on %@ you can create any username that has not already been created"; + +/* No comment provided by engineer. */ +"Agree" = "Agree"; + /* No comment provided by engineer. */ "All" = "所有"; @@ -157,6 +193,9 @@ /* CrowdNode */ "and" = "和"; +/* CoinJoin */ +"Any funds that have been mixed will be combined with your un mixed funds" = "Any funds that have been mixed will be combined with your un mixed funds"; + /* Coinbase/Payment Methods */ "Apple Pay" = "Apple Pay"; @@ -175,9 +214,21 @@ /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this transaction?" = "您確定要取消此交易嗎?"; +/* CoinJoin */ +"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; + +/* CoinJoin */ +"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; + /* No comment provided by engineer. */ "Are you sure?" = "你確定嗎?"; +/* Voting */ +"As a masternode owner you can vote to approve requested usernames before users will be able to create it." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it."; + +/* CrowdNode */ +"As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM 搜索在打開定位服務的情況下效果更好"; @@ -217,8 +268,8 @@ /* Send Screen: to address */ "Balance" = "餘額"; -/* Uphold entry point */ -"Balance not available" = "Balance not available"; +/* CrowdNode */ +"Balance On CrowdNode" = "Balance On CrowdNode"; /* CrowdNode */ "Balance: " = "結餘: "; @@ -229,8 +280,14 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "電匯"; +/* CrowdNode */ +"Become part of a Dash Masternode with CrowdNode" = "通過 CrowdNode 成為達世幣主節點的一部分"; + +/* Validation rule: Between 3 and 24 characters */ +"Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; + /* Coinbase Entry Point */ -"Between Dash Wallet and Coinbase." = "在達世幣錢包和 Coinbase 之間。"; +"Between Dash Wallet and Coinbase" = "在達世幣錢包和 Coinbase 之間。"; /* Dash Service Overview */ "Between Dash Wallet and your Coinbase account" = "在達世幣錢包和您的 Coinbase 帳戶之間"; @@ -266,8 +323,8 @@ /* Dash Service Overview */ "Buy Dash with fiat" = "用法定貨幣來購買達世幣"; -/* No comment provided by engineer. */ -"Buy Dash with Uphold account" = "用Uphold 帳戶來購買達世幣"; +/* Dash Portal */ +"Buy Dash · No account needed" = "購買達世幣 · 無需賬戶"; /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "使用達世幣購買禮品卡"; @@ -278,6 +335,9 @@ /* Buy/Sell */ "Buy/Sell" = "購買/出售"; +/* Voting */ +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first"; + /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "通過擦洗此設備,您將無法再使用此設備上的資金。 只有在您無法再訪問密碼詞組並忘記密碼時,才應該這樣做。"; @@ -287,6 +347,12 @@ /* No comment provided by engineer. */ "Cancel" = "取消"; +/* Voting */ +"Cancel Approval" = "Cancel Approval"; + +/* No comment provided by engineer. */ +"Cancel Request" = "Cancel Request"; + /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易不會取消交易訂單。您很快就會在您的 Coinbase 帳戶中收到 DASH。"; @@ -299,12 +365,24 @@ /* No comment provided by engineer. */ "Change PIN" = "更改密碼"; +/* CoinJoin */ +"Change to Advanced" = "Change to Advanced"; + +/* CoinJoin */ +"Change to Intermediate" = "Change to Intermediate"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "選擇你的"; +/* No comment provided by engineer. */ +"Choose Your Username" = "Choose Your Username"; + +/* No comment provided by engineer. */ +"Claimed" = "Claimed"; + /* No comment provided by engineer. */ "Clear" = "清除"; @@ -314,6 +392,9 @@ /* No comment provided by engineer. */ "Close" = "關閉"; +/* CrowdNode */ +"Close and notify when it’s done" = "完成後關閉並發送通知"; + /* No comment provided by engineer. */ "Close App" = "關閉程序"; @@ -326,14 +407,11 @@ /* Coinbase/Buy Dash */ "Coinbase Fee" = "Coinbase 費用"; -/* No comment provided by engineer. */ -"Confirm" = "確認:"; +/* CoinJoin */ +"CoinJoin" = "CoinJoin"; /* No comment provided by engineer. */ -"Confirm & Pay" = "確認並付款"; - -/* Coinbase/Buy Dash/Confirm Order */ -"Confirm (%@)" = "確認 (%@)"; +"Confirm" = "確認:"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "確認 (%1$d%2$@)"; @@ -341,6 +419,9 @@ /* No comment provided by engineer. */ "Confirm PIN" = "確認密碼"; +/* Voting */ +"Confirm Username Request" = "Confirm Username Request"; + /* No comment provided by engineer. */ "Confirming" = "確認中"; @@ -351,6 +432,9 @@ Coinbase Entry Point */ "Connected" = "已連接"; +/* CrowdNode */ +"Connected Dash address" = "連接的達世幣位址"; + /* No comment provided by engineer. */ "Connected peers: %d" = "連接的節點: %d"; @@ -385,6 +469,9 @@ /* No comment provided by engineer. */ "Copy" = "複製"; +/* No comment provided by engineer. */ +"Copy Invitation Link" = "Copy Invitation Link"; + /* No comment provided by engineer. */ "Copy Logs" = "複製日誌"; @@ -397,6 +484,9 @@ /* No comment provided by engineer. */ "Could not connect to the Dash network, please check that you are connected to the internet." = "無法連接到達世幣網絡,請檢查您是否已連接到互聯"; +/* No comment provided by engineer. */ +"Could not find exchange rate." = "無法找到匯率"; + /* No comment provided by engineer. */ "Couldn't make payment" = "無法進行支付"; @@ -406,25 +496,52 @@ /* No comment provided by engineer. */ "Couldn't transmit payment to Dash network" = "無法將交易傳送到達世幣網絡"; +/* No comment provided by engineer. */ +"Create a new Invitation" = "Create a new Invitation"; + +/* No comment provided by engineer. */ +"Create a new invitation" = "Create a new invitation"; + /* No comment provided by engineer. */ "Create a New Wallet" = "創建一個新錢包"; +/* Usernames */ +"Create a username" = "Create a username"; + +/* No comment provided by engineer. */ +"Create a username, add your friends." = "Create a username, add your friends."; + /* CrowdNode */ "Create Account" = "創建帳號"; +/* CrowdNode */ +"Create an online CrowdNode account" = "創建一個在線 CrowdNode 帳戶"; + +/* No comment provided by engineer. */ +"Create invitation" = "Create invitation"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "創建在線帳戶"; +/* No comment provided by engineer. */ +"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; + /* Coinbase/Payment Methods */ "Credit Card" = "信用卡"; /* Crowdnode */ "CrowdNode Account" = "CrowdNode 帳戶"; +/* CrowdNode */ +"CrowdNode benefits" = "CrowdNode 的好處"; + /* CrowdNode Portal */ "CrowdNode Support" = "CrowdNode 支援"; +/* CrowdNode */ +"CrowdNode uses this address as your account ID. You will lose access to your funds within this wallet and your CrowdNode account if you lose the passphrase associated to this address." = "CrowdNode 使用此位址作為您的帳戶 ID。如果您丟失了與此位址關聯的密碼,您將無法訪問此錢包和您的 CrowdNode 帳戶中的資金。"; + /* CrowdNode */ "CrowdNode withdrawal limits" = "CrowdNode 提款限額"; @@ -452,11 +569,17 @@ /* Explore Dash: Filters */ "Dash" = "達世幣"; +/* No comment provided by engineer. */ +"Dash address" = "達世幣位址"; + +/* CrowdNode */ +"Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; + /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase 上的達世幣結餘"; /* Uphold Entry Point */ -"Dash balance on Uphold" = "Dash balance on Uphold"; +"Dash balance on Uphold" = "Uphold 上的達世幣結餘"; /* No comment provided by engineer. */ "Dash payments can't be less than %@" = "達世幣付款不能低於 %@"; @@ -467,6 +590,9 @@ /* Buy Dash */ "Dash Wallet on this device" = "此設備上的達世幣錢包"; +/* No comment provided by engineer. */ +"DashPay Invitation" = "DashPay Invitation"; + /* No comment provided by engineer. */ "DashPay Upgrade Fee" = "DashPay 升級費"; @@ -476,6 +602,12 @@ /* No comment provided by engineer. */ "Date" = "日期"; +/* Voting */ +"Date: New to old" = "Date: New to old"; + +/* Voting */ +"Date: Old to new" = "Date: Old to new"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "預設貨幣,捷徑,關於…"; @@ -510,16 +642,25 @@ /* Coinbase Entry Point */ "Disconnect Coinbase Account" = "斷開 Coinbase 帳戶的連接"; +/* Uphold Entry Point */ +"Disconnect Uphold Account" = "斷開 Uphold 帳戶的連接"; + /* Buy Sell Portal Coinbase Entry Point */ "Disconnected" = "斷開連接"; +/* No comment provided by engineer. */ +"Display Name" = "Display Name"; + /* Explore Dash: Filters */ "Distance" = "距離"; /* No comment provided by engineer. */ "Do not take a screenshot" = "不要截圖"; +/* Usernames */ +"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; + /* No comment provided by engineer. */ "Done" = "完成"; @@ -532,12 +673,21 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例如 johndoe@mail.com"; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; + /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "之前"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "只需點擊幾下,即可輕鬆質押達世幣並賺取被動收入。"; +/* No comment provided by engineer. */ +"Edit Profile" = "Edit Profile"; + +/* Invitation tag placeholder */ +"eg: Dad" = "eg: Dad"; + /* Input username textfield placeholder */ "eg: johndoe" = "例如: johndoe"; @@ -568,12 +718,24 @@ /* No comment provided by engineer. */ "Enter your 2FA code below" = "在下面輸入您的 2FA 代碼"; +/* No comment provided by engineer. */ +"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; + +/* Voting */ +"Enter your voting key" = "Enter your voting key"; + /* No comment provided by engineer. */ "Error" = "錯誤"; +/* No comment provided by engineer. */ +"Error updating your profile" = "Error updating your profile"; + /* No comment provided by engineer. */ "Error Upgrading" = "錯誤升級"; +/* Usernames */ +"Example post" = "Example post"; + /* No comment provided by engineer. */ "Exit" = "退出"; @@ -616,15 +778,24 @@ /* Coinbase/Fee info */ "Fees in crypto purchases" = "購買加密貨幣的費用"; +/* No comment provided by engineer. */ +"Fetching Image" = "Fetching Image"; + /* Explore Dash */ "Fetching Info" = "正在獲取信息"; /* Coinbase/Payment Methods */ "Fiat Account" = "法幣賬戶"; +/* No comment provided by engineer. */ +"Filter" = "Filter"; + /* No comment provided by engineer. */ "Filter Transactions" = "過濾交易"; +/* No comment provided by engineer. */ +"Filtered by" = "Filtered by"; + /* Explore Dash/Merchants/Filters */ "Filtered by:" = "篩選條件:"; @@ -638,7 +809,10 @@ "Find a user on the Dash Network" = "在達世幣網絡上查找用戶"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; + +/* No comment provided by engineer. */ +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "尋找接受達世幣的商家、可以在哪裡購買以及如何透過它賺取收入。"; /* No comment provided by engineer. */ "Find merchants who accept Dash as payment." = "查找接受達世幣作為付款的商家。"; @@ -649,6 +823,9 @@ /* CrowdNode */ "First deposit should be more than %@" = "首次存款應超過 %@"; +/* CrowdNode */ +"First minimum deposit" = "First minimum deposit"; + /* Coinbase */ "For your security, you have been signed out." = "基於您的帳戶安全考量,您已被登出。"; @@ -670,12 +847,18 @@ /* from Dash Wallet */ "from Dash Wallet" = "來自達世幣錢包"; +/* Uphold Entry Point */ +"From Uphold to Dash Wallet" = "從 Uphold 轉到你的達世幣錢包"; + /* Dash Service Overview */ "From Uphold to your Dash Wallet" = "從 Uphold 轉到你的達世幣錢包"; /* Coinbase */ "from your Coinbase account" = "從你的 Coinbase 帳戶"; +/* CrowdNode */ +"Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "只需 0.5 Dash,即可從達世幣主節點中的存款中獲得獎勵。"; + /* No comment provided by engineer. */ "Generate extended public keys?" = "要生成擴展的公共密鑰嗎?"; @@ -685,9 +868,21 @@ /* Coinbase/Convert Crypto */ "Get Quote" = "獲得報價"; +/* CrowdNode */ +"Get Rewards Instantly" = "立即獲得獎勵"; + /* No comment provided by engineer. */ "Get Started" = "開始使用"; +/* No comment provided by engineer. */ +"Get Test Dash" = "Get Test Dash"; + +/* No comment provided by engineer. */ +"Get your Username" = "Get your Username"; + +/* CrowdNode */ +"Getting started with CrowdNode" = "開始使用 CrowdNode"; + /* Explore Dash: Filters */ "Gift Card" = "禮物卡"; @@ -718,17 +913,32 @@ /* No comment provided by engineer. */ "Help us improve your experience" = "幫助我們改善您的體驗"; +/* CrowdNode */ +"Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; + /* adjective, security level */ "High" = "高"; +/* Voting */ +"High to low" = "High to low"; + /* No comment provided by engineer. */ "History" = "歷史"; +/* CrowdNode */ +"How CrowdNode staking works" = "CrowdNode 質押的運作原理"; + +/* No comment provided by engineer. */ +"How do I get Test Dash?" = "How do I get Test Dash?"; + +/* CrowdNode */ +"How to confirm your API Dash address" = "如何確認您的 API 達世幣位址"; + /* No comment provided by engineer. */ "How to Use a Gift Card" = "如何使用禮品卡"; /* No comment provided by engineer. */ -"HPMN Operator Keys" = "Evolution Node ID Keys"; +"HPMN Operator Keys" = "Evolution 節點 ID 金鑰"; /* No comment provided by engineer. */ "I Accept" = "我接受"; @@ -739,21 +949,48 @@ /* CrowdNode */ "I agree to CrowdNode" = "我同意 CrowdNode"; +/* Voting */ +"I have approved" = "I have approved"; + +/* Voting */ +"I have not approved" = "I have not approved"; + /* No comment provided by engineer. */ "I wrote it down" = "我寫下來"; +/* Voting */ +"Identity" = "Identity"; + +/* Usernames */ +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; + +/* CrowdNode */ +"If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "如果您丟失了密碼,您可以通過其他方式驗證自己以重新獲得對您的 CrowdNode 資金的訪問權限。"; + /* No comment provided by engineer. */ "If you lose your passphrase for this wallet and lose this device or uninstall Dash Wallet, you will lose access to your funds on CrowdNode and the funds within this wallet." = "如果您丟失此錢包的恢復詞組並丟失此設備或卸載達世幣錢包,您將無法訪問 CrowdNode 上的資金和此錢包中的資金。"; /* No comment provided by engineer. */ "If you still would like to wipe it please input: \"%@\"" = "如果你仍然想擦拭它,請輸入: \"%@\""; +/* Usernames */ +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; + /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "如果您想要保存手動重新分類的交易類型,您應該導出 CSV 交易文件。"; /* No comment provided by engineer. */ "Ignore" = "忽略"; +/* No comment provided by engineer. */ +"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; + +/* No comment provided by engineer. */ +"Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; + +/* No comment provided by engineer. */ +"Images Privacy Policy" = "Images Privacy Policy"; + /* No comment provided by engineer. */ "Immediately" = "馬上"; @@ -766,27 +1003,48 @@ /* Coinbase/Fee info */ "In addition to the displayed Coinbase fee, we include a spread in the price. When using Advanced Trade, no spread is included because you are interacting directly with the order book.\n\nCryptocurrency markets are volatile, and this allows us to temporarily lock in a price for trade execution." = "除了顯示的 Coinbase 費用外,我們還在價格中包含了價差。使用 Advanced Trade 時,不包括點差,因為您直接在訂單簿上進行交易。\n\n加密貨幣市場波動較大,這使我們能夠暫時鎖定交易執行的價格。"; +/* CrowdNode */ +"In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; + +/* Usernames */ +"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; + +/* Usernames */ +"In case your request is not approved" = "In case your request is not approved"; + /* CrowdNode Portal */ "In process…" = "進行中…"; /* No comment provided by engineer. */ "Income" = "收入"; +/* CrowdNode */ +"Information about your online account" = "有關您的在線帳戶的信息"; + /* Buy Sell Portal */ "Initializing" = "正在初始化"; /* No comment provided by engineer. */ "Insufficient funds" = "餘額不足"; +/* No comment provided by engineer. */ +"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; + /* Coinbase/Payment Methods */ "Interac" = "互動"; +/* CoinJoin */ +"Intermediate" = "Intermediate"; + /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "內部轉移"; /* No comment provided by engineer. */ "Internally moved to" = "內部移至"; +/* CrowdNode */ +"Introducing Staking" = "介紹質押"; + /* Invalid transaction */ "Invalid" = "無效"; @@ -794,7 +1052,7 @@ "Invalid amount" = "金額無效"; /* No comment provided by engineer. */ -"Invalid Dash address" = "Invalid Dash address"; +"Invalid Dash address" = "無效的達世幣位址"; /* CrowdNode Online */ "Invalid Email" = "無效的電郵"; @@ -802,12 +1060,57 @@ /* Invalid Amount Input */ "Invalid Input" = "輸入無效"; +/* No comment provided by engineer. */ +"Invalid Inviation" = "Invalid Inviation"; + /* No comment provided by engineer. */ "Invalid Payment Request" = "無效付款請求"; /* No comment provided by engineer. */ "Invalid QR Code" = "無效的二維碼"; +/* No comment provided by engineer. */ +"Invitation" = "Invitation"; + +/* Invitation #3 */ +"Invitation %ld" = "Invitation %ld"; + +/* No comment provided by engineer. */ +"Invitation already claimed" = "Invitation already claimed"; + +/* No comment provided by engineer. */ +"Invitation Created Successfully" = "Invitation Created Successfully"; + +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; + +/* No comment provided by engineer. */ +"Invitation used by" = "Invitation used by"; + +/* No comment provided by engineer. */ +"Invitations History" = "Invitations History"; + +/* No comment provided by engineer. */ +"Invite" = "Invite"; + +/* No comment provided by engineer. */ +"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; + +/* No comment provided by engineer. */ +"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; + +/* Usernames */ +"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; + +/* No comment provided by engineer. */ +"Invite your friends & family" = "Invite your friends & family"; + +/* No comment provided by engineer. */ +"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; + +/* No comment provided by engineer. */ +"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; + /* CrowdNode */ "It can take a minute for your balance to be updated." = "您的餘額可能需要一分鐘後才能更新。"; @@ -820,15 +1123,33 @@ /* Coinbase */ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "將達世幣從 Coinbase 轉帳到此設備上的達世幣錢包最多可能需要 10 分鐘"; +/* Coinbase */ +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; + /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "似乎您正在嘗試使用12個單詞的恢復詞組來恢復您的錢包,但是您只輸入了10個單詞,是否要自動恢復丟失的單詞? 這可能需要一個小時左右。 我們建議您插入設備。"; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "似乎您正在嘗試使用12個單詞的恢復詞組來恢復您的錢包,但是您只輸入了11個單詞,是否要自動恢復丟失的單詞?"; +/* No comment provided by engineer. */ +"Join" = "Join"; + +/* No comment provided by engineer. */ +"Join DashPay" = "Join DashPay"; + /* No comment provided by engineer. */ "Join Evolution" = "加入進化版的行列"; +/* No comment provided by engineer. */ +"Join Now" = "Join Now"; + +/* CrowdNode */ +"Joining the pool" = "加入資金池"; + +/* Usernames */ +"Keep your passphrase safe" = "Keep your passphrase safe"; + /* No comment provided by engineer. */ "Key Id" = "密鑰 Id"; @@ -851,15 +1172,33 @@ /* Info Screen */ "Learn More..." = "了解更多..."; +/* CrowdNode */ +"Leaving the pool" = "Leaving the pool"; + /* No comment provided by engineer. */ "Let me know when it’s done" = "完成時通知我"; +/* No comment provided by engineer. */ +"Let your friends and family to join Dash" = "Let your friends and family to join Dash"; + +/* No comment provided by engineer. */ +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Let your friends and family to join the Dash Network. Invite them to the world of social banking."; + /* Validation rule */ -"Letters and numbers only" = "只限字母和數字"; +"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; + +/* No comment provided by engineer. */ +"Let’s Get Started" = "Let’s Get Started"; + +/* Voting */ +"Link" = "Link"; /* Dash Service Overview */ "Link Coinbase Account" = "鏈接 Coinbase 帳戶"; +/* CrowdNode */ +"Link Existing Account" = "鏈接現有帳戶"; + /* CrowdNode */ "Link Existing CrowdNode Account" = "鏈接現有的 CrowdNode 帳戶"; @@ -893,9 +1232,6 @@ /* CrowdNode WebView */ "Log in to CrowdNode" = "登入到 CrowdNode"; -/* No comment provided by engineer. */ -"Log Out" = "登出"; - /* No comment provided by engineer. */ "Log out from Uphold" = "從Uphold登出"; @@ -917,6 +1253,12 @@ /* adjective, security level */ "Low" = "低"; +/* Voting */ +"Low to high" = "Low to high"; + +/* Usernames */ +"Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow" = "Make a post with the text above (or something similar) on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste a link to the post bellow"; + /* No comment provided by engineer. */ "Manage GPS Permission" = "管理 GPS 權限"; @@ -926,6 +1268,9 @@ /* Map */ "Map" = "地圖"; +/* Voting */ +"Masternode IP address" = "Masternode IP address"; + /* No comment provided by engineer. */ "Masternode Keys" = "主節點密鑰"; @@ -941,20 +1286,29 @@ /* No comment provided by engineer. */ "Masternode Update" = "主節點更新"; +/* Voting */ +"Masternode Voting Key" = "Masternode Voting Key"; + /* Contracted variant of 'Maximum' word */ "Max" = "最大值"; -/* Validation rule: Maximum 24 characters */ -"Maximum %ld characters" = "最多 %ld 個字符"; +/* Usernames */ +"Maximum 75 characters" = "Maximum 75 characters"; + +/* No comment provided by engineer. */ +"Maybe later" = "Maybe later"; /* adjective, security level */ "Medium" = "中位數"; +/* CrowdNode */ +"Members are free to leave the pool and can most often leave immediately." = "會員可以自由離開資金池,並且通常可以立即離開。"; + /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "開啟位置服務後,商家搜索效果會更好。"; -/* Validation rule */ -"Minimum 3 characters" = "至少 3 個字母"; +/* CoinJoin */ +"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; /* No comment provided by engineer. */ "More" = "更多"; @@ -962,12 +1316,24 @@ /* No comment provided by engineer. */ "More Control" = "更多控制選項"; +/* No comment provided by engineer. */ +"More Suggestions" = "More Suggestions"; + +/* No comment provided by engineer. */ +"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; + /* No comment provided by engineer. */ "Moved from" = "從移動"; /* No comment provided by engineer. */ "Moved to Address" = "移至位址"; +/* CoinJoin */ +"Multiple hours" = "Multiple hours"; + +/* Validation rule */ +"Must start and end with a letter or number" = "Must start and end with a letter or number"; + /* No comment provided by engineer. */ "My Contacts" = "我的通訊錄"; @@ -998,6 +1364,15 @@ /* (List of) New (notifications) */ "New" = "新的"; +/* CrowdNode */ +"New CrowdNode Account" = "新建 CrowdNode 帳戶"; + +/* Voting */ +"New to old" = "New to old"; + +/* Coinbase */ +"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; + /* No comment provided by engineer. */ "NFC device" = "NFC設備"; @@ -1010,6 +1385,9 @@ /* Coinbase */ "No active user" = "沒有活躍用戶"; +/* Coinbase */ +"No cash account found" = "No cash account found"; + /* Coinbase/Buy Dash */ "No payment methods" = "沒有付款方式"; @@ -1034,6 +1412,9 @@ /* No comment provided by engineer. */ "Not a valid Dash address" = "不是一個有效的達世幣位址"; +/* Usernames */ +"Not a valid URL" = "Not a valid URL"; + /* No comment provided by engineer. */ "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "並非所有商店都直接接受達世幣,但您可以使用達世幣購買禮品卡。"; @@ -1055,9 +1436,15 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* Voting */ +"Old to new" = "Old to new"; + /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "當 %@ 接受您的請求後,您就可以直接向用戶名付款"; +/* Voting */ +"Once the voting ends you can create any username you want as long as it hasn’t already been created" = "Once the voting ends you can create any username you want as long as it hasn’t already been created"; + /* Online */ "Online" = "在線的"; @@ -1067,9 +1454,21 @@ /* Online Merchant */ "Online Merchant" = "網上商戶"; +/* Voting */ +"Only duplicates" = "Only duplicates"; + +/* No comment provided by engineer. */ +"Only requests with links" = "Only requests with links"; + +/* Voting */ +"Only with links" = "Only with links"; + /* No comment provided by engineer. */ "Operator Keys" = "操作員公鑰"; +/* No comment provided by engineer. */ +"or" = "or"; + /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "訂單預覽"; @@ -1079,6 +1478,12 @@ /* No comment provided by engineer. */ "Owner Keys" = "擁有者公鑰"; +/* Usernames */ +"Paste the link" = "Paste the link"; + +/* No comment provided by engineer. */ +"Paste your image URL" = "Paste your image URL"; + /* No comment provided by engineer. */ "Pay" = "付款"; @@ -1088,6 +1493,15 @@ /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Pay Directly to Username" = "直接支付給用戶名"; +/* Usernames */ +"Pay now and if not approved, you can create a different name without paying again" = "Pay now and if not approved, you can create a different name without paying again"; + +/* No comment provided by engineer. */ +"Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; + +/* Usernames */ +"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; + /* Coinbase/Buy Dash */ "Pay with" = "使用。。。來支付"; @@ -1118,6 +1532,12 @@ /* Explore Dash/Merchants/Filters */ "Payment Type" = "支付方式"; +/* No comment provided by engineer. */ +"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; + +/* CrowdNode */ +"Payout Options" = "支付選項"; + /* Coinbase/Payment Methods */ "PayPal" = "PayPal"; @@ -1133,6 +1553,12 @@ /* CrowdNode */ "per transaction" = "每筆交易"; +/* Usernames */ +"Personalise profile" = "Personalise profile"; + +/* No comment provided by engineer. */ +"Personalize" = "Personalize"; + /* No comment provided by engineer. */ "PIN is always required to make a payment" = "總是需要輸入密碼才能進行付款"; @@ -1142,9 +1568,18 @@ /* Network Unavailable */ "Please check your network connection" = "請檢查您的網絡連接"; +/* No comment provided by engineer. */ +"Please enter a valid gravatar email ID." = "Please enter a valid gravatar email ID."; + +/* No comment provided by engineer. */ +"Please enter a valid image URL." = "Please enter a valid image URL."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "請輸入密碼以升級錢包"; +/* CrowdNode */ +"Please note that the email is not saved by the Dash Wallet and is only sent to CrowdNode" = "請注意,達世幣錢包不保存電子郵件,僅發送至 CrowdNode"; + /* Leftover balance warning */ "Please note, you will not be able to withdraw your funds from CowdNode to this wallet until you increase your balance to %@ Dash." = "請注意,在您的餘額增加到 %@ Dash之前,您將無法將資金從 CrowdNode 提款到此錢包。"; @@ -1160,21 +1595,33 @@ /* No comment provided by engineer. */ "Please try scanning again" = "請嘗試再次掃描"; +/* Usernames */ +"Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; + /* No comment provided by engineer. */ "Please Wait" = "請稍等"; /* No comment provided by engineer. */ "Please wait" = "請稍等"; +/* CrowdNode */ +"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; + /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "請等到錢包完全同步後再導出您的交易記錄。"; /* No comment provided by engineer. */ "Please write it down" = "請寫下來"; +/* No comment provided by engineer. */ +"Preview Invitation" = "Preview Invitation"; + /* No comment provided by engineer. */ "Previously used at: " = "以前用於: "; +/* CrowdNode */ +"Primary Dash address" = "Primary Dash address"; + /* No comment provided by engineer. */ "Private / Public Keys (base64)" = "私鑰 / 公鑰 (base64)"; @@ -1187,6 +1634,9 @@ /* CrowdNode Portal */ "Protect your savings" = "保護您的存款"; +/* Usernames */ +"Prove your identity" = "Prove your identity"; + /* No comment provided by engineer. */ "Provider Address" = "提供者位址"; @@ -1194,7 +1644,10 @@ "Public key" = "公鑰"; /* No comment provided by engineer. */ -"Public key (legacy)" = "Public key (legacy)"; +"Public key (legacy)" = "公鑰 (舊版) "; + +/* No comment provided by engineer. */ +"Public URL" = "Public URL"; /* Coinbase/Buy Dash */ "Purchase" = "購買"; @@ -1202,6 +1655,9 @@ /* No comment provided by engineer. */ "Quick Receive" = "快速接收"; +/* Voting */ +"Quick Voting" = "Quick Voting"; + /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "驗證的仲裁人數: %1$d/%2$d"; @@ -1223,6 +1679,9 @@ /* Coinbase Entry Point */ "Receive directly into Dash Wallet" = "直接在達世幣錢包上收款"; +/* CrowdNode */ +"Receive your share of rewards daily." = "每天收到屬於您的獎勵金額。"; + /* Received transaction */ "Received" = "己收到"; @@ -1235,6 +1694,9 @@ /* No comment provided by engineer. */ "Received from" = "從......收到"; +/* CrowdNode */ +"Receiving rewards" = "領取獎勵"; + /* No comment provided by engineer. */ "Recover" = "恢復"; @@ -1271,6 +1733,15 @@ /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "報告問題"; +/* Voting */ +"Request details" = "Request details"; + +/* Voting */ +"Request Username" = "Request Username"; + +/* Voting */ +"Request your username" = "Request your username"; + /* An action */ "Rescan" = "重新掃瞄"; @@ -1301,18 +1772,30 @@ /* No comment provided by engineer. */ "Review & Rate the app" = "對應用程序進行評論並評分"; +/* Voting */ +"Review the posting below to verify the ownership of this username" = "Review the posting below to verify the ownership of this username"; + /* No comment provided by engineer. */ "Reward" = "報酬"; /* No comment provided by engineer. */ "Rewards" = "報酬"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save Changes" = "Save Changes"; + /* No comment provided by engineer. */ "Scan" = "掃描"; /* No comment provided by engineer. */ "Scan Private Key" = "掃描私鑰"; +/* No comment provided by engineer. */ +"Scan QR" = "掃描二維碼"; + /* No comment provided by engineer. */ "Scan QR Code" = "掃瞄二維碼"; @@ -1331,6 +1814,9 @@ /* No comment provided by engineer. */ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截圖可以被其他程序或者設備獲得。請生成一個新的恢復詞組並妥善保管。"; +/* Voting */ +"Search by username" = "Search by username"; + /* No comment provided by engineer. */ "Search for a contact" = "搜尋聯絡人"; @@ -1349,6 +1835,9 @@ /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "在達世幣網絡中搜尋用戶名 %@ "; +/* No comment provided by engineer. */ +"Secure Your Wallet" = "Secure Your Wallet"; + /* No comment provided by engineer. */ "Security" = "安全性"; @@ -1358,12 +1847,21 @@ /* No comment provided by engineer. */ "See on Uphold" = "參見 Uphold"; +/* No comment provided by engineer. */ +"Select" = "Select"; + /* Coinbase */ "Select a coin" = "選擇一個幣"; /* Buy Sell Dash */ "Select a service" = "選擇一項服務"; +/* No comment provided by engineer. */ +"Select from Gallery" = "Select from Gallery"; + +/* CoinJoin */ +"Select mixing level" = "Select mixing level"; + /* Coinbase */ "Select the coin" = "選擇幣種"; @@ -1382,9 +1880,15 @@ /* CrowdNode Confirm */ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "從您當前用於 CrowdNode 帳戶的主要達世幣地址發送 %@ "; +/* No comment provided by engineer. */ +"Send again" = "Send again"; + /* No comment provided by engineer. */ "Send Contact Request" = "發送聯繫請求"; +/* No comment provided by engineer. */ +"Send Invitation" = "Send Invitation"; + /* Coinbase CrowdNode */ "Send Report" = "發送報告"; @@ -1392,6 +1896,12 @@ /* No comment provided by engineer. */ "Send to" = "發給"; +/* No comment provided by engineer. */ +"Send to a Contact" = "Send to a Contact"; + +/* No comment provided by engineer. */ +"Send to contact" = "Send to contact"; + /* No comment provided by engineer. */ "Send to copied address or QR code" = "發送到復制的位址或二維碼"; @@ -1401,6 +1911,9 @@ /* 1 out of 4 in the Sending Animation */ "Sending" = "發送中"; +/* No comment provided by engineer. */ +"Sending Contact Request" = "Sending Contact Request"; + /* No comment provided by engineer. */ "Sending to" = "發送到"; @@ -1437,24 +1950,30 @@ /* No comment provided by engineer. */ "Set PIN" = "設置密碼"; +/* No comment provided by engineer. */ +"Set Your PIN" = "Set Your PIN"; + /* No comment provided by engineer. */ "Settings" = "設置"; /* No comment provided by engineer. */ "Setup Wallet" = "設置錢包"; +/* CrowdNode */ +"Share" = "分享"; + /* Receive screen */ "Share address" = "分享位址"; -/* No comment provided by engineer. */ -"Shop with DASH at over 150k merchants" = "在超過 15 萬個商家使用 DASH 購物"; - /* Enter Address Screen */ "Show content in the clipboard" = "顯示剪貼板中的內容"; /* No comment provided by engineer. */ "Show Masternode Keys" = "顯示主節點公鑰"; +/* CrowdNode */ +"Show QR" = "顯示二維碼"; + /* No comment provided by engineer. */ "Show Recovery Phrase" = "顯示恢復詞組"; @@ -1503,6 +2022,15 @@ /* No comment provided by engineer. */ "Staking" = "質押"; +/* CoinJoin */ +"Start Mixing" = "Start Mixing"; + +/* Step 1 */ +"Step %ld" = "Step %ld"; + +/* CoinJoin */ +"Stop Mixing" = "Stop Mixing"; + /* No comment provided by engineer. */ "Support" = "支援"; @@ -1536,6 +2064,12 @@ /* Balance */ "Syncing…" = "同步中…"; +/* No comment provided by engineer. */ +"Tag for your reference" = "Tag for your reference"; + +/* No comment provided by engineer. */ +"Take a Photo from Camera" = "Take a Photo from Camera"; + /* Enter Address Screen */ "Tap the address from the clipboard to paste it" = "點擊剪貼板中的地址進行粘貼"; @@ -1545,18 +2079,39 @@ /* No comment provided by engineer. */ "Tax Category" = "稅種"; +/* No comment provided by engineer. */ +"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; + /* No comment provided by engineer. */ "The chain is syncing…" = "區塊鏈正在同步…"; /* Coinbase Two Factor Auth */ "The code is incorrect. Please check and try again!" = "代碼不正確。請檢查並重試!"; +/* CrowdNode */ +"The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments." = "The Dash Network is driven by a number of Masternodes which are an essential part of facilitating payments."; + +/* Usernames */ +"The Dash network must vote to approve your username before it is created." = "The Dash network must vote to approve your username before it is created."; + /* Coinbase/Buy Dash/Confirm Order */ "The Dash was successfully deposited to your Coinbase account. But there was a problem transfering it to Dash Wallet on this device." = "Dash 已成功存入您的 Coinbase 帳戶。但是將它轉移到此設備上的達世幣錢包時出現問題。"; +/* Don't translate 'Imgur' */ +"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; + +/* Usernames */ +"The link you send will be visible to all of the Dash network." = "The link you send will be visible to all of the Dash network."; + /* Coinbase */ "The minimum amount you can send is %@" = "您可以發送的最小金額是 %@"; +/* No comment provided by engineer. */ +"them (Fetching Info)" = "them (Fetching Info)"; + /* No comment provided by engineer. */ "There are no new notifications" = "沒有新的通知"; @@ -1569,6 +2124,9 @@ /* No comment provided by engineer. */ "There are no users that match with the name %@ in your contacts" = "在您的通訊錄中沒有與名稱 %@ 匹配的用戶"; +/* Usernames */ +"There was a network error, you can try again at no extra cost" = "There was a network error, you can try again at no extra cost"; + /* Coinbase */ "There was an error while obtaining new address" = "獲取新位址時出錯"; @@ -1590,6 +2148,12 @@ /* CrowdNode Confirm */ "This QR already contains the payment request for %@" = "此二維碼已包含 %@ 的付款請求"; +/* CrowdNode */ +"This represents the current Annual Percentage Yield of a full Masternode less the 15% CrowdNode fee. It is not a guaranteed rate of return and may go up or down based on the size of the CrowdNode pools and the Dash price." = "這代表完整主節點的當前年度百分比收益率減去 15% 的 CrowdNode 費用。這不是保證回報率,可能會根據 CrowdNode 資金池的大小和達世幣價格而上升或下降。"; + +/* Voting */ +"This username has already been requested, but you can request it too and let the network vote to decide if you can have it" = "This username has already been requested, but you can request it too and let the network vote to decide if you can have it"; + /* No comment provided by engineer. */ "This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "此錢包不是空的或同步尚未完成,如果沒有恢復詞組請不要進行擦除"; @@ -1602,15 +2166,30 @@ /* Coinbase */ "to Dash Wallet on this device" = "到此設備上的 達世幣錢包"; +/* Usernames */ +"To request a username on the Dash Network, you need to have more than %@ Dash" = "To request a username on the Dash Network, you need to have more than %@ Dash"; + +/* CrowdNode */ +"To start staking, create an account on CrowdNode or connect to an existing one." = "要開始質押,請在 CrowdNode 上創建一個帳戶或連接到現有帳戶。"; + +/* CrowdNode */ +"to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "到此設備上達世幣錢包中為您的 CrowdNode 帳戶指定的達世幣位址"; + /* No comment provided by engineer. */ "Tools" = "工具"; +/* Dash Portal */ +"Topper" = "Topper"; + /* No comment provided by engineer. */ "Total" = "總額"; /* No comment provided by engineer. */ "Touch ID limit" = "指紋辨識解鎖的限制"; +/* CrowdNode */ +"Transaction History" = "交易記錄"; + /* No comment provided by engineer. */ "Transaction id" = "交易ID"; @@ -1622,9 +2201,6 @@ Dash Service Overview */ "Transfer Dash" = "轉賬達世幣"; -/* No comment provided by engineer. */ -"Transfer Dash from your Uphold account to this wallet" = "將達世幣從您的Uphold帳戶轉移到此錢包"; - /* CrowdNode */ "Transfer Error" = "轉賬發生錯誤"; @@ -1646,18 +2222,48 @@ /* An action */ "Try again" = "再試一次"; +/* No comment provided by engineer. */ +"Try Again" = "Try Again"; + /* Alert title */ "Turn device passcode on" = "在設備上開啟驗證碼"; +/* Coinbase */ +"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; + /* Coinbase */ "Two factor auth required" = "需要雙重身份驗證"; +/* Voting */ +"Type" = "Type"; + +/* No comment provided by engineer. */ +"Unable to accept contact request" = "Unable to accept contact request"; + /* No comment provided by engineer. */ "Unable to connect" = "無法連接"; +/* No comment provided by engineer. */ +"Unable to fetch contact details" = "Unable to fetch contact details"; + +/* No comment provided by engineer. */ +"Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; + +/* No comment provided by engineer. */ +"Unable to fetch your Gravatar. Please enter a valid gravatar email ID." = "Unable to fetch your Gravatar. Please enter a valid gravatar email ID."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "無法獲取新的二維碼"; +/* No comment provided by engineer. */ +"Unable to provide suggestions" = "Unable to provide suggestions"; + +/* No comment provided by engineer. */ +"Unable to send contact request" = "Unable to send contact request"; + +/* No comment provided by engineer. */ +"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; + /* No comment provided by engineer. */ "Unknown" = "未知的"; @@ -1670,6 +2276,9 @@ /* No comment provided by engineer. */ "Unsupported URL" = "不支援的URL"; +/* CoinJoin */ +"up to 30 minutes" = "up to 30 minutes"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "更新: %@"; @@ -1677,7 +2286,13 @@ "Updating Price" = "正在更新價格"; /* No comment provided by engineer. */ -"Upgrade Fee" = "升級費用"; +"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; + +/* No comment provided by engineer. */ +"Upgrade" = "Upgrade"; + +/* No comment provided by engineer. */ +"Upgrade to Evolution" = "Upgrade to Evolution"; /* No comment provided by engineer. */ "Upgrading to DashPay" = "升級到 DashPay"; @@ -1685,6 +2300,18 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Upload Error" = "Upload Error"; + +/* No comment provided by engineer. */ +"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; + +/* Usernames */ +"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; + +/* No comment provided by engineer. */ +"Uploading your picture to the network" = "Uploading your picture to the network"; + /* Explore Dash/Filters */ "Use gift card" = "使用禮品卡"; @@ -1694,14 +2321,32 @@ /* No comment provided by engineer. */ "Used at: " = "用於: "; +/* No comment provided by engineer. */ +"User (Fetching Info)" = "User (Fetching Info)"; + +/* Voting */ +"Username" = "Username"; + +/* No comment provided by engineer. */ +"Username already found" = "Username already found"; + +/* No comment provided by engineer. */ +"Username available" = "Username available"; + /* No comment provided by engineer. */ "Username taken" = "用戶名已被使用"; -/* CrowdNode Portal */ -"Validating address…" = "正在核實位址..."; +/* Voting */ +"Username voting" = "Username voting"; + +/* Usernames */ +"Username was successfully requested" = "Username was successfully requested"; /* No comment provided by engineer. */ -"Validating username done" = "驗證用戶名已完成"; +"Users that matches %@ who are currently not in your contacts" = "Users that matches %@ who are currently not in your contacts"; + +/* CrowdNode Portal */ +"Validating address…" = "正在核實位址..."; /* No comment provided by engineer. */ "Validating username failed" = "驗證用戶名失敗"; @@ -1718,9 +2363,21 @@ /* No comment provided by engineer. */ "Verify" = "檢查"; +/* CrowdNode */ +"Verify your API Dash address" = "驗證您的 API 達世幣位址"; + +/* Usernames */ +"Verify your identity" = "Verify your identity"; + +/* Usernames */ +"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; + /* adjective, security level */ "Very High" = "非常高"; +/* CrowdNode */ +"Very small amounts of Dash will be sent to and from CrowdNode to verify that you are the owner of this wallet address." = "將會向 CrowdNode 發送非常少量的達世幣,以驗證您是該錢包位址的所有者。"; + /* No comment provided by engineer. */ "View All" = "查看全部"; @@ -1736,12 +2393,36 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看恢復詞組"; +/* Voting */ +"Vote for All" = "Vote for All"; + +/* Voting */ +"Vote only on duplicates" = "Vote only on duplicates"; + +/* Voting */ +"Vote to Approve" = "Vote to Approve"; + +/* Voting */ +"Votes:" = "Votes:"; + +/* Voting */ +"Votes: High to low" = "Votes: High to low"; + +/* Voting */ +"Votes: Low to high" = "Votes: Low to high"; + /* No comment provided by engineer. */ "Voting Address" = "投票位址"; /* No comment provided by engineer. */ "Voting Keys" = "投票公鑰"; +/* Usernames */ +"Voting will not be required forever" = "Voting will not be required forever"; + +/* Voting */ +"Voting:" = "Voting:"; + /* No comment provided by engineer. */ "Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up." = "等到區塊鏈完全同步後,我們才能查看您的交易歷史。訪問 CrowdNode 網站登錄或註冊。"; @@ -1778,12 +2459,24 @@ /* No comment provided by engineer. */ "We Upgraded" = "我們升級了"; +/* CrowdNode */ +"We will automatically detect this transaction and transfer the same amount to your CrowdNode account. After that you will be able to make deposits and withdrawals in Dash Wallet on this device." = "我們將自動檢測此交易並將相同的金額轉移到您的 CrowdNode 帳戶。之後,您將能夠在此設備上的達世幣錢包中進行存款和提款。"; + /* Website */ "Website" = "網站"; /* No comment provided by engineer. */ "Welcome" = "歡迎"; +/* Usernames */ +"Welcome to Dash Pay" = "Welcome to Dash Pay"; + +/* No comment provided by engineer. */ +"Welcome to DashPay" = "Welcome to DashPay"; + +/* Usernames */ +"What is username voting?" = "What is username voting?"; + /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "當交易確認後,另一個錢包的結餘將會消失,並且出於安全原因不應重複使用該錢包。"; @@ -1796,6 +2489,9 @@ /* Crowdnode */ "Why do I see all these transactions?" = "為什麼我會看到所有這些交易?"; +/* CrowdNode */ +"Why do you need an online account?" = "為什麼需要在線帳戶?"; + /* No comment provided by engineer. */ "Why I should not take a screenshot?" = "為什麼我不應該截圖?"; @@ -1821,6 +2517,15 @@ /* CrowdNode */ "Withdrawal requested" = "提款請求"; +/* No comment provided by engineer. */ +"Would you like to accept the invitation?" = "Would you like to accept the invitation?"; + +/* Coinbase */ +"Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; + +/* No comment provided by engineer. */ +"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; + /* No comment provided by engineer. */ "Yes" = "是的"; @@ -1833,27 +2538,69 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "您將要從此設備上清除此錢包。 僅當您有恢復詞組時,才能取回與此錢包相關的資金。"; +/* No comment provided by engineer. */ +"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; + /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "您可以使用Face ID進行以下付款的驗證"; /* No comment provided by engineer. */ "You can authenticate with Touch ID for payments below" = "您可以使用Touch ID進行以下付款的驗證"; +/* CrowdNode */ +"You can change how / when your reward earnings are paid to you." = "您可以更改向您支付獎勵收入的方式/時間。"; + +/* Voting */ +"You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; + +/* Voting */ +"You can review all requests but you only need to vote on duplicates" = "You can review all requests but you only need to vote on duplicates"; + +/* CrowdNode */ +"You can see detailed information about your deposits, withdrawals and reward earnings." = "您可以查看有關您的存款、提款和獎勵收入的詳細信息。"; + +/* No comment provided by engineer. */ +"You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; + +/* No comment provided by engineer. */ +"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; + +/* No comment provided by engineer. */ +"You do not have any contacts at the moment" = "You do not have any contacts at the moment"; + +/* Coinbase */ +"You don’t have enough balance" = "你沒有足夠的餘額"; + /* Coinbase */ "You exceeded the authorization limit on Coinbase." = "你超出了 Coinbase 的授權限制。"; /* No comment provided by engineer. */ -"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = "你已經選擇 \"%@\" 作為您的用戶名。 註冊後您便無法更改您的用戶名了。"; +"You have been invited by %@. Start using Dash cryptocurrency." = "You have been invited by %@. Start using Dash cryptocurrency."; + +/* No comment provided by engineer. */ +"You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; + +/* Voting */ +"You have entered an invalid key" = "You have entered an invalid key"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "您沒有足夠的資金來繼續進行"; +/* CrowdNode */ +"You have to backup your passphrase in Dash Wallet" = "您必須在達世幣錢包中備份您的恢復詞組"; + /* No comment provided by engineer. */ "You must enter your PIN in order to enter Dash Wallet" = "您必須輸入密碼才能進入達世幣錢包"; +/* No comment provided by engineer. */ +"You need at least %@ Dash to create an invitation" = "You need at least %@ Dash to create an invitation"; + /* CrowdNode */ "You need at least %@ on your Dash Wallet" = "您的達世幣錢包中至少需要 %@ 的 Dash"; +/* CrowdNode */ +"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; + /* CrowdNode */ "You only need %@ to join the pool." = "您至少需要 %@ 的金額來參與資金池。"; @@ -1872,6 +2619,9 @@ /* No comment provided by engineer. */ "You should have at least %@ to proceed with the CrowdNode verification." = "您應該至少有 %@ 才能繼續進行 CrowdNode 的驗證。"; +/* Usernames */ +"You should have more than %@ Dash to create a username" = "You should have more than %@ Dash to create a username"; + /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "您還需要從瀏覽器中登出Uphold網站"; @@ -1881,9 +2631,15 @@ /* Back up wallet */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "如果此設備丟失、損壞或從該設備上卸載達世幣錢包,您將需要此恢復詞組來找回您的資金。"; +/* Coinbase */ +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; + /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "您將在此設備上的 達世幣錢包中收到 %@ Dash 。請注意,完成交易最多可能需要 2-3 分鐘。"; +/* CrowdNode */ +"You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "您將自動收到小額付款,預設情況下它們將被再投資,但是,設置自動提款以接收定期付款也很容易。"; + /* CrowdNode */ "Your CrowdNode account is creating…" = "正在創建您的 CrowdNode 帳戶…"; @@ -1905,17 +2661,29 @@ /* CrowdNode */ "Your deposit to CrowdNode is received." = "您對 CrowdNode 的存款已收到了。"; +/* No comment provided by engineer. */ +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; + +/* No comment provided by engineer. */ +"Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; + +/* No comment provided by engineer. */ +"Your invitation from %@ is not valid" = "Your invitation from %@ is not valid"; + /* No comment provided by engineer. */ "Your location is used to show your position on the map, ATMs in the selected redius and improve search results." = "您的位置用於顯示您在地圖上的位置、所選範圍內中的 ATM 並改進搜索結果。"; /* No comment provided by engineer. */ "Your location is used to show your position on the map, merchants in the selected redius and improve search results." = "您的位置用於顯示您在地圖上的位置、所選區域中的商家以及改進搜索結果。"; -/* No comment provided by engineer. */ -"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已發送,金額應在幾分鐘內顯示在您的錢包中。"; +/* CrowdNode */ +"Your primary Dash address that you currently use for your CrowdNode account" = "您當前用於 CrowdNode 帳戶的主要達世幣位址"; + +/* Usernames */ +"Your request was cancelled" = "Your request was cancelled"; /* No comment provided by engineer. */ -"Your Uphold account Dash balance is" = "您的Uphold帳戶中的達世幣結餘是"; +"Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已發送,金額應在幾分鐘內顯示在您的錢包中。"; /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "您的用戶名 %@ 已在達世幣網絡上成功創建"; @@ -1923,5 +2691,11 @@ /* No comment provided by engineer. */ "Your username %@ is being created on the Dash Network" = "您的用戶名 %@ 已經在達世幣綱絡中創建了"; +/* No comment provided by engineer. */ +"Your vote was cancelled" = "Your vote was cancelled"; + +/* Voting */ +"Your vote was submitted" = "Your vote was submitted"; + /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "您的錢包現在已經安全了。 您可以隨時使用恢復詞組在另一台設備上恢復帳戶。"; diff --git a/Podfile b/Podfile index ccd2d3706..05e98ee9c 100644 --- a/Podfile +++ b/Podfile @@ -21,6 +21,31 @@ target 'dashwallet' do # Debugging purposes # pod 'Reveal-SDK', :configurations => ['Debug'] +end + +target 'dashpay' do + platform :ios, '14.0' + + pod 'DashSync', :path => '../DashSync/' + pod 'SQLite.swift', '~> 0.13.3' + pod 'SQLiteMigrationManager.swift' + pod 'CloudInAppMessaging', '0.1.0' + pod 'FirebaseStorage', '8.15.0' + pod 'Firebase/DynamicLinks' + pod 'SSZipArchive' + pod 'KVO-MVVM', '0.5.6' + pod 'UIViewController-KeyboardAdditions', '1.2.1' + pod 'MBProgressHUD', '1.1.0' + pod 'MMSegmentSlider', :git => 'https://github.com/podkovyrin/MMSegmentSlider', :commit => '2d91366' + pod 'CocoaImageHashing', :git => 'https://github.com/ameingast/cocoaimagehashing.git', :commit => 'ad01eee' + pod 'SDWebImage', '5.13.2' + pod 'Moya', '~> 15.0' + pod 'SwiftJWT', '3.6.200' + pod 'TOCropViewController', '2.6.1' + + # Debugging purposes + # pod 'Reveal-SDK', :configurations => ['Debug'] + target 'DashWalletTests' do inherit! :search_paths end @@ -31,6 +56,7 @@ target 'dashwallet' do end + target 'TodayExtension' do platform :ios, '13.0' diff --git a/Podfile.lock b/Podfile.lock index 528278415..2c1f9f959 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -565,7 +565,7 @@ PODS: - abseil/base/base_internal - abseil/base/config - abseil/meta/type_traits - - Alamofire (5.8.0) + - Alamofire (5.8.1) - BlueCryptor (1.0.32) - BlueECC (1.2.5) - BlueRSA (1.0.200) @@ -591,11 +591,11 @@ PODS: - "!ProtoCompiler-gRPCPlugin (~> 1.0)" - DAPI-GRPC/Messages - gRPC-ProtoRPC - - DashSharedCore (0.4.11) + - DashSharedCore (0.4.16) - DashSync (0.1.0): - CocoaLumberjack (= 3.7.2) - DAPI-GRPC (= 0.22.0-dev.8) - - DashSharedCore (= 0.4.11) + - DashSharedCore (= 0.4.16) - DSDynamicOptions (= 0.1.2) - DWAlertController (= 0.2.1) - TinyCborObjc (= 0.4.6) @@ -620,13 +620,13 @@ PODS: - FirebaseStorage (8.15.0): - FirebaseCore (~> 8.0) - GTMSessionFetcher/Core (~> 1.5) - - GoogleDataTransport (9.2.5): + - GoogleDataTransport (9.3.0): - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Environment (7.11.5): + - GoogleUtilities/Environment (7.12.0): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.11.5): + - GoogleUtilities/Logger (7.12.0): - GoogleUtilities/Environment - gRPC-Core (1.49.0): - gRPC-Core/Implementation (= 1.49.0) @@ -707,7 +707,7 @@ PODS: - nanopb/decode (2.30908.0) - nanopb/encode (2.30908.0) - PromisesObjC (2.3.1) - - Protobuf (3.24.3) + - Protobuf (3.25.1) - SDWebImage (5.13.2): - SDWebImage/Core (= 5.13.2) - SDWebImage/Core (5.13.2) @@ -728,6 +728,7 @@ PODS: - tinycbor (0.5.4-alpha1) - TinyCborObjc (0.4.6): - tinycbor (= 0.5.4-alpha1) + - TOCropViewController (2.6.1) - UIViewController-KeyboardAdditions (1.2.1) DEPENDENCIES: @@ -746,6 +747,7 @@ DEPENDENCIES: - SQLiteMigrationManager.swift - SSZipArchive - SwiftJWT (= 3.6.200) + - TOCropViewController (= 2.6.1) - UIViewController-KeyboardAdditions (= 1.2.1) SPEC REPOS: @@ -792,6 +794,7 @@ SPEC REPOS: - SwiftJWT - tinycbor - TinyCborObjc + - TOCropViewController - UIViewController-KeyboardAdditions EXTERNAL SOURCES: @@ -816,7 +819,7 @@ SPEC CHECKSUMS: "!ProtoCompiler": e9c09244955a8565817aa59a4787b6bb849a63c6 "!ProtoCompiler-gRPCPlugin": 755f0ee414a0d5f0028e0dcfe98c23bdbc3e6fa3 abseil: 926fb7a82dc6d2b8e1f2ed7f3a718bce691d1e46 - Alamofire: 0e92e751b3e9e66d7982db43919d01f313b8eb91 + Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 BlueCryptor: b0aee3d9b8f367b49b30de11cda90e1735571c24 BlueECC: 0d18e93347d3ec6d41416de21c1ffa4d4cd3c2cc BlueRSA: dfeef51db96bcc4edec654956c1581adbda4e6a3 @@ -825,8 +828,8 @@ SPEC CHECKSUMS: CocoaImageHashing: 8656031d0899abe6c1c415827de43e9798189c53 CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da DAPI-GRPC: 138d62523bbfe7e88a39896f1053c0bc12390d9f - DashSharedCore: d4dc11749f3555702dbe10c563087e6b48399394 - DashSync: 2d80784e399b869aede6d5bd476a149733451651 + DashSharedCore: 81d3327cbea4103114b768eed4d36e742417b63b + DashSync: 5c4dea6e4ef83df33f23f85b7f2b97ef6843de87 DSDynamicOptions: 347cc5d2c4e080eb3de6a86719ad3d861b82adfc DWAlertController: 5f4cd8adf90336331c054857f709f5f8d4b16a5b Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d @@ -834,8 +837,8 @@ SPEC CHECKSUMS: FirebaseCoreDiagnostics: 92e07a649aeb66352b319d43bdd2ee3942af84cb FirebaseDynamicLinks: 1dc816ef789c5adac6fede0b46d11478175c70e4 FirebaseStorage: 8019af461599b2c3bc61c6a5dbdfa3d2de66a4d9 - GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 - GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 + GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe + GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 gRPC: 64f36d689b2ecd99c4351f74e6f91347cdc65d9f gRPC-Core: 3a9fdb5967d42211e875826f3f6fc163ea02c2a1 gRPC-ProtoRPC: 1c223e0f1732bb8d0b9e9e0ea60cc0fe995b8e2d @@ -850,7 +853,7 @@ SPEC CHECKSUMS: Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 - Protobuf: 970f7ee93a3a08e3cf64859b8efd95ee32b4f87f + Protobuf: d94761c33f1239c0a43a0817ca1a5f7f7c900241 SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 SQLite.swift: 903bfa3bc9ab06345fdfbb578e34f47cfcf417da SQLiteMigrationManager.swift: 5383578f5bc8955c06695e8bf04835ee0e6673a8 @@ -858,8 +861,9 @@ SPEC CHECKSUMS: SwiftJWT: 88c412708f58c169d431d344c87bc79a87c830ae tinycbor: d4d71dddda1f8392fbb4249f63faf8552f327590 TinyCborObjc: 5204540fb90ff0c40fb22d408fa51bab79d78a80 + TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 UIViewController-KeyboardAdditions: a691dc7e63a49854d341455a778ee8497dfc4662 -PODFILE CHECKSUM: 86f7c1859012e78be2771e55412e950bdacfc209 +PODFILE CHECKSUM: 8dff55782a9c478127464baadc00c6fc85af48ba -COCOAPODS: 1.12.1 +COCOAPODS: 1.14.3 diff --git a/Shared/Sources/UIImage+Utils.m b/Shared/Sources/UIImage+Utils.m index 6ef9853ac..918c9665d 100644 --- a/Shared/Sources/UIImage+Utils.m +++ b/Shared/Sources/UIImage+Utils.m @@ -38,7 +38,7 @@ + (instancetype)dw_imageWithQRCodeData:(NSData *)data color:(CIColor *)color { *filter = colorFilter; [qrFilter setValue:data forKey:@"inputMessage"]; - [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"]; + [qrFilter setValue:@"Q" forKey:@"inputCorrectionLevel"]; if (color.alpha > DBL_EPSILON) { [invertFilter setValue:qrFilter.outputImage forKey:@"inputImage"]; diff --git a/WatchApp/ar.lproj/Interface.strings b/WatchApp/ar.lproj/Interface.strings index 2f3fb50d8..6331c84ee 100644 Binary files a/WatchApp/ar.lproj/Interface.strings and b/WatchApp/ar.lproj/Interface.strings differ diff --git a/WatchApp/bg.lproj/Interface.strings b/WatchApp/bg.lproj/Interface.strings index d0761f717..dc5a5dddd 100644 Binary files a/WatchApp/bg.lproj/Interface.strings and b/WatchApp/bg.lproj/Interface.strings differ diff --git a/WatchApp/ca.lproj/Interface.strings b/WatchApp/ca.lproj/Interface.strings index 396762c2c..2a252a0f2 100644 Binary files a/WatchApp/ca.lproj/Interface.strings and b/WatchApp/ca.lproj/Interface.strings differ diff --git a/WatchApp/cs.lproj/Interface.strings b/WatchApp/cs.lproj/Interface.strings index 8944eae02..af266247e 100644 Binary files a/WatchApp/cs.lproj/Interface.strings and b/WatchApp/cs.lproj/Interface.strings differ diff --git a/WatchApp/da.lproj/Interface.strings b/WatchApp/da.lproj/Interface.strings index dbd89cdab..43f1c1e5a 100644 Binary files a/WatchApp/da.lproj/Interface.strings and b/WatchApp/da.lproj/Interface.strings differ diff --git a/WatchApp/de.lproj/Interface.strings b/WatchApp/de.lproj/Interface.strings index 1e3b95661..36dc59730 100644 Binary files a/WatchApp/de.lproj/Interface.strings and b/WatchApp/de.lproj/Interface.strings differ diff --git a/WatchApp/el.lproj/Interface.strings b/WatchApp/el.lproj/Interface.strings index 086e13856..51a79a315 100644 Binary files a/WatchApp/el.lproj/Interface.strings and b/WatchApp/el.lproj/Interface.strings differ diff --git a/WatchApp/eo.lproj/Interface.strings b/WatchApp/eo.lproj/Interface.strings index 24069225f..42d5d6b9e 100644 Binary files a/WatchApp/eo.lproj/Interface.strings and b/WatchApp/eo.lproj/Interface.strings differ diff --git a/WatchApp/es.lproj/Interface.strings b/WatchApp/es.lproj/Interface.strings index 8c2ae1ec5..cbe5fe3f9 100644 Binary files a/WatchApp/es.lproj/Interface.strings and b/WatchApp/es.lproj/Interface.strings differ diff --git a/WatchApp/et.lproj/Interface.strings b/WatchApp/et.lproj/Interface.strings index 0d67ef5d1..5b5b4ec5e 100644 Binary files a/WatchApp/et.lproj/Interface.strings and b/WatchApp/et.lproj/Interface.strings differ diff --git a/WatchApp/fa.lproj/Interface.strings b/WatchApp/fa.lproj/Interface.strings index c632aeec2..7f97bbc1e 100644 Binary files a/WatchApp/fa.lproj/Interface.strings and b/WatchApp/fa.lproj/Interface.strings differ diff --git a/WatchApp/fi.lproj/Interface.strings b/WatchApp/fi.lproj/Interface.strings index 8e43fade9..c7842f970 100644 Binary files a/WatchApp/fi.lproj/Interface.strings and b/WatchApp/fi.lproj/Interface.strings differ diff --git a/WatchApp/fil.lproj/Interface.strings b/WatchApp/fil.lproj/Interface.strings index b10ed5623..53e46662f 100644 Binary files a/WatchApp/fil.lproj/Interface.strings and b/WatchApp/fil.lproj/Interface.strings differ diff --git a/WatchApp/fr.lproj/Interface.strings b/WatchApp/fr.lproj/Interface.strings index 71e67ad82..4192902e2 100644 Binary files a/WatchApp/fr.lproj/Interface.strings and b/WatchApp/fr.lproj/Interface.strings differ diff --git a/WatchApp/hr.lproj/Interface.strings b/WatchApp/hr.lproj/Interface.strings index ec9b5322f..d5d1cf141 100644 Binary files a/WatchApp/hr.lproj/Interface.strings and b/WatchApp/hr.lproj/Interface.strings differ diff --git a/WatchApp/hu.lproj/Interface.strings b/WatchApp/hu.lproj/Interface.strings index e7fe46d0c..d725c90eb 100644 Binary files a/WatchApp/hu.lproj/Interface.strings and b/WatchApp/hu.lproj/Interface.strings differ diff --git a/WatchApp/id.lproj/Interface.strings b/WatchApp/id.lproj/Interface.strings index 7e2554f92..b2dc901c5 100644 Binary files a/WatchApp/id.lproj/Interface.strings and b/WatchApp/id.lproj/Interface.strings differ diff --git a/WatchApp/it.lproj/Interface.strings b/WatchApp/it.lproj/Interface.strings index c321cea36..50964bb81 100644 Binary files a/WatchApp/it.lproj/Interface.strings and b/WatchApp/it.lproj/Interface.strings differ diff --git a/WatchApp/ja.lproj/Interface.strings b/WatchApp/ja.lproj/Interface.strings index aa2ef9f13..a54eb79df 100644 Binary files a/WatchApp/ja.lproj/Interface.strings and b/WatchApp/ja.lproj/Interface.strings differ diff --git a/WatchApp/ko.lproj/Interface.strings b/WatchApp/ko.lproj/Interface.strings index 8f4ee649f..8001d208c 100644 Binary files a/WatchApp/ko.lproj/Interface.strings and b/WatchApp/ko.lproj/Interface.strings differ diff --git a/WatchApp/mk.lproj/Interface.strings b/WatchApp/mk.lproj/Interface.strings index 0cee06313..56d89dac3 100644 Binary files a/WatchApp/mk.lproj/Interface.strings and b/WatchApp/mk.lproj/Interface.strings differ diff --git a/WatchApp/ms.lproj/Interface.strings b/WatchApp/ms.lproj/Interface.strings index 8ad2f0e0b..19910eff1 100644 Binary files a/WatchApp/ms.lproj/Interface.strings and b/WatchApp/ms.lproj/Interface.strings differ diff --git a/WatchApp/nb.lproj/Interface.strings b/WatchApp/nb.lproj/Interface.strings index e61c92375..133a25c12 100644 Binary files a/WatchApp/nb.lproj/Interface.strings and b/WatchApp/nb.lproj/Interface.strings differ diff --git a/WatchApp/nl.lproj/Interface.strings b/WatchApp/nl.lproj/Interface.strings index e3c4b6da7..03a02538f 100644 Binary files a/WatchApp/nl.lproj/Interface.strings and b/WatchApp/nl.lproj/Interface.strings differ diff --git a/WatchApp/pl.lproj/Interface.strings b/WatchApp/pl.lproj/Interface.strings index 1c7642b86..91a7cc062 100644 Binary files a/WatchApp/pl.lproj/Interface.strings and b/WatchApp/pl.lproj/Interface.strings differ diff --git a/WatchApp/pt.lproj/Interface.strings b/WatchApp/pt.lproj/Interface.strings index 991884c92..cf0ddf779 100644 Binary files a/WatchApp/pt.lproj/Interface.strings and b/WatchApp/pt.lproj/Interface.strings differ diff --git a/WatchApp/ro.lproj/Interface.strings b/WatchApp/ro.lproj/Interface.strings index b0d7d20a7..489dae4e7 100644 Binary files a/WatchApp/ro.lproj/Interface.strings and b/WatchApp/ro.lproj/Interface.strings differ diff --git a/WatchApp/ru.lproj/Interface.strings b/WatchApp/ru.lproj/Interface.strings index 9d6aaee1d..174c261de 100644 Binary files a/WatchApp/ru.lproj/Interface.strings and b/WatchApp/ru.lproj/Interface.strings differ diff --git a/WatchApp/sk.lproj/Interface.strings b/WatchApp/sk.lproj/Interface.strings index 01e662bd7..7b9ddcf0c 100644 Binary files a/WatchApp/sk.lproj/Interface.strings and b/WatchApp/sk.lproj/Interface.strings differ diff --git a/WatchApp/sl.lproj/Interface.strings b/WatchApp/sl.lproj/Interface.strings index 8e67077f4..cde01494d 100644 Binary files a/WatchApp/sl.lproj/Interface.strings and b/WatchApp/sl.lproj/Interface.strings differ diff --git a/WatchApp/sl_SI.lproj/Interface.strings b/WatchApp/sl_SI.lproj/Interface.strings index 8ad2f0e0b..19910eff1 100644 Binary files a/WatchApp/sl_SI.lproj/Interface.strings and b/WatchApp/sl_SI.lproj/Interface.strings differ diff --git a/WatchApp/sq.lproj/Interface.strings b/WatchApp/sq.lproj/Interface.strings index fc5a1dfed..b0c2a307f 100644 Binary files a/WatchApp/sq.lproj/Interface.strings and b/WatchApp/sq.lproj/Interface.strings differ diff --git a/WatchApp/sr.lproj/Interface.strings b/WatchApp/sr.lproj/Interface.strings index c6b12e14c..b67546ace 100644 Binary files a/WatchApp/sr.lproj/Interface.strings and b/WatchApp/sr.lproj/Interface.strings differ diff --git a/WatchApp/sv.lproj/Interface.strings b/WatchApp/sv.lproj/Interface.strings index da5824b7b..e511dbfcc 100644 Binary files a/WatchApp/sv.lproj/Interface.strings and b/WatchApp/sv.lproj/Interface.strings differ diff --git a/WatchApp/th.lproj/Interface.strings b/WatchApp/th.lproj/Interface.strings index 80f6fe76e..cd8abbf05 100644 Binary files a/WatchApp/th.lproj/Interface.strings and b/WatchApp/th.lproj/Interface.strings differ diff --git a/WatchApp/tr.lproj/Interface.strings b/WatchApp/tr.lproj/Interface.strings index 1687f5073..82dbd910e 100644 Binary files a/WatchApp/tr.lproj/Interface.strings and b/WatchApp/tr.lproj/Interface.strings differ diff --git a/WatchApp/uk.lproj/Interface.strings b/WatchApp/uk.lproj/Interface.strings index ebf3f984a..e9df6f6a6 100644 Binary files a/WatchApp/uk.lproj/Interface.strings and b/WatchApp/uk.lproj/Interface.strings differ diff --git a/WatchApp/vi.lproj/Interface.strings b/WatchApp/vi.lproj/Interface.strings index 7fdc04908..0d7f09fd4 100644 Binary files a/WatchApp/vi.lproj/Interface.strings and b/WatchApp/vi.lproj/Interface.strings differ diff --git a/WatchApp/zh.lproj/Interface.strings b/WatchApp/zh.lproj/Interface.strings index 7ff0e61a2..476cfe800 100644 Binary files a/WatchApp/zh.lproj/Interface.strings and b/WatchApp/zh.lproj/Interface.strings differ diff --git a/WatchApp/zh_TW.lproj/Interface.strings b/WatchApp/zh_TW.lproj/Interface.strings index 4538e98b9..a46a9fcbf 100644 Binary files a/WatchApp/zh_TW.lproj/Interface.strings and b/WatchApp/zh_TW.lproj/Interface.strings differ