diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index aa037a310..b6a8ba6a9 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -259,7 +259,6 @@ 2A8C24B92333A85E00000D43 /* DWModalNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8C24B82333A85E00000D43 /* DWModalNavigationController.m */; }; 2A8DBA702630A609009094BD /* DWExtendedPublicKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBA6F2630A609009094BD /* DWExtendedPublicKeysViewController.m */; }; 2A8DBA7A2630A6D6009094BD /* DWExtendedPublicKeysModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBA792630A6D6009094BD /* DWExtendedPublicKeysModel.m */; }; - 2A8DBAAF2630CC2D009094BD /* DWDerivationPathKeysItemObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */; }; 2A8F420921BED16300858B91 /* DashSyncCurrentCommit in Resources */ = {isa = PBXBuildFile; fileRef = 2A8F420821BED16300858B91 /* DashSyncCurrentCommit */; }; 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F420E21BEE95D00858B91 /* DWAboutViewController.m */; }; 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F421F21BEFEEA00858B91 /* DWAboutModel.m */; }; @@ -285,7 +284,6 @@ 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 */; }; 2A9CEBA822E1D5A200A50237 /* DWMainTabbarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBA722E1D5A200A50237 /* DWMainTabbarViewController.m */; }; 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */; }; 2A9CEBB522E1EAC900A50237 /* DWTabBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBB422E1EAC900A50237 /* DWTabBarView.m */; }; @@ -484,22 +482,51 @@ 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 */; }; EDB1F696FF79C137CE47192F /* libPods-WatchApp Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C47D5A9D319D41B450A9B96B /* libPods-WatchApp Extension.a */; }; + FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AD72378832100EF564B /* DWActionFormCellModel.m */; }; + FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */; }; + FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AE22379003D00EF564B /* DWSignPayloadModel.m */; }; + FB031AE7237911F200EF564B /* DWSignPayloadView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AE6237911F200EF564B /* DWSignPayloadView.m */; }; + FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; + FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; + FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; + FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */; }; 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 */; }; - FB3E9F60236125F600C09C5C /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */; }; + FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */; }; + FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */; }; + FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; - FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */; }; + FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */; }; FB43BC78211CD15500BC9879 /* DWActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = FB43BC77211CD15500BC9879 /* DWActionButton.m */; }; FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB4FA9C222505DD60060B017 /* AudioToolbox.framework */; }; + FB519F092441BBB200AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */; }; + FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */; }; + FB519F0D2441BD3700AF50E8 /* BRCopyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */; }; + FB519F0F2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */; }; + FB65F03D26882EE00022DF64 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */; }; + FB65F04426882F830022DF64 /* DWDerivationPathKeysItemObject.m in Sources */ = {isa = PBXBuildFile; fileRef = FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */; }; + FB65F045268837530022DF64 /* DWBaseContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */; }; FB66977F212C0B940034BE4F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */; }; + FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */; }; FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; + FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */; }; + FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */; }; + FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */; }; + FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */; }; + FBE7439A238167200084A95B /* DWLocalMasternodeControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */; }; FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEF3AF021823CD800917AB6 /* DWEnvironment.m */; }; FBF3F42B1E42AF8F00C7248E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42A1E42AF8F00C7248E /* QuartzCore.framework */; }; FBF3F42D1E42B00C00C7248E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; FBF3F42F1E42B01E00C7248E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42E1E42B01E00C7248E /* CoreGraphics.framework */; }; FBF3F4311E42B02800C7248E /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F4301E42B02800C7248E /* ImageIO.framework */; }; + FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */; }; + FBF4DA09237BA341005493A6 /* DWMasternodeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */; }; + FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */; }; + FBF4DA13237BCF0C005493A6 /* DWLocalMasternodeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */; }; + FBF4DA16237BCF68005493A6 /* DWLocalMasternodeListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */; }; + FBF4DA19237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */; }; FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC621137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC721137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; @@ -1086,8 +1113,6 @@ 2A8DBA6F2630A609009094BD /* DWExtendedPublicKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWExtendedPublicKeysViewController.m; sourceTree = ""; }; 2A8DBA782630A6D6009094BD /* DWExtendedPublicKeysModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWExtendedPublicKeysModel.h; sourceTree = ""; }; 2A8DBA792630A6D6009094BD /* DWExtendedPublicKeysModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWExtendedPublicKeysModel.m; sourceTree = ""; }; - 2A8DBAAD2630CC2D009094BD /* DWDerivationPathKeysItemObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysItemObject.h; sourceTree = ""; }; - 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDerivationPathKeysItemObject.m; sourceTree = ""; }; 2A8E79B9240676D400AA7C3D /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sk; path = sk.lproj/Localizable.stringsdict; sourceTree = ""; }; 2A8E79BA240676D400AA7C3D /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Interface.strings; sourceTree = ""; }; 2A8E79BB2406772900AA7C3D /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Interface.strings; sourceTree = ""; }; @@ -1343,7 +1368,6 @@ 2ACD53EA234BCFAA00650AD3 /* DWWeakContainer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWWeakContainer.m; sourceTree = ""; }; 2ACD53EC234C9D8E00650AD3 /* UIView+DWRecursiveSubview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+DWRecursiveSubview.h"; sourceTree = ""; }; 2ACD53ED234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWRecursiveSubview.m"; sourceTree = ""; }; - 2AD1CE5E22D8E9D900C99324 /* DWSeedPhraseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedPhraseView.m; sourceTree = ""; }; 2AD1CE6222D9127600C99324 /* DWSeedWordModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSeedWordModel.h; sourceTree = ""; }; 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedWordModel.m; sourceTree = ""; }; @@ -1426,6 +1450,10 @@ 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 = ""; }; + 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseMasternodeViewController.h; sourceTree = ""; }; + 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseMasternodeViewController.m; sourceTree = ""; }; + 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWResultsMasternodeViewController.h; sourceTree = ""; }; + 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWResultsMasternodeViewController.m; 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 = ""; }; @@ -1581,16 +1609,49 @@ 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 = ""; }; 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 = ""; }; + FB031AD72378832100EF564B /* DWActionFormCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWActionFormCellModel.m; sourceTree = ""; }; + FB031AD82378832100EF564B /* DWActionFormTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormTableViewCell.h; sourceTree = ""; }; + FB031AD92378832100EF564B /* DWActionFormCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormCellModel.h; sourceTree = ""; }; + FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWActionFormTableViewCell.m; sourceTree = ""; }; + FB031AE12379003D00EF564B /* DWSignPayloadModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadModel.h; sourceTree = ""; }; + FB031AE22379003D00EF564B /* DWSignPayloadModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadModel.m; sourceTree = ""; }; + FB031AE5237911F200EF564B /* DWSignPayloadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadView.h; sourceTree = ""; }; + FB031AE6237911F200EF564B /* DWSignPayloadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadView.m; sourceTree = ""; }; FB0ACB9E1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; FB0ACBA01F9ABB6200F4AB52 /* vi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; FB1212A91FFFB0F3000E407E /* dashwalletTodayExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = dashwalletTodayExtension.entitlements; path = DashWallet/dashwalletTodayExtension.entitlements; sourceTree = SOURCE_ROOT; }; + FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignMessageViewController.h; sourceTree = ""; }; + FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignMessageViewController.m; sourceTree = ""; }; + FB1C3DC3236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeFeaturesMenuViewController.h; sourceTree = ""; }; + FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeFeaturesMenuViewController.m; sourceTree = ""; }; FB248B5C1F73803100405AE0 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; FB248B621F79BB7C00405AE0 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; FB2E5535218BA161003A1B7C /* DWVersionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWVersionManager.h; sourceTree = ""; }; FB2E5536218BA161003A1B7C /* DWVersionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWVersionManager.m; sourceTree = ""; }; - FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BackgroundTasks.framework; path = System/Library/Frameworks/BackgroundTasks.framework; sourceTree = SDKROOT; }; - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; + FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRootViewController.h; sourceTree = ""; }; + FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRootViewController.m; sourceTree = ""; }; + FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWReclaimMasternodeViewController.m; sourceTree = ""; }; + FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeViewController.m; sourceTree = ""; }; + FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRegisterMasternodeViewController.h; sourceTree = ""; }; + FB31C240223BD3F100BD0868 /* DWProviderUpdateServiceTransactionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTransactionsViewController.h; sourceTree = ""; }; + FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeRegistrarViewController.h; sourceTree = ""; }; + FB31C242223BD3F100BD0868 /* DWReclaimMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWReclaimMasternodeViewController.h; sourceTree = ""; }; + FB31C243223BD3F200BD0868 /* DWUpdateMasternodeServiceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeServiceViewController.h; sourceTree = ""; }; + FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeRevocationViewController.h; sourceTree = ""; }; + FB31C245223BD3F200BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTransactionsViewController.h; sourceTree = ""; }; + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadViewController.m; sourceTree = ""; }; + FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRegisterMasternodeViewController.m; sourceTree = ""; }; + FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTransactionsViewController.m; sourceTree = ""; }; + FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeRevocationViewController.m; sourceTree = ""; }; + FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeServiceViewController.m; sourceTree = ""; }; + FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTransactionsViewController.m; sourceTree = ""; }; + FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeDetailViewController.m; sourceTree = ""; }; + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadViewController.h; sourceTree = ""; }; + FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeRegistrarViewController.m; sourceTree = ""; }; + FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeDetailViewController.h; sourceTree = ""; }; + FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeViewController.h; sourceTree = ""; }; + FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; + FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysViewController.h; sourceTree = ""; }; FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDerivationPathKeysViewController.m; sourceTree = ""; }; FB4310F01FA027DB00784EBC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Interface.strings; sourceTree = ""; }; @@ -1599,6 +1660,13 @@ FB43BC77211CD15500BC9879 /* DWActionButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWActionButton.m; sourceTree = ""; }; FB43BC8D21217BB900BC9879 /* zh-Hant-TW */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = ""; }; FB4FA9C222505DD60060B017 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + FB519F052441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTableViewCell.h; sourceTree = ""; }; + FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTableViewCell.m; sourceTree = ""; }; + FB519F072441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTableViewCell.h; sourceTree = ""; }; + FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTableViewCell.m; sourceTree = ""; }; + FB519F0B2441BD3700AF50E8 /* BRCopyLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRCopyLabel.h; sourceTree = ""; }; + FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRCopyLabel.m; sourceTree = ""; }; + FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; FB586CB4213D5EF600836ACC /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Interface.strings; sourceTree = ""; }; FB586CB6213D5F8200836ACC /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Interface.strings; sourceTree = ""; }; FB586CBA213D607500836ACC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Interface.strings"; sourceTree = ""; }; @@ -1615,10 +1683,26 @@ FB586CD0213D652400836ACC /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Interface.strings; sourceTree = ""; }; FB586CD2213D657000836ACC /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Interface.strings; sourceTree = ""; }; FB586CD4213D659F00836ACC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Interface.strings; sourceTree = ""; }; + FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; + FB65F03E26882F010022DF64 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; + FB65F04226882F820022DF64 /* DWDerivationPathKeysItemObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DWDerivationPathKeysItemObject.h; path = "DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItemObject.h"; sourceTree = SOURCE_ROOT; }; + FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DWDerivationPathKeysItemObject.m; path = "DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItemObject.m"; sourceTree = SOURCE_ROOT; }; FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; FB6DD3811F7FA48500BC1E4D /* dashwallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = dashwallet.entitlements; sourceTree = ""; }; + FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationTableViewCell.h; sourceTree = ""; }; + FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationTableViewCell.m; sourceTree = ""; }; FB8ACEB422E0502100EE5035 /* DWUpholdMainnetConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpholdMainnetConstants.h; sourceTree = ""; }; FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpholdMainnetConstants.m; sourceTree = ""; }; + FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRegistrationModel.h; sourceTree = ""; }; + FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRegistrationModel.m; sourceTree = ""; }; + FBCFEDF1236F8CF70086DE07 /* DWKeyValueFormCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeyValueFormCellModel.h; sourceTree = ""; }; + FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueFormCellModel.m; sourceTree = ""; }; + FBCFEDF4236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeyValueFormTableViewCell.h; sourceTree = ""; }; + FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueFormTableViewCell.m; sourceTree = ""; }; + FBCFEDF8236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationCellModel.h; sourceTree = ""; }; + FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationCellModel.m; sourceTree = ""; }; + FBE74398238167200084A95B /* DWLocalMasternodeControlViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeControlViewController.h; sourceTree = ""; }; + FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeControlViewController.m; sourceTree = ""; }; FBEF3AED2182395800917AB6 /* DashSync.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DashSync.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FBEF3AEF21823CD800917AB6 /* DWEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWEnvironment.h; sourceTree = ""; }; FBEF3AF021823CD800917AB6 /* DWEnvironment.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWEnvironment.m; sourceTree = ""; }; @@ -1626,6 +1710,18 @@ FBF3F42C1E42B00C00C7248E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; FBF3F42E1E42B01E00C7248E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; FBF3F4301E42B02800C7248E /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + FBF4DA04237B9DFA005493A6 /* DWMasternodeListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeListModel.h; sourceTree = ""; }; + FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeListModel.m; sourceTree = ""; }; + FBF4DA07237BA341005493A6 /* DWMasternodeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeListViewController.h; sourceTree = ""; }; + FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeListViewController.m; sourceTree = ""; }; + FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; + FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; + FBF4DA11237BCF0C005493A6 /* DWLocalMasternodeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeListViewController.h; sourceTree = ""; }; + FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeListViewController.m; sourceTree = ""; }; + FBF4DA14237BCF68005493A6 /* DWLocalMasternodeListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeListModel.h; sourceTree = ""; }; + FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeListModel.m; sourceTree = ""; }; + FBF4DA17237BF13F005493A6 /* DWLocalMasternodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeTableViewCell.h; sourceTree = ""; }; + FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeTableViewCell.m; sourceTree = ""; }; FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Regular.otf"; sourceTree = ""; }; FBFC2EA821137A7900D20C57 /* Montserrat-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Medium.otf"; sourceTree = ""; }; FBFC2EAC21137A7A00D20C57 /* Montserrat-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-SemiBold.otf"; sourceTree = ""; }; @@ -1645,7 +1741,7 @@ buildActionMask = 2147483647; files = ( 2A5279BC23D994BC00F856D3 /* CoreNFC.framework in Frameworks */, - FB3E9F60236125F600C09C5C /* BackgroundTasks.framework in Frameworks */, + FB3E9F60236125F600C09C5C /* (null) in Frameworks */, 2AD1CE9922DE63FB00C99324 /* GameplayKit.framework in Frameworks */, FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */, 2AA08534237D6CF500797F95 /* CloudKit.framework in Frameworks */, @@ -2066,6 +2162,8 @@ 2AD1CE6A22DA337700C99324 /* BaseController */, 2A44312B22CD0304009BAF7F /* SharedViews */, 2AD1CE6922D9E75400C99324 /* DevicesCompatibility.h */, + FB519F0B2441BD3700AF50E8 /* BRCopyLabel.h */, + FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */, 2A44311F22CCA2A0009BAF7F /* UIColor+DWStyle.h */, 2A44312022CCA2A0009BAF7F /* UIColor+DWStyle.m */, 2A44311522CBF0B2009BAF7F /* UIFont+DWFont.h */, @@ -2490,9 +2588,9 @@ 2A7A7BDA2348DBE700451078 /* Tools */ = { isa = PBXGroup; children = ( + FB1C3DC2236AD3C7004C2B05 /* Masternode */, 2A8DBA772630A6BE009094BD /* ExtendedKeys */, 2A10EB322358994400C38B61 /* ImportWallet */, - FB3FF0B0222641210059A9A5 /* Masternode Keys */, 2A7A7BDB2348DC0A00451078 /* DWToolsMenuModel.h */, 2A7A7BDC2348DC0A00451078 /* DWToolsMenuModel.m */, 2A7A7BDE2348DC1900451078 /* DWToolsMenuViewController.h */, @@ -3145,6 +3243,9 @@ 2A9FFE262230FF4600956D5F /* Forms */ = { isa = PBXGroup; children = ( + FB031AD62378832100EF564B /* Action */, + FBCFEDF7236FCDE50086DE07 /* PublicKeyGeneration */, + FBCFEDF0236F8C770086DE07 /* KeyValue */, 2A9FFE382230FF4600956D5F /* Placeholder */, 2A9FFE272230FF4600956D5F /* Selector */, 2A9FFE2F2230FF4600956D5F /* Switcher */, @@ -3417,8 +3518,8 @@ 2AB66E0723572379007BE825 /* Overview */ = { isa = PBXGroup; children = ( - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, + FB65F03E26882F010022DF64 /* DWKeysOverviewViewController.h */, + FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */, 2AB66E00235711FA007BE825 /* DWWalletKeysOverviewModel.h */, 2AB66E01235711FA007BE825 /* DWWalletKeysOverviewModel.m */, ); @@ -3428,10 +3529,10 @@ 2AB66E0823572389007BE825 /* DerivationPathKeys */ = { isa = PBXGroup; children = ( - 2AB66E0923572572007BE825 /* Models */, - 2AB66E03235722E0007BE825 /* Cells */, FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */, FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */, + 2AB66E0923572572007BE825 /* Models */, + 2AB66E03235722E0007BE825 /* Cells */, ); path = DerivationPathKeys; sourceTree = ""; @@ -3439,11 +3540,11 @@ 2AB66E0923572572007BE825 /* Models */ = { isa = PBXGroup; children = ( + FB65F04226882F820022DF64 /* DWDerivationPathKeysItemObject.h */, + FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */, 2AB66E0A23572587007BE825 /* DWDerivationPathKeysItem.h */, 2A392766235732E9004E9A96 /* DWDerivationPathKeysModel.h */, 2A392767235732E9004E9A96 /* DWDerivationPathKeysModel.m */, - 2A8DBAAD2630CC2D009094BD /* DWDerivationPathKeysItemObject.h */, - 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */, ); path = Models; sourceTree = ""; @@ -3567,7 +3668,7 @@ 2A4431E722D738C0009BAF7F /* DWSeedPhraseModel.h */, 2A4431E822D738C0009BAF7F /* DWSeedPhraseModel.m */, 2AD1CE6522D9161A00C99324 /* DWSeedPhraseType.h */, - 2AD1CE5E22D8E9D900C99324 /* DWSeedPhraseView.h */, + FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */, 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */, 2AD1CE6222D9127600C99324 /* DWSeedWordModel.h */, 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */, @@ -3916,6 +4017,7 @@ 75D5F3C0191EC270004AB296 /* Frameworks */, 75D5F3BF191EC270004AB296 /* Products */, EBFC2EA47915CD4F5BA81564 /* Pods */, + FB519F032441B7B600AF50E8 /* Recovered References */, ); sourceTree = ""; }; @@ -3938,7 +4040,6 @@ 2A5279BB23D994BC00F856D3 /* CoreNFC.framework */, 2AA08533237D6CF500797F95 /* CloudKit.framework */, 2A0C6C852362EFAE00C86F37 /* libDashSync-Shared.a */, - FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */, 2ABCA9172357A61B00092C09 /* Foundation.framework */, 2AD1CE9822DE63FA00C99324 /* GameplayKit.framework */, FB4FA9C222505DD60060B017 /* AudioToolbox.framework */, @@ -4126,15 +4227,231 @@ name = Pods; sourceTree = ""; }; + FB031AD62378832100EF564B /* Action */ = { + isa = PBXGroup; + children = ( + FB031AD92378832100EF564B /* DWActionFormCellModel.h */, + FB031AD72378832100EF564B /* DWActionFormCellModel.m */, + FB031AD82378832100EF564B /* DWActionFormTableViewCell.h */, + FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */, + ); + path = Action; + sourceTree = ""; + }; + FB031ADF2378FFAE00EF564B /* Payload Signing */ = { + isa = PBXGroup; + children = ( + FB031AE42379118E00EF564B /* Views */, + FB031AE02379000400EF564B /* Models */, + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, + ); + path = "Payload Signing"; + sourceTree = ""; + }; + FB031AE02379000400EF564B /* Models */ = { + isa = PBXGroup; + children = ( + FB031AE12379003D00EF564B /* DWSignPayloadModel.h */, + FB031AE22379003D00EF564B /* DWSignPayloadModel.m */, + ); + path = Models; + sourceTree = ""; + }; + FB031AE42379118E00EF564B /* Views */ = { + isa = PBXGroup; + children = ( + FB031AE5237911F200EF564B /* DWSignPayloadView.h */, + FB031AE6237911F200EF564B /* DWSignPayloadView.m */, + ); + path = Views; + sourceTree = ""; + }; + FB1C3DC1236AD2B1004C2B05 /* Masternode Control */ = { + isa = PBXGroup; + children = ( + FB519F042441BB4E00AF50E8 /* Cells */, + FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, + FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, + FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */, + FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */, + FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */, + FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */, + FB31C245223BD3F200BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.h */, + FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */, + FB31C240223BD3F100BD0868 /* DWProviderUpdateServiceTransactionsViewController.h */, + FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */, + FB31C242223BD3F100BD0868 /* DWReclaimMasternodeViewController.h */, + FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */, + FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */, + FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */, + FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */, + FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */, + FB31C243223BD3F200BD0868 /* DWUpdateMasternodeServiceViewController.h */, + FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */, + 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */, + 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */, + 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */, + 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */, + ); + path = "Masternode Control"; + sourceTree = ""; + }; + FB1C3DC2236AD3C7004C2B05 /* Masternode */ = { + isa = PBXGroup; + children = ( + FBF4DA0E237BCE98005493A6 /* Local Masternodes */, + FBF4DA02237B9D50005493A6 /* Masternode List */, + FB031ADF2378FFAE00EF564B /* Payload Signing */, + FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, + FBCFEDEA236E50410086DE07 /* Masternode Registration */, + FB3FF0B0222641210059A9A5 /* Masternode Keys */, + FB1C3DC1236AD2B1004C2B05 /* Masternode Control */, + FB1C3DC3236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.h */, + FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */, + ); + path = Masternode; + sourceTree = ""; + }; + FB3E9F622365D55700C09C5C /* Signing */ = { + isa = PBXGroup; + children = ( + FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, + FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, + ); + path = Signing; + sourceTree = ""; + }; FB3FF0B0222641210059A9A5 /* Masternode Keys */ = { isa = PBXGroup; children = ( + FB3E9F622365D55700C09C5C /* Signing */, 2AB66E0823572389007BE825 /* DerivationPathKeys */, 2AB66E0723572379007BE825 /* Overview */, ); path = "Masternode Keys"; sourceTree = ""; }; + FB519F032441B7B600AF50E8 /* Recovered References */ = { + isa = PBXGroup; + children = ( + ); + name = "Recovered References"; + sourceTree = ""; + }; + FB519F042441BB4E00AF50E8 /* Cells */ = { + isa = PBXGroup; + children = ( + FB519F052441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.h */, + FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */, + FB519F072441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.h */, + FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; + FBCFEDEA236E50410086DE07 /* Masternode Registration */ = { + isa = PBXGroup; + children = ( + FBCFEDEB236E50AF0086DE07 /* Models */, + FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, + FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, + ); + path = "Masternode Registration"; + sourceTree = ""; + }; + FBCFEDEB236E50AF0086DE07 /* Models */ = { + isa = PBXGroup; + children = ( + FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */, + FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */, + ); + path = Models; + sourceTree = ""; + }; + FBCFEDF0236F8C770086DE07 /* KeyValue */ = { + isa = PBXGroup; + children = ( + FBCFEDF1236F8CF70086DE07 /* DWKeyValueFormCellModel.h */, + FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */, + FBCFEDF4236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.h */, + FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */, + ); + path = KeyValue; + sourceTree = ""; + }; + FBCFEDF7236FCDE50086DE07 /* PublicKeyGeneration */ = { + isa = PBXGroup; + children = ( + FBCFEDF8236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.h */, + FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */, + FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */, + FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */, + ); + path = PublicKeyGeneration; + sourceTree = ""; + }; + FBF4DA02237B9D50005493A6 /* Masternode List */ = { + isa = PBXGroup; + children = ( + FBF4DA0A237BA597005493A6 /* Cells */, + FBF4DA03237B9D73005493A6 /* Models */, + FBF4DA07237BA341005493A6 /* DWMasternodeListViewController.h */, + FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */, + ); + path = "Masternode List"; + sourceTree = ""; + }; + FBF4DA03237B9D73005493A6 /* Models */ = { + isa = PBXGroup; + children = ( + FBF4DA04237B9DFA005493A6 /* DWMasternodeListModel.h */, + FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */, + ); + path = Models; + sourceTree = ""; + }; + FBF4DA0A237BA597005493A6 /* Cells */ = { + isa = PBXGroup; + children = ( + FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */, + FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */, + FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; + FBF4DA0E237BCE98005493A6 /* Local Masternodes */ = { + isa = PBXGroup; + children = ( + FBF4DA10237BCEBE005493A6 /* Models */, + FBF4DA0F237BCEB6005493A6 /* Cells */, + FBF4DA11237BCF0C005493A6 /* DWLocalMasternodeListViewController.h */, + FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */, + FBE74398238167200084A95B /* DWLocalMasternodeControlViewController.h */, + FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */, + ); + path = "Local Masternodes"; + sourceTree = ""; + }; + FBF4DA0F237BCEB6005493A6 /* Cells */ = { + isa = PBXGroup; + children = ( + FBF4DA17237BF13F005493A6 /* DWLocalMasternodeTableViewCell.h */, + FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; + FBF4DA10237BCEBE005493A6 /* Models */ = { + isa = PBXGroup; + children = ( + FBF4DA14237BCF68005493A6 /* DWLocalMasternodeListModel.h */, + FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */, + ); + path = Models; + sourceTree = ""; + }; FBFC2E9E21137A4200D20C57 /* Montserrat */ = { isa = PBXGroup; children = ( @@ -4390,6 +4707,7 @@ 2A1AF6DE23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib in Resources */, 2AFF01E0243F74BF003718DC /* DWDPRegistrationErrorTableViewCell.xib in Resources */, 2AB231D42196E27300A6E7E6 /* StartStoryboard.storyboard in Resources */, + FB519F0F2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib in Resources */, 2A60C9452444BF3A00AF72CF /* DWConfirmUsernameContentView.xib in Resources */, 2A1AF6DF23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib in Resources */, 2A4431D622D52F67009BAF7F /* DWInfoTextCell.xib in Resources */, @@ -4404,6 +4722,7 @@ 2A2CD71822F99CAE008C7BC9 /* DWShortcutsView.xib in Resources */, 2A5E4549243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.xib in Resources */, FBFC2EE521137A7A00D20C57 /* Montserrat-SemiBold.otf in Resources */, + FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */, 2A9FFE942230FF4700956D5F /* UpholdOTPStoryboard.storyboard in Resources */, 2A4430F222CBD57A009BAF7F /* AppAssets.xcassets in Resources */, 2A8B9E6222FF712000FF8653 /* DWPayTableViewCell.xib in Resources */, @@ -4765,10 +5084,13 @@ 2AD1CE6E22DA357D00C99324 /* DWBaseViewController.m in Sources */, 2A44314722CF82D9009BAF7F /* DWBiometricAuthViewController.m in Sources */, 2A4E531422E9F0A200E5168A /* DWStartViewController.m in Sources */, + FBF4DA09237BA341005493A6 /* DWMasternodeListViewController.m in Sources */, 2A4E531522E9F0A200E5168A /* DWStartModel.m in Sources */, 2AB3417A23A929B6004E37A7 /* DWAdvancedSecurityModelStub.m in Sources */, 2A9FFE872230FF4700956D5F /* DWPlaceholderFormTableViewCell.m in Sources */, 2A4E532022EB2DF400E5168A /* DWHomeHeaderView.m in Sources */, + FB031AE7237911F200EF564B /* DWSignPayloadView.m in Sources */, + FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */, 2A0C69F22316B93F001B8C90 /* DWTitleDetailCellView.m in Sources */, 2A1F640C238D5BBB00A9B505 /* DWSegmentSliderFormTableViewCell.m in Sources */, 2A56EF002419310C002C32F3 /* DWDashPayConstants.m in Sources */, @@ -4795,9 +5117,13 @@ 2AF26F3E230C1F79007F9228 /* DWAmountViewController.m in Sources */, 2A63003F2327B4BB00827825 /* DWPaymentOutput+DWView.m in Sources */, 2ACD53EE234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m in Sources */, + FBF4DA19237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m in Sources */, 2A7A7C10234B591300451078 /* DWBalanceNotifier.m in Sources */, 2A9CEBA822E1D5A200A50237 /* DWMainTabbarViewController.m in Sources */, 2AD1CEA822E0C8C900C99324 /* DWPreviewSeedPhraseModel.m in Sources */, + FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */, + FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */, + FBF4DA16237BCF68005493A6 /* DWLocalMasternodeListModel.m in Sources */, 2A913E8923A30DA8006A2A59 /* DWBalanceDisplayOptionsStub.m in Sources */, 2A0C69CD23142F90001B8C90 /* DWModalPresentationAnimation.m in Sources */, 2A8B9E7A2302E67400FF8653 /* DWReceiveModel.m in Sources */, @@ -4851,6 +5177,8 @@ 2AD1CE8A22DC9C6F00C99324 /* DWVerifySeedPhraseContentView.m in Sources */, 2A4431DB22D675CD009BAF7F /* DWPreviewSeedPhraseViewController.m in Sources */, 2AFCB9BE23BE3C0800FF59A6 /* DWConfirmSendPaymentViewController.m in Sources */, + FB65F045268837530022DF64 /* DWBaseContactsModel.m in Sources */, + FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */, 2A3DC87123972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */, 2A7A7C20234B79B700451078 /* DWLocalCurrencyTableViewCell.m in Sources */, @@ -4887,7 +5215,9 @@ 2ADB396C242615C200A6F898 /* CALayer+MBAnimationPersistence.m in Sources */, 2A9FFDF42230FF1A00956D5F /* UIView+DWAnimations.m in Sources */, 2A9FFE932230FF4700956D5F /* DWUpholdOTPViewController.m in Sources */, + FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */, 2A8B9E7D23034AC100FF8653 /* DWAppGroupOptions.m in Sources */, + FB519F092441BBB200AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */, 2A913EA423A799F3006A2A59 /* DWTransactionListDataItemObject.m in Sources */, 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, 2A56EEFB2417E30F002C32F3 /* DWConfirmUsernameContentView.m in Sources */, @@ -4895,8 +5225,12 @@ 2A827B7224B5CA1800A42042 /* DWListCollectionLayout.m in Sources */, 2A6688FD24BCB739008E10F0 /* DWDPTxItemView.m in Sources */, 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, + FBE7439A238167200084A95B /* DWLocalMasternodeControlViewController.m in Sources */, + FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */, + FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */, 2A1B7DBC2326187D00BA8C6A /* DWTxDetailFullscreenViewController.m in Sources */, 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, + FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */, 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */, 2A8B9E4D22FEBF7A00FF8653 /* DWProgressAnimator.mm in Sources */, 2A4431E222D7219E009BAF7F /* DWSeedWordView.m in Sources */, @@ -4935,6 +5269,9 @@ 2A8B9E5A22FF6FBD00FF8653 /* DWPayViewController.m in Sources */, 2A9FFE7E2230FF4600956D5F /* DWSelectorFormCellModel.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, + FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */, + FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */, + FBF4DA13237BCF0C005493A6 /* DWLocalMasternodeListViewController.m in Sources */, 2A7AF378248270A4001D74F9 /* DWDPEstablishedContactNotificationObject.m in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, 2ACCD86823195A3600A96B62 /* DWAmountPreviewView.m in Sources */, @@ -4960,6 +5297,8 @@ 2A7AF39E2482FE46001D74F9 /* DWDateFormatter.m in Sources */, 2A0C69D023143435001B8C90 /* DWModalDismissalAnimation.m in Sources */, 2A2CD72522FA05DD008C7BC9 /* DWPressableButton.m in Sources */, + FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */, + FB65F03D26882EE00022DF64 /* DWKeysOverviewViewController.m in Sources */, 2A4E533B22F0248D00E5168A /* DWTransactionListDataSource.m in Sources */, 2A913E6B23A15419006A2A59 /* DWUpholdAuthURLNotification.m in Sources */, 2A7A7BB6234792A600451078 /* DWMainMenuContentView.m in Sources */, @@ -4969,6 +5308,7 @@ 2A2120E72213201E009906DC /* DWAmountModel.m in Sources */, 2A2CD71322F97B65008C7BC9 /* CALayer+DWShadow.m in Sources */, 2AB3416923A8C479004E37A7 /* DWOnboardingCollectionViewCell.m in Sources */, + FB65F04426882F830022DF64 /* DWDerivationPathKeysItemObject.m in Sources */, 2A74F0012305C40F00C475EB /* DWHomeViewController+DWShortcuts.m in Sources */, 2A913E8223A30623006A2A59 /* DWHomeModelStub.m in Sources */, 2AFCB9BA23BDFF5E00FF59A6 /* DWUpholdAmountModel.m in Sources */, @@ -5005,6 +5345,7 @@ 2AEC5CBB2494045C00F4A689 /* DWNotificationsFetchedDataSource.m in Sources */, 2A7AF3752482703C001D74F9 /* DWDPNewIncomingRequestNotificationObject.m in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, + FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */, 2AD1CEA222DFC80900C99324 /* DWCenteredScrollView.m in Sources */, 2A7AF36C248266FB001D74F9 /* DWDPEstablishedContactObject.m in Sources */, 2A9172C425233DC50024B4C5 /* DWPhraseRepairViewController.m in Sources */, @@ -5018,7 +5359,6 @@ 2A1B7DC62326775600BA8C6A /* DWSuccessfulTransactionAnimatedIconView.m in Sources */, 2A5BD59E2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m in Sources */, 2A5E4548243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m in Sources */, - FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */, 2A913EB623A7E145006A2A59 /* DWTransactionStub.m in Sources */, 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */, 2A74EFE92305264200C475EB /* DWBaseActionButtonViewController.m in Sources */, @@ -5038,6 +5378,7 @@ 2A44311E22CC9B5A009BAF7F /* DWNavigationController.m in Sources */, 2A8B9E6122FF712000FF8653 /* DWPayTableViewCell.m in Sources */, 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */, + FB519F0D2441BD3700AF50E8 /* BRCopyLabel.m in Sources */, 2ACCD8E2231E507900A96B62 /* DWPinInputStepView.m in Sources */, 2AC52AD6241BB5FC00D9A829 /* DWDashPaySetupFlowController.m in Sources */, 2A74EFED2305318000C475EB /* DWRecoverViewController.m in Sources */, @@ -5062,6 +5403,7 @@ 2A392565234CD21300316EA6 /* DWTabBarButton.m in Sources */, 2A0C69AC23125074001B8C90 /* UIView+DWHUD.m in Sources */, 2A8B9E6822FFE4CC00FF8653 /* DWPayOptionModel.m in Sources */, + FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */, 2A7AF36924826681001D74F9 /* DWDPRespondedIncomingRequestObject.m in Sources */, 2A1AE79223F468CD00179A6E /* DWPlanetarySystemView.m in Sources */, 2A7A7BAE234770C900451078 /* DWCaptureSessionManager.m in Sources */, @@ -5074,6 +5416,7 @@ 2A7A7C1D234B771400451078 /* DWLocalCurrencyModel.m in Sources */, 2A7A7BC3234797FC00451078 /* DWMainMenuModel.m in Sources */, FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */, + FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */, 2A885FCC2449F08700B9F679 /* DWUserSearchResultViewController.m in Sources */, 2A1B7D81232151D400BA8C6A /* DWTxDetailViewController.m in Sources */, 2A7AF34C24823315001D74F9 /* DWDPGenericStatusItemView.m in Sources */, @@ -5130,12 +5473,12 @@ 2AD1CE9722DD0E8E00C99324 /* DWSeedWordModel+DWLayoutSupport.m in Sources */, 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */, 2A7A7BCD2347F01B00451078 /* DWSecurityMenuViewController.m in Sources */, + FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */, + 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */, 2A4E1D5325056297008AC53F /* DWPaymentsButton.m in Sources */, 2A1A60BC2674084F003DAC65 /* DWSyncingAlertContentView.m in Sources */, 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */, - 2A951CE423D1B92C00602824 /* DWBaseContactsModel.m in Sources */, 2A1F6415238FEEA900A9B505 /* DWAdvancedSecurityModel.m in Sources */, - 2A8DBAAF2630CC2D009094BD /* DWDerivationPathKeysItemObject.m in Sources */, 2AB66DD223546746007BE825 /* DWTxDetailListView.m in Sources */, 2A7A7BE72348E9AA00451078 /* DWBorderedActionButton.m in Sources */, 2A63004E2328F37C00827825 /* DWLockScreenViewController.m in Sources */, @@ -5154,6 +5497,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */, + FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */, 2A2120EC22145CAE009906DC /* DWAmountInputValidatorTests.m in Sources */, 75D5F3F3191EC270004AB296 /* DashWalletTests.m in Sources */, 2AAEF5432217EDDB000FC092 /* DWAmountObjectTests.m in Sources */, @@ -5549,7 +5894,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -5579,7 +5924,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -5656,7 +6001,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5677,7 +6022,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5696,7 +6041,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -5717,7 +6062,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -5743,7 +6088,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5766,7 +6111,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5857,7 +6202,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -5882,7 +6227,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5930,7 +6275,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5949,7 +6294,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -6049,7 +6394,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -6072,7 +6417,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -6119,7 +6464,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -6138,7 +6483,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h new file mode 100644 index 000000000..17f5a1fe7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h @@ -0,0 +1,28 @@ +// +// 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 "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormCellModel : DWBaseFormCellModel + +@property (nullable, copy, nonatomic) void (^didSelectBlock)(DWActionFormCellModel *cellModel, NSIndexPath *indexPath); + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m new file mode 100644 index 000000000..2f7198c5c --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m @@ -0,0 +1,26 @@ +// +// 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 "DWActionFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWActionFormCellModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h new file mode 100644 index 000000000..22bac8756 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h @@ -0,0 +1,29 @@ +// +// 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 "DWActionFormCellModel.h" +#import "DWBaseFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormTableViewCell : DWBaseFormTableViewCell + +@property (nullable, strong, nonatomic) DWActionFormCellModel *cellModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m new file mode 100644 index 000000000..2f57e0e55 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m @@ -0,0 +1,86 @@ +// +// 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 "DWActionFormTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; + +@end + +@implementation DWActionFormTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + contentView.backgroundColor = [UIColor dw_dashBlueColor]; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor clearColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.textColor = [UIColor dw_lightTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + [titleLabel.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + ]]; + + [self setupObserving]; + } + + return self; +} + +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h index 0ea6580c2..68b2f7799 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h @@ -16,10 +16,11 @@ // #import +#import NS_ASSUME_NONNULL_BEGIN -@interface DWBaseFormCellModel : NSObject +@interface DWBaseFormCellModel : KVONSObject @property (nullable, copy, nonatomic) NSString *title; @property (assign, nonatomic) NSUInteger tag; diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h index db9a736ac..1864a280e 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h @@ -20,7 +20,10 @@ NS_ASSUME_NONNULL_BEGIN extern CGFloat const DW_FORM_CELL_VERTICAL_PADDING; +extern CGFloat const DW_FORM_CELL_TWOLINE_VERTICAL_PADDING; extern CGFloat const DW_FORM_CELL_SPACING; +extern CGFloat const DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING; + typedef NS_ENUM(NSUInteger, DWFormCellRoundMask) { DWFormCellRoundMask_Top = 1 << 0, diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m index 46046bfc7..54d5b5bcd 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m @@ -25,6 +25,9 @@ CGFloat const DW_FORM_CELL_VERTICAL_PADDING = 24.0; CGFloat const DW_FORM_CELL_SPACING = 10.0; +CGFloat const DW_FORM_CELL_TWOLINE_VERTICAL_PADDING = 16.0; +CGFloat const DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING = 8.0; + static CGFloat const CORNER_RADIUS = 8.0; static CGFloat SeparatorHeight(void) { diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h index 11302c608..9524fad96 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h @@ -16,7 +16,10 @@ // #import +#import "DWActionFormCellModel.h" #import "DWFormSectionModel.h" +#import "DWKeyValueFormCellModel.h" +#import "DWPublicKeyGenerationCellModel.h" #import "DWSelectorFormCellModel.h" #import "DWSwitcherFormCellModel.h" diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m index 4718a3cb8..c82a83543 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m @@ -17,7 +17,10 @@ #import "DWFormTableViewController.h" +#import "DWActionFormTableViewCell.h" +#import "DWKeyValueFormTableViewCell.h" #import "DWPlaceholderFormTableViewCell.h" +#import "DWPublicKeyGenerationTableViewCell.h" #import "DWSelectorFormTableViewCell.h" #import "DWSharedUIConstants.h" #import "DWSwitcherFormTableViewCell.h" @@ -26,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN static CGFloat const DEFAULT_CELL_HEIGHT = 74.0; +static CGFloat const PUBLIC_KEY_GENERATION_CELL_HEIGHT = 124.0; static CGFloat const SECTION_SPACING = 10.0; @interface DWFormTableViewController () @@ -55,6 +59,9 @@ - (void)viewDidLoad { DWSelectorFormTableViewCell.class, DWSwitcherFormTableViewCell.class, DWPlaceholderFormTableViewCell.class, + DWKeyValueFormTableViewCell.class, + DWPublicKeyGenerationTableViewCell.class, + DWActionFormTableViewCell.class, ]; for (Class cellClass in cellClasses) { @@ -145,6 +152,20 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.roundMask = roundMask; return cell; } + else if ([cellModel isKindOfClass:DWKeyValueFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWKeyValueFormTableViewCell.class); + DWKeyValueFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWKeyValueFormCellModel *)cellModel; + return cell; + } + else if ([cellModel isKindOfClass:DWPublicKeyGenerationCellModel.class]) { + NSString *cellId = NSStringFromClass(DWPublicKeyGenerationTableViewCell.class); + DWPublicKeyGenerationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWPublicKeyGenerationCellModel *)cellModel; + return cell; + } else if ([cellModel isKindOfClass:DWPlaceholderFormCellModel.class]) { NSString *cellId = NSStringFromClass(DWPlaceholderFormTableViewCell.class); DWPlaceholderFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId @@ -152,6 +173,13 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.cellModel = (DWPlaceholderFormCellModel *)cellModel; return cell; } + else if ([cellModel isKindOfClass:DWActionFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWActionFormTableViewCell.class); + DWActionFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWActionFormCellModel *)cellModel; + return cell; + } else { NSString *cellModelClass = NSStringFromClass(cellModel.class); NSString *cellId = self.customCellModels[cellModelClass]; @@ -182,6 +210,9 @@ - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:( if ([cellModel isKindOfClass:DWPlaceholderFormCellModel.class]) { return CGRectGetHeight(tableView.bounds); } + else if ([cellModel isKindOfClass:DWPublicKeyGenerationTableViewCell.class]) { + return PUBLIC_KEY_GENERATION_CELL_HEIGHT; + } else { return DEFAULT_CELL_HEIGHT; } @@ -200,6 +231,22 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath selectorCellModel.didSelectBlock(selectorCellModel, indexPath); } } + else if ([cellModel isKindOfClass:DWActionFormCellModel.class]) { + DWActionFormCellModel *actionCellModel = (DWActionFormCellModel *)cellModel; + if (actionCellModel.didSelectBlock) { + actionCellModel.didSelectBlock(actionCellModel, indexPath); + } + } + else if ([cellModel isKindOfClass:DWKeyValueFormCellModel.class]) { + DWKeyValueFormCellModel *keyValueCellModel = (DWKeyValueFormCellModel *)cellModel; + DWKeyValueFormTableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + if (cell) { + [cell resignFirstResponder]; + } + if (keyValueCellModel.actionBlock) { + keyValueCellModel.actionBlock(); + } + } else if ([cellModel isKindOfClass:DWSwitcherFormCellModel.class]) { DWSwitcherFormCellModel *switcherCellModel = (DWSwitcherFormCellModel *)cellModel; switcherCellModel.on = !switcherCellModel.on; diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h new file mode 100644 index 000000000..8aed16c74 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h @@ -0,0 +1,36 @@ +// +// 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 "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWKeyValueFormCellModel : DWBaseFormCellModel + +@property (readonly, nonatomic) NSString *placeholderText; +@property (copy, nonatomic) NSString *valueText; +@property (assign, nonatomic) BOOL editable; +@property (copy, nonatomic) NSAttributedString *actionText; +@property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWKeyValueFormCellModel *cellModel); +@property (nullable, copy, nonatomic) void (^actionBlock)(void); + +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText placeholderText:(NSString *)placeholderText actionText:(NSAttributedString *)actionText; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m new file mode 100644 index 000000000..2a8a71165 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m @@ -0,0 +1,48 @@ +// +// 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 "DWKeyValueFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWKeyValueFormCellModel + +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText placeholderText:(NSString *)placeholderText actionText:(nonnull NSAttributedString *)actionText { + self = [self initWithTitle:title valueText:valueText]; + if (self) { + _placeholderText = placeholderText; + _actionText = actionText; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText { + self = [super initWithTitle:title]; + if (self) { + _valueText = valueText; + _editable = YES; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title { + return [self initWithTitle:title valueText:@""]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h new file mode 100644 index 000000000..dc6efdd54 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h @@ -0,0 +1,29 @@ +// +// 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 "DWBaseFormTableViewCell.h" +#import "DWKeyValueFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWKeyValueFormTableViewCell : DWBaseFormTableViewCell + +@property (nullable, strong, nonatomic) DWKeyValueFormCellModel *cellModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m new file mode 100644 index 000000000..8e28bd9d4 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m @@ -0,0 +1,173 @@ +// +// 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 "DWKeyValueFormTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; + +@interface DWKeyValueFormTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *actionLabel; +@property (readonly, nonatomic, strong) UITextField *valueTextField; + +@end + +@implementation DWKeyValueFormTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor dw_backgroundColor]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UITextField *valueTextField = [[UITextField alloc] initWithFrame:CGRectZero]; + valueTextField.translatesAutoresizingMaskIntoConstraints = NO; + valueTextField.backgroundColor = [UIColor dw_backgroundColor]; + valueTextField.textColor = [UIColor dw_tertiaryTextColor]; + valueTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + valueTextField.delegate = self; + [contentView addSubview:valueTextField]; + _valueTextField = valueTextField; + + UILabel *actionLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + actionLabel.translatesAutoresizingMaskIntoConstraints = NO; + actionLabel.backgroundColor = [UIColor dw_backgroundColor]; + actionLabel.textAlignment = NSTextAlignmentRight; + actionLabel.textColor = [UIColor dw_dashBlueColor]; + actionLabel.numberOfLines = 0; + actionLabel.lineBreakMode = NSLineBreakByWordWrapping; + actionLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + actionLabel.adjustsFontForContentSizeCategory = YES; + actionLabel.minimumScaleFactor = 0.5; + actionLabel.adjustsFontSizeToFitWidth = YES; + [actionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 + forAxis:UILayoutConstraintAxisHorizontal]; + [actionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 + forAxis:UILayoutConstraintAxisVertical]; + [actionLabel setContentHuggingPriority:UILayoutPriorityDefaultLow - 1 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:actionLabel]; + _actionLabel = actionLabel; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_TWOLINE_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + + [valueTextField.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING - 4], + [valueTextField.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [valueTextField.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + [valueTextField.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + + [actionLabel.topAnchor constraintEqualToAnchor:titleLabel.topAnchor + constant:0], + [actionLabel.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [actionLabel.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:0], + [actionLabel.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + + ]]; + + [self setupObserving]; + } + + return self; +} + +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.valueText) + with:^(__typeof(self) self, NSString *value) { + [self.valueTextField setText:value]; + }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.actionText) + with:^(__typeof(self) self, NSAttributedString *value) { + [self.actionLabel setAttributedText:value]; + }]; +} + +- (void)setCellModel:(nullable DWKeyValueFormCellModel *)cellModel { + _cellModel = cellModel; + if (cellModel.placeholderText) { + [self.valueTextField setPlaceholder:cellModel.placeholderText]; + } + if (cellModel.actionText) { + [self.actionLabel setAttributedText:cellModel.actionText]; + } + if (!cellModel.editable) { + [self.valueTextField setUserInteractionEnabled:FALSE]; + } +} + +- (BOOL)shouldAnimatePressWhenHighlighted { + return NO; +} + +#pragma mark - Private + +- (void)textFieldDidEndEditing:(UITextField *)textField { + self.cellModel.valueText = textField.text; +} + +- (BOOL)resignFirstResponder { + BOOL resigned = [super resignFirstResponder]; + if ([self.valueTextField isFirstResponder]) { + resigned |= [self.valueTextField resignFirstResponder]; + } + return resigned; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h new file mode 100644 index 000000000..9aeda1940 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h @@ -0,0 +1,33 @@ +// +// 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 "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPublicKeyGenerationCellModel : DWBaseFormCellModel + +@property (strong, nonatomic) NSData *publicKeyData; +@property (assign, nonatomic) uint32_t keyIndex; + +@property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWPublicKeyGenerationCellModel *cellModel); + +- (instancetype)initWithTitle:(nullable NSString *)title publicKeyData:(NSData *)publicKeyData withIndex:(uint32_t)keyIndex NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m new file mode 100644 index 000000000..8bad7d737 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m @@ -0,0 +1,39 @@ +// +// 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 "DWPublicKeyGenerationCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWPublicKeyGenerationCellModel + +- (instancetype)initWithTitle:(nullable NSString *)title publicKeyData:(NSData *)publicKeyData withIndex:(uint32_t)keyIndex { + self = [super initWithTitle:title]; + if (self) { + _publicKeyData = publicKeyData; + _keyIndex = keyIndex; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title { + return [self initWithTitle:title publicKeyData:[NSData data] withIndex:UINT32_MAX]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h new file mode 100644 index 000000000..b8cd4d75c --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h @@ -0,0 +1,30 @@ +// +// 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 "DWBaseFormTableViewCell.h" +#import "DWPublicKeyGenerationCellModel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPublicKeyGenerationTableViewCell : DWBaseFormTableViewCell + +@property (nullable, strong, nonatomic) DWPublicKeyGenerationCellModel *cellModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m new file mode 100644 index 000000000..8882ae6c6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m @@ -0,0 +1,117 @@ +// +// 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 "DWPublicKeyGenerationTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPublicKeyGenerationTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UITextField *publicKeyTextField; +@property (readonly, nonatomic, strong) UITextField *indexTextField; + +@end + +@implementation DWPublicKeyGenerationTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor dw_backgroundColor]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UITextField *publicKeyTextField = [[UITextField alloc] initWithFrame:CGRectZero]; + publicKeyTextField.translatesAutoresizingMaskIntoConstraints = NO; + publicKeyTextField.backgroundColor = [UIColor dw_backgroundColor]; + publicKeyTextField.textColor = [UIColor dw_darkTitleColor]; + publicKeyTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + publicKeyTextField.delegate = self; + [contentView addSubview:publicKeyTextField]; + _publicKeyTextField = publicKeyTextField; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [publicKeyTextField.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [publicKeyTextField.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [publicKeyTextField.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + ]]; + + [self setupObserving]; + } + + return self; +} +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.publicKeyData) + with:^(__typeof(self) self, NSData *value) { + [self.publicKeyTextField setText:value.hexString]; + }]; +} + +- (BOOL)shouldAnimatePressWhenHighlighted { + return NO; +} + +#pragma mark - Private + +- (void)textFieldDidEndEditing:(UITextField *)textField { + if (textField && [textField isEqual:_publicKeyTextField]) { + self.cellModel.publicKeyData = [textField.text hexToData]; + } + else { + } +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard b/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard index 234b6bdc3..ea4c5e547 100644 --- a/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard +++ b/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard @@ -122,10 +122,10 @@ - + - + diff --git a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m index 97bdd1de7..129e0232e 100644 --- a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m @@ -20,7 +20,7 @@ #import "DWExtendedPublicKeysViewController.h" #import "DWFormTableViewController.h" #import "DWImportWalletInfoViewController.h" -#import "DWKeysOverviewViewController.h" +#import "DWMasternodeFeaturesMenuViewController.h" #import "DWToolsMenuModel.h" #import "DWUIKit.h" @@ -73,7 +73,7 @@ - (DWToolsMenuModel *)model { } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Extended Public Keys", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode Features", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -95,7 +95,7 @@ - (DWToolsMenuModel *)model { return; } - [strongSelf showMasternodeKeys]; + [strongSelf showMasternodeFeatures]; }; [items addObject:cellModel]; } @@ -145,9 +145,9 @@ - (void)showImportPrivateKey { [self.navigationController pushViewController:controller animated:YES]; } -- (void)showMasternodeKeys { - DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; - [self.navigationController pushViewController:keysViewController animated:YES]; +- (void)showMasternodeFeatures { + DWMasternodeFeaturesMenuViewController *masternodeFeaturesMenuViewController = [[DWMasternodeFeaturesMenuViewController alloc] init]; + [self.navigationController pushViewController:masternodeFeaturesMenuViewController animated:YES]; } - (void)showExtendedPublicKeys { diff --git a/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard b/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard index 944806de5..c86f4a9f1 100644 --- a/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard @@ -87,7 +87,7 @@ - + diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h new file mode 100644 index 000000000..569032747 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h @@ -0,0 +1,26 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeFeaturesMenuViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m new file mode 100644 index 000000000..0b844e69d --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -0,0 +1,163 @@ +// +// 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 "DWMasternodeFeaturesMenuViewController.h" + +#import "DWFormTableViewController.h" +#import "DWImportWalletInfoViewController.h" +#import "DWKeysOverviewViewController.h" +#import "DWLocalMasternodeListViewController.h" +#import "DWMasternodeListViewController.h" +#import "DWRegisterMasternodeViewController.h" +#import "DWToolsMenuModel.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeFeaturesMenuViewController () + +@property (nonatomic, strong) DWFormTableViewController *formController; + +@end + +@implementation DWMasternodeFeaturesMenuViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + self.title = NSLocalizedString(@"Masternode Features", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (NSArray *)items { + __weak typeof(self) weakSelf = self; + + NSMutableArray *items = [NSMutableArray array]; + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeList]; + }; + [items addObject:cellModel]; + } + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"My Masternodes", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeControl]; + }; + [items addObject:cellModel]; + } + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register Masternode", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showRegisterMasternode]; + }; + [items addObject:cellModel]; + } + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show Masternode Keys", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeKeys]; + }; + [items addObject:cellModel]; + } + + return items; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + return @[ section ]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Private + +- (void)showMasternodeKeys { + DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; + [self.navigationController pushViewController:keysViewController animated:YES]; +} + +- (void)showRegisterMasternode { + DWRegisterMasternodeViewController *registerMasternodeViewController = [[DWRegisterMasternodeViewController alloc] init]; + [self.navigationController pushViewController:registerMasternodeViewController animated:YES]; +} + +- (void)showMasternodeControl { + DWLocalMasternodeListViewController *masternodeViewController = [[DWLocalMasternodeListViewController alloc] init]; + [self.navigationController pushViewController:masternodeViewController animated:YES]; +} + +- (void)showMasternodeList { + DWMasternodeListViewController *masternodeViewController = [[DWMasternodeListViewController alloc] init]; + [self.navigationController pushViewController:masternodeViewController animated:YES]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h new file mode 100644 index 000000000..27519650d --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h @@ -0,0 +1,30 @@ +// +// 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 "DWBaseFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWLocalMasternodeTableViewCell : DWBaseFormTableViewCell + +- (void)configureWithModel:(DSLocalMasternode *)model + searchQuery:(nullable NSString *)searchQuery; +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m new file mode 100644 index 000000000..ce5f5eb53 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m @@ -0,0 +1,214 @@ +// +// 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 "DWLocalMasternodeTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "NSAttributedString+DWHighlightText.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +static CGSize const ACCESSORY_SIZE = {10.0, 19.0}; + +@interface DWLocalMasternodeTableViewCell () + +@property (readonly, strong, nonatomic) UILabel *nameLabel; +@property (readonly, strong, nonatomic) UILabel *addressLabel; +@property (readonly, strong, nonatomic) UILabel *portLabel; +@property (readonly, nonatomic, strong) UIImageView *accessoryImageView; + +@property (nullable, nonatomic, strong) DSLocalMasternode *model; +@property (nullable, nonatomic, copy) NSString *searchQuery; + +@end + +@implementation DWLocalMasternodeTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + nameLabel.translatesAutoresizingMaskIntoConstraints = NO; + nameLabel.backgroundColor = [UIColor dw_backgroundColor]; + nameLabel.textColor = [UIColor dw_darkTitleColor]; + nameLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + nameLabel.adjustsFontForContentSizeCategory = YES; + nameLabel.minimumScaleFactor = 0.5; + nameLabel.adjustsFontSizeToFitWidth = YES; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [nameLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:nameLabel]; + _nameLabel = nameLabel; + + UILabel *addressLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + addressLabel.translatesAutoresizingMaskIntoConstraints = NO; + addressLabel.backgroundColor = [UIColor dw_backgroundColor]; + addressLabel.textColor = [UIColor dw_quaternaryTextColor]; + addressLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + addressLabel.adjustsFontForContentSizeCategory = YES; + addressLabel.minimumScaleFactor = 0.5; + addressLabel.adjustsFontSizeToFitWidth = YES; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [addressLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:addressLabel]; + _addressLabel = addressLabel; + + UILabel *portLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + portLabel.translatesAutoresizingMaskIntoConstraints = NO; + portLabel.backgroundColor = [UIColor dw_backgroundColor]; + portLabel.textAlignment = NSTextAlignmentRight; + portLabel.textColor = [UIColor dw_secondaryTextColor]; + portLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + portLabel.adjustsFontForContentSizeCategory = YES; + portLabel.minimumScaleFactor = 0.5; + portLabel.adjustsFontSizeToFitWidth = YES; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [portLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:portLabel]; + portLabel = portLabel; + + UIImage *image = [UIImage imageNamed:@"icon_disclosure_indicator"]; + NSParameterAssert(image); + UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image]; + accessoryImageView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:accessoryImageView]; + _accessoryImageView = accessoryImageView; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [nameLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [nameLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [nameLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [addressLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [addressLabel.leadingAnchor constraintEqualToAnchor:nameLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [addressLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [portLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [portLabel.leadingAnchor constraintEqualToAnchor:addressLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + + [accessoryImageView.leadingAnchor constraintEqualToAnchor:portLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [accessoryImageView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [accessoryImageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [accessoryImageView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], + [accessoryImageView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], + ]]; + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(contentSizeCategoryDidChangeNotification) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)configureWithModel:(DSLocalMasternode *)model + searchQuery:(nullable NSString *)searchQuery { + self.model = model; + self.searchQuery = searchQuery; + + self.portLabel.text = model.ipAddressString; + + [self setupObserving]; + + [self reloadAttributedData]; +} + +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, model.name) + with:^(__typeof(self) self, NSString *value) { + self.nameLabel.text = value ?: NSLocalizedString(@"Unnamed", nil); + }]; +} + +- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +#pragma mark - Private + +- (void)contentSizeCategoryDidChangeNotification { + [self reloadAttributedData]; +} + +- (void)reloadAttributedData { + NSString *highlightedText = self.searchQuery; + UIColor *highlightedTextColor = [UIColor dw_dashBlueColor]; + + UIFont *codeFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + UIColor *codeColor = [UIColor dw_darkTitleColor]; + NSString *name = self.model.name; + if (!name) + name = NSLocalizedString(@"Unnamed", nil); + self.nameLabel.attributedText = [NSAttributedString attributedText:name + font:codeFont + textColor:codeColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *nameFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *nameColor = [UIColor dw_quaternaryTextColor]; + self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressAndIfNonstandardPortString + font:nameFont + textColor:nameColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + self.portLabel.attributedText = [NSAttributedString attributedText:self.model.portString + font:nameFont + textColor:nameColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h new file mode 100644 index 000000000..591cdc313 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h @@ -0,0 +1,34 @@ +// +// 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWLocalMasternodeControlViewController : KVOUIViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +- (instancetype)initWithLocalMasternode:(DSLocalMasternode *)localMasternode NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m new file mode 100644 index 000000000..44d3574bc --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -0,0 +1,564 @@ +// +// 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 "DWLocalMasternodeControlViewController.h" + +#import "DWEnvironment.h" +#import "DWFormTableViewController.h" +#import "DWKeyValueFormTableViewCell.h" +#import "DWPublicKeyGenerationTableViewCell.h" +#import "DWSignMessageViewController.h" +#import "DWSignPayloadModel.h" +#import "DWSignPayloadViewController.h" +#import "DWUIKit.h" +#import + +#define INPUT_CELL_HEIGHT 75 +#define PUBLIC_KEY_CELL_HEIGHT 150 + +typedef NS_ENUM(NSUInteger, DWMasternodeControlCell) { + DWMasternodeControlCell_Name, + DWMasternodeControlCell_CollateralInfo, + DWMasternodeControlCell_Host, + DWMasternodeControlCell_PayoutAddress, + DWMasternodeControlCell_OwnerKey, + DWMasternodeControlCell_OperatorKey, + DWMasternodeControlCell_VotingKey, + _DWMasternodeControlCell_Count, +}; + +typedef NS_ENUM(NSUInteger, DWMasternodeActionCell) { + DWMasternodeActionCell_SignMessage, + DWMasternodeActionCell_Reset, + DWMasternodeActionCell_UpdateHost, + DWMasternodeActionCell_ChangePayoutAddress, + DWMasternodeActionCell_ChangeOperator, + DWMasternodeActionCell_ChangeVotingKey, + _DWMasternodeActionCell_Count, +}; + +typedef NS_ENUM(NSUInteger, DWMasternodeControlViewState) { + DWMasternodeControlViewState_PublicInfo = 0, + DWMasternodeControlViewState_PrivateInfo = 1, +}; + +@interface DWLocalMasternodeControlViewController () + +@property (nonatomic, strong) DWActionFormCellModel *registerActionModel; +@property (nonatomic, strong) DWFormTableViewController *formController; +@property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, assign) BOOL isViewingOwnerPrivateKey; +@property (nonatomic, assign) BOOL isViewingOperatorPrivateKey; +@property (nonatomic, assign) BOOL isViewingVotingPrivateKey; + +@end + +@implementation DWLocalMasternodeControlViewController + +- (instancetype)initWithLocalMasternode:(DSLocalMasternode *)localMasternode { + if (self = [super initWithNibName:nil bundle:nil]) { + self.title = NSLocalizedString(@"Control", nil); + self.hidesBottomBarWhenPushed = YES; + _localMasternode = localMasternode; + _isViewingOwnerPrivateKey = NO; + _isViewingOperatorPrivateKey = NO; + _isViewingVotingPrivateKey = NO; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Data Source + +- (NSString *)titleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_Name: + return NSLocalizedString(@"Local Name", nil); + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"Collateral Information", nil); + case DWMasternodeControlCell_Host: + return NSLocalizedString(@"Host", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Payout Address", nil); + case DWMasternodeControlCell_OwnerKey: + if (!self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Owner Public Key", nil); + } + else { + return NSLocalizedString(@"Owner Private Key", nil); + } + case DWMasternodeControlCell_OperatorKey: + if (!self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Operator Public Key", nil); + } + else { + return NSLocalizedString(@"Operator Private Key", nil); + } + case DWMasternodeControlCell_VotingKey: + if (!self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Voting Public Key", nil); + } + else { + return NSLocalizedString(@"Voting Private Key", nil); + } + } + return @""; +} + +- (NSString *)placeholderForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_Name: + return NSLocalizedString(@"Enter a Nickname for this Masternode", nil); + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"No Collateral Information", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Unknown Payout Address", nil); + case DWMasternodeControlCell_OwnerKey: + if (!self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Unknown Owner Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Owner Private Key", nil); + } + case DWMasternodeControlCell_OperatorKey: + if (!self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Unknown Operator Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Operator Private Key", nil); + } + case DWMasternodeControlCell_VotingKey: + if (!self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Unknown Voting Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Voting Private Key", nil); + } + } + return @""; +} + +- (NSString *)actionForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_OwnerKey: + if (self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } + case DWMasternodeControlCell_OperatorKey: + if (self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } + case DWMasternodeControlCell_VotingKey: + if (self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } + default: + return nil; + } +} + +- (NSString *)actionTitleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeActionCell_SignMessage: + return NSLocalizedString(@"Sign Message", nil); + case DWMasternodeActionCell_Reset: + return NSLocalizedString(@"Reset", nil); + case DWMasternodeActionCell_UpdateHost: + return NSLocalizedString(@"Update Host", nil); + case DWMasternodeActionCell_ChangeOperator: + return NSLocalizedString(@"Change Operator", nil); + case DWMasternodeActionCell_ChangeVotingKey: + return NSLocalizedString(@"Change Voting Key", nil); + case DWMasternodeActionCell_ChangePayoutAddress: + return NSLocalizedString(@"Change Payout Address", nil); + } + return @""; +} + +- (BOOL)resignCellsFirstResponders { + BOOL resigned = FALSE; + for (UITableViewCell *cell in self.formController.tableView.visibleCells) { + resigned |= [cell resignFirstResponder]; + } + return resigned; +} + +- (void (^)(void))actionBlockForModel:(DWKeyValueFormCellModel *)model forCellAtRow:(NSUInteger)row { + __weak __typeof(self) weakSelf = self; + __weak __typeof(model) weakModel = model; + switch (row) { + case DWMasternodeControlCell_CollateralInfo: + return ^{ + __strong __typeof(weakSelf) strongSelf = weakSelf; + + if (!strongSelf) { + return; + } + }; + case DWMasternodeControlCell_Host: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; + }; + case DWMasternodeControlCell_PayoutAddress: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + }; + case DWMasternodeControlCell_OwnerKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + self.isViewingOwnerPrivateKey = !self.isViewingOwnerPrivateKey; + }; + case DWMasternodeControlCell_OperatorKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + self.isViewingOperatorPrivateKey = !self.isViewingOperatorPrivateKey; + }; + case DWMasternodeControlCell_VotingKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + self.isViewingVotingPrivateKey = !self.isViewingVotingPrivateKey; + }; + default: + return nil; + } +} + +- (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { + NSString *actionText = [self actionForCellAtRow:row]; + DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; + if (actionText) { + model.actionBlock = [self actionBlockForModel:model forCellAtRow:row]; + } + __weak __typeof(self.localMasternode) weakModel = self.localMasternode; + switch (row) { + case DWMasternodeControlCell_Name: { + model.valueText = self.localMasternode.name; + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + [strongModel registerName:value]; + }]; + break; + } + case DWMasternodeControlCell_CollateralInfo: { + model.valueText = @""; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_Host: { + model.valueText = self.localMasternode.ipAddressAndPortString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_PayoutAddress: { + model.valueText = self.localMasternode.payoutAddress; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_OwnerKey: { + model.valueText = self.localMasternode.ownerPublicKeyData.hexString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_OperatorKey: { + model.valueText = self.localMasternode.operatorPublicKeyData.hexString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_VotingKey: { + NSData *votingKeyData = self.localMasternode.votingPublicKeyData; + if (votingKeyData.length) { + model.valueText = votingKeyData.hexString; + model.editable = FALSE; + } + else { + model.valueText = NSLocalizedString(@"Same as owner", @"Should be understood as `same as owner key`"); + model.editable = FALSE; + } + break; + } + } + + return model; +} + +- (NSArray *)items { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeControlCell_Count; i++) { + [items addObject:[self modelForRow:i]]; + } + + return items; +} + +- (DWBaseFormCellModel *)actionModelAtIndex:(NSUInteger)index { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *actionModel = [[DWActionFormCellModel alloc] initWithTitle:[self actionTitleForCellAtRow:index]]; + switch (index) { + case DWMasternodeActionCell_SignMessage: { + actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + UITableView *tableView = self.formController.tableView; + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [strongSelf showKeyForSignMessageFromSourceView:tableView sourceRect:cell.frame]; + [strongSelf resignCellsFirstResponders]; + }; + } break; + case DWMasternodeActionCell_Reset: { + actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + UITableView *tableView = self.formController.tableView; + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [strongSelf resetMasternodeFromSourceView:tableView sourceRect:cell.frame]; + [strongSelf resignCellsFirstResponders]; + }; + } break; + + default: + break; + } + + return actionModel; +} + +- (void)showKeyForSignMessageFromSourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect { + + UIAlertController *actionSheet = [UIAlertController + alertControllerWithTitle:NSLocalizedString(@"Key to use", nil) + message:nil + preferredStyle:UIAlertControllerStyleActionSheet]; + UIAlertAction *ownerKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Owner Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Allow signing with owner key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode ownerKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + UIAlertAction *operatorKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Operator Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Allow signing with operator key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSBLSKey *operatorKey = [self.localMasternode operatorKeyFromSeed:seed]; + [self showSignMessageForKey:operatorKey]; + } + }]; + }]; + UIAlertAction *votingKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Voting Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.votingKeysWallet seedWithPrompt:@"Allow signing with voting key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode votingKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + + UIAlertAction *cancel = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Cancel", nil) + style:UIAlertActionStyleCancel + handler:nil]; + [actionSheet addAction:ownerKey]; + [actionSheet addAction:operatorKey]; + [actionSheet addAction:votingKey]; + [actionSheet addAction:cancel]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + actionSheet.popoverPresentationController.sourceView = sourceView; + actionSheet.popoverPresentationController.sourceRect = sourceRect; + } + [self presentViewController:actionSheet animated:YES completion:nil]; +} + +- (void)resetMasternodeFromSourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect { + DSAccount *account = [self.localMasternode.chain firstAccountWithBalance]; + if (account) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Do you wish to reset this masternode?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + [self.localMasternode updateTransactionForResetFundedByAccount:account + completion:^(DSProviderUpdateServiceTransaction *_Nonnull providerUpdateServiceTransaction) { + if (providerUpdateServiceTransaction) { + [account signTransaction:providerUpdateServiceTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + NSLog(@"%@", providerUpdateServiceTransaction.data.hexString); + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; + }]; + } +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (void)showSignMessageForKey:(DSKey *)key { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWSignMessageViewController *signMessageViewController = (DWSignMessageViewController *)[storyboard instantiateViewControllerWithIdentifier:@"DWSignMessageViewControllerIdentifier"]; + signMessageViewController.key = key; + [self.navigationController pushViewController:signMessageViewController animated:YES]; +} + +- (NSArray *)actionItems { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { + [items addObject:[self actionModelAtIndex:i]]; + } + + return items; +} + +- (DWBaseFormCellModel *)registerActionModel { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + + // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + // if (error) { + // return; + // } + // [self.model registerMasternode:self + // requestsPayloadSigning:^{ + // [self showPayloadSigning]; + // } + // completion:^(NSError *_Nonnull error){ + // + // }]; + // [self showPayloadSigning]; + // }]; + }; + self.registerActionModel = registerModel; + return registerModel; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; + actionsSection.items = [self actionItems]; + + return @[ section, actionsSection ]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h new file mode 100644 index 000000000..4d0c28c19 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h @@ -0,0 +1,26 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m new file mode 100644 index 000000000..5397f3660 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m @@ -0,0 +1,172 @@ +// +// 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 "DWLocalMasternodeListViewController.h" + +#import + +#import "DWLocalMasternodeListModel.h" + +#import "DWLocalMasternodeControlViewController.h" +#import "DWLocalMasternodeTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "UIView+DWRecursiveSubview.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListViewController () + +@property (nonatomic, strong) DWLocalMasternodeListModel *model; + +@end + +@implementation DWLocalMasternodeListViewController + +- (instancetype)init { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + self.title = NSLocalizedString(@"My Masternodes", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.model = [[DWLocalMasternodeListModel alloc] init]; + + [self setupView]; + [self setupSearchController]; + + [self.tableView reloadData]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // show search bar initially, but hide when scrolling + self.navigationItem.hidesSearchBarWhenScrolling = NO; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + self.navigationItem.hidesSearchBarWhenScrolling = YES; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // hide semi-transparent overlays above UITextField in UISearchBar to achive basic white color + UISearchController *searchController = self.navigationItem.searchController; + UISearchBar *searchBar = searchController.searchBar; + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + [searchTextFieldBackground.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.model.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *cellId = DWLocalMasternodeTableViewCell.dw_reuseIdentifier; + DWLocalMasternodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + + DSLocalMasternode *item = self.model.items[indexPath.row]; + [cell configureWithModel:item searchQuery:self.model.trimmedQuery]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSLocalMasternode *localMasternode = self.model.items[indexPath.row]; + + DWLocalMasternodeControlViewController *localMasternodeControlViewController = [[DWLocalMasternodeControlViewController alloc] initWithLocalMasternode:localMasternode]; + [self.navigationController pushViewController:localMasternodeControlViewController animated:YES]; +} + +#pragma mark - UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + NSString *query = searchController.searchBar.text ?: @""; + [self.model filterItemsWithSearchQuery:query]; + + [self.tableView reloadData]; +} + +#pragma mark - UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +#pragma mark - Private + +- (void)setupSearchController { + self.definesPresentationContext = YES; + + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; + searchController.searchResultsUpdater = self; + searchController.obscuresBackgroundDuringPresentation = NO; + self.navigationItem.searchController = searchController; + + UISearchBar *searchBar = searchController.searchBar; + searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchBar.searchBarStyle = UISearchBarStyleMinimal; + searchBar.delegate = self; + searchBar.tintColor = [UIColor dw_tintColor]; + searchBar.barTintColor = [UIColor dw_dashNavigationBlueColor]; + + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + searchTextField.tintColor = [UIColor dw_dashNavigationBlueColor]; + searchTextField.textColor = [UIColor dw_darkTitleColor]; + searchTextField.backgroundColor = [UIColor dw_backgroundColor]; + + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + searchTextFieldBackground.backgroundColor = [UIColor dw_backgroundColor]; + searchTextFieldBackground.layer.cornerRadius = 10.0; + searchTextFieldBackground.layer.masksToBounds = YES; +} + +- (void)setupView { + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 74.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.contentInset = UIEdgeInsetsMake(DWDefaultMargin(), 0.0, 0.0, 0.0); + + [self.tableView registerClass:DWLocalMasternodeTableViewCell.class + forCellReuseIdentifier:DWLocalMasternodeTableViewCell.dw_reuseIdentifier]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h new file mode 100644 index 000000000..b84bdf696 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h @@ -0,0 +1,33 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWLocalMasternodeListModel : NSObject + +@property (readonly, copy, nonatomic) NSArray *items; +@property (nullable, readonly, nonatomic, copy) NSString *trimmedQuery; + +- (void)filterItemsWithSearchQuery:(NSString *)query; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m new file mode 100644 index 000000000..ad761bdb7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m @@ -0,0 +1,114 @@ +// +// 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 "DWLocalMasternodeListModel.h" +#import "DWEnvironment.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListModel () + +@property (readonly, copy, nonatomic) NSArray *allItems; +@property (nullable, copy, nonatomic) NSArray *filteredItems; +@property (nullable, nonatomic, copy) NSString *trimmedQuery; +@property (nonatomic, assign, getter=isSearching) BOOL searching; + +@end + +@implementation DWLocalMasternodeListModel + +- (instancetype)init { + self = [super init]; + if (self) { + + _allItems = [self localMasternodes]; + } + + return self; +} + +- (NSArray *)localMasternodes { + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + DSMasternodeManager *masternodeManager = chain.chainManager.masternodeManager; + return [masternodeManager localMasternodes]; +} + +- (NSArray *)items { + if (self.isSearching) { + return self.filteredItems ?: @[]; + } + else { + return self.allItems; + } +} + +- (void)filterItemsWithSearchQuery:(NSString *)query { + self.searching = query.length > 0; + + NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet]; + NSString *trimmedQuery = [query stringByTrimmingCharactersInSet:whitespaces]; + self.trimmedQuery = trimmedQuery; + + NSPredicate *predicate = [self searchPredicateForTrimmedQuery:trimmedQuery]; + self.filteredItems = [self.allItems filteredArrayUsingPredicate:predicate]; +} + +#pragma mark - Private + +- (NSCompoundPredicate *)searchPredicateForTrimmedQuery:(NSString *)trimmedQuery { + NSArray *searchItems = [trimmedQuery componentsSeparatedByString:@" "]; + + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + for (NSString *searchString in searchItems) { + NSCompoundPredicate *orPredicate = [self findMatchesForString:searchString]; + [searchItemsPredicate addObject:orPredicate]; + } + + NSCompoundPredicate *andPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:searchItemsPredicate]; + + return andPredicate; +} + +- (NSCompoundPredicate *)findMatchesForString:(NSString *)searchString { + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + + DSLocalMasternode *item = nil; + NSArray *searchKeyPaths = @[ DW_KEYPATH(item, ipAddressString) ]; + + for (NSString *keyPath in searchKeyPaths) { + NSExpression *leftExpression = [NSExpression expressionForKeyPath:keyPath]; + NSExpression *rightExpression = [NSExpression expressionForConstantValue:searchString]; + NSComparisonPredicateOptions options = + NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption; + NSComparisonPredicate *comparisonPredicate = + [NSComparisonPredicate predicateWithLeftExpression:leftExpression + rightExpression:rightExpression + modifier:NSDirectPredicateModifier + type:NSContainsPredicateOperatorType + options:options]; + [searchItemsPredicate addObject:comparisonPredicate]; + } + + NSCompoundPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:searchItemsPredicate]; + + return orPredicate; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h new file mode 100644 index 000000000..ab9425b80 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateRegistrarTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "BRCopyLabel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *payToAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m new file mode 100644 index 000000000..359a301b9 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateRegistrarTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@implementation DWProviderUpdateRegistrarTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h new file mode 100644 index 000000000..dfccdda5f --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateServiceTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "BRCopyLabel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *locationLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorRewardPayoutAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m new file mode 100644 index 000000000..88fc0fd71 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateServiceTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTableViewCell.h" + +@implementation DWProviderUpdateServiceTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.h new file mode 100644 index 000000000..cfab7e34a --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.h @@ -0,0 +1,33 @@ +// +// 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 DSChain; + +@interface DWBaseMasternodeViewController : UITableViewController + +@property (nonatomic, strong) DSChain *chain; +@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; + +- (void)updateSearchString:(NSString *)searchString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.m new file mode 100644 index 000000000..7cbd2adc6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.m @@ -0,0 +1,162 @@ +// +// 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 "DWBaseMasternodeViewController.h" + +#import "DWEnvironment.h" +#import "DWMasternodeTableViewCell.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +static NSString *const DWBaseMasternodeViewControllerCellId = @"MasternodeTableViewCellIdentifier"; + +@interface DWBaseMasternodeViewController () + +@property (nullable, copy, nonatomic) NSString *searchString; + +@end + +@implementation DWBaseMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.chain = [DWEnvironment sharedInstance].currentChain; + + self.tableView.rowHeight = 93.0; + + UINib *nib = [UINib nibWithNibName:@"DWMasternodeTableViewCell" bundle:nil]; + NSParameterAssert(nib); + [self.tableView registerNib:nib forCellReuseIdentifier:DWBaseMasternodeViewControllerCellId]; +} + +- (void)updateSearchString:(NSString *)searchString { + self.searchString = searchString; + _fetchedResultsController = nil; + [self.tableView reloadData]; +} + +#pragma mark - FRC + +- (NSManagedObjectContext *)managedObjectContext { + return [NSManagedObject context]; +} + +- (NSPredicate *)searchPredicate { + // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain + if (self.searchString && ![self.searchString isEqualToString:@""]) { + if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { + NSArray *ipArray = [self.searchString componentsSeparatedByString:@"."]; + NSMutableArray *partPredicates = [NSMutableArray array]; + NSPredicate *chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + [partPredicates addObject:chainPredicate]; + for (int i = 0; i < MIN(ipArray.count, 4); i++) { + if ([ipArray[i] isEqualToString:@""]) + break; + NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24 - i * 8), @([ipArray[i] integerValue])]; + [partPredicates addObject:currentPartPredicate]; + } + + return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; + } + else { + return [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + } + } + else { + return [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + } +} + +- (NSFetchedResultsController *)fetchedResultsController { + if (_fetchedResultsController) + return _fetchedResultsController; + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + // Edit the entity name as appropriate. + NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; + [fetchRequest setEntity:entity]; + + // Set the batch size to a suitable number. + [fetchRequest setFetchBatchSize:20]; + + // Edit the sort key as appropriate. + NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; + NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; + NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; + NSArray *sortDescriptors = @[ claimSortDescriptor, addressSortDescriptor, portSortDescriptor ]; + + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSPredicate *filterPredicate = [self searchPredicate]; + [fetchRequest setPredicate:filterPredicate]; + + // Edit the section name key path and cache name if appropriate. + // nil for section name key path means "no sections". + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; + _fetchedResultsController = aFetchedResultsController; + NSError *error = nil; + if (![aFetchedResultsController performFetch:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return aFetchedResultsController; +} + + +#pragma mark - TableView + +- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if ([self.fetchedResultsController sections].count == 1 || section) { + return NSLocalizedString(@"Masternodes", nil); + } + else { + return NSLocalizedString(@"My Masternodes", nil); + } +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + return [sectionInfo numberOfObjects]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DWBaseMasternodeViewControllerCellId forIndexPath:indexPath]; + + [self configureCell:cell atIndexPath:indexPath]; + + return cell; +} + +- (void)configureCell:(DWMasternodeTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); + cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), simplifiedMasternodeEntryEntity.port]; + cell.outputLabel.text = [NSString stringWithFormat:@"%@", simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.h new file mode 100644 index 000000000..442ffb671 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.h @@ -0,0 +1,23 @@ +// +// DWMasternodeDetailViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode, DSSimplifiedMasternodeEntry; + +@interface DWMasternodeDetailViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, strong) DSSimplifiedMasternodeEntry *simplifiedMasternodeEntry; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.m new file mode 100644 index 000000000..8b4852365 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.m @@ -0,0 +1,181 @@ +// +// DWMasternodeDetailViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeDetailViewController.h" +#import "BRCopyLabel.h" +#import "DSLocalMasternode.h" +#import "DSSimplifiedMasternodeEntry.h" +#import "DWEnvironment.h" +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import "DWReclaimMasternodeViewController.h" +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWUpdateMasternodeServiceViewController.h" +#import + +@interface DWMasternodeDetailViewController () +@property (strong, nonatomic) IBOutlet UILabel *locationLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorPublicKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *ownerKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingAddressLabel; +@property (strong, nonatomic) IBOutlet UILabel *fundsInHoldingLabel; +@property (strong, nonatomic) IBOutlet UILabel *activeLabel; +@property (strong, nonatomic) IBOutlet UILabel *payToAddress; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpServTxLabel; +@property (strong, nonatomic) DSChain *chain; + +@end + +@implementation DWMasternodeDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.simplifiedMasternodeEntry.address.u32[3]; + + self.locationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), self.simplifiedMasternodeEntry.port]; + self.ownerKeyLabel.text = self.localMasternode.ownerKeysWallet ? @"SHOW" : @"NO"; + self.operatorKeyLabel.text = self.localMasternode.operatorKeysWallet ? @"SHOW" : @"NO"; + self.operatorPublicKeyLabel.text = uint384_hex(self.simplifiedMasternodeEntry.operatorPublicKey); + self.votingAddressLabel.text = self.simplifiedMasternodeEntry.votingAddress; + self.votingKeyLabel.text = self.localMasternode.votingKeysWallet ? @"SHOW" : @"NO"; + self.fundsInHoldingLabel.text = self.localMasternode.holdingKeysWallet ? @"YES" : @"NO"; + self.activeLabel.text = self.simplifiedMasternodeEntry.isValid ? @"YES" : @"NO"; + self.payToAddress.text = self.localMasternode.payoutAddress ? self.localMasternode.payoutAddress : @"Unknown"; + self.proRegTxLabel.text = uint256_hex(self.localMasternode.providerRegistrationTransaction.txHash); + self.proUpRegTxLabel.text = [NSString stringWithFormat:@"%lu", (unsigned long)self.localMasternode.providerUpdateRegistrarTransactions.count]; + self.proUpServTxLabel.text = [NSString stringWithFormat:@"%lu", (unsigned long)self.localMasternode.providerUpdateServiceTransactions.count]; + self.chain = [DWEnvironment sharedInstance].currentChain; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"UpdateMasternodeServiceSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWUpdateMasternodeServiceViewController *updateMasternodeServiceViewController = (DWUpdateMasternodeServiceViewController *)navigationController.topViewController; + updateMasternodeServiceViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"UpdateMasternodeRegistrarSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWUpdateMasternodeRegistrarViewController *updateMasternodeRegistrarViewController = (DWUpdateMasternodeRegistrarViewController *)navigationController.topViewController; + updateMasternodeRegistrarViewController.localMasternode = self.localMasternode; + updateMasternodeRegistrarViewController.simplifiedMasternodeEntry = self.simplifiedMasternodeEntry; + } + else if ([segue.identifier isEqualToString:@"ReclaimMasternodeSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWReclaimMasternodeViewController *reclaimMasternodeViewController = (DWReclaimMasternodeViewController *)navigationController.topViewController; + reclaimMasternodeViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"ShowProviderUpdateRegistrarTransactionsSegue"]) { + DWProviderUpdateRegistrarTransactionsViewController *providerUpdateRegistrarTransactionsViewController = segue.destinationViewController; + providerUpdateRegistrarTransactionsViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"ShowProviderUpdateServiceTransactionsSegue"]) { + DWProviderUpdateServiceTransactionsViewController *providerUpdateServiceTransactionsViewController = segue.destinationViewController; + providerUpdateServiceTransactionsViewController.localMasternode = self.localMasternode; + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 2: + if (self.localMasternode.ownerKeysWallet && [self.ownerKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Show owner key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.ownerKeyLabel.text = [[self.localMasternode ownerKeyFromSeed:seed] privateKeyStringForChain:self.chain]; + } + }]; + } + break; + case 3: + if (self.localMasternode.operatorKeysWallet && [self.operatorKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show operator key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.operatorKeyLabel.text = [self.localMasternode operatorKeyStringFromSeed:seed]; + } + }]; + } + break; + case 4: + if (self.localMasternode.operatorKeysWallet && [self.votingKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show voting key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.votingKeyLabel.text = [[self.localMasternode votingKeyFromSeed:seed] privateKeyStringForChain:self.chain]; + } + }]; + } + break; + + default: + break; + } + + } break; + case 1: { + switch (indexPath.row) { + case 0: { + if (!self.localMasternode) { + [self claimSimplifiedMasternodeEntry]; + } + } + default: + break; + } + } + default: + break; + } +} + +- (void)claimSimplifiedMasternodeEntry { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:[NSData dataWithUInt256:self.simplifiedMasternodeEntry.providerRegistrationTransactionHash].reverse.UInt256 + onChain:self.simplifiedMasternodeEntry.chain + completion:^(DSTransaction *transaction, NSError *error) { + if ([transaction isKindOfClass:[DSProviderRegistrationTransaction class]]) { + DSProviderRegistrationTransaction *providerRegistrationTransaction = (DSProviderRegistrationTransaction *)transaction; + DSLocalMasternode *localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction save:TRUE]; + } + }]; + + + // [self.moc performBlockAndWait:^{ // add the transaction to core data + // [DSChainEntity setContext:self.moc]; + // Class transactionEntityClass = [transaction entityClass]; + // [transactionEntityClass setContext:self.moc]; + // [DSTransactionHashEntity setContext:self.moc]; + // [DSAddressEntity setContext:self.moc]; + // if ([DSTransactionEntity countObjectsMatching:@"transactionHash.txHash == %@", uint256_data(txHash)] == 0) { + // + // DSTransactionEntity * transactionEntity = [transactionEntityClass managedObject]; + // [transactionEntity setAttributesFromTransaction:transaction]; + // [transactionEntityClass saveContext]; + // } + // }]; + + // uint32_t votingIndex; + // DSWallet * votingWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderVotingAuthenticationHash:self.simplifiedMasternodeEntry.keyIDVoting foundAtIndex:&votingIndex]; + // + // uint32_t operatorIndex; + // DSWallet * operatorWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderOperatorAuthenticationKey:self.simplifiedMasternodeEntry.operatorPublicKey foundAtIndex:&operatorIndex]; + // +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.h new file mode 100644 index 000000000..6bc561674 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.h @@ -0,0 +1,28 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeRootViewController : UITableViewController + ++ (instancetype)controller; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.m new file mode 100644 index 000000000..d6f443d61 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.m @@ -0,0 +1,55 @@ +// +// 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 "DWMasternodeRootViewController.h" + +@interface DWMasternodeRootViewController () + +@end + +@implementation DWMasternodeRootViewController + ++ (instancetype)controller { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWMasternodeRootViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MasternodeOverviewViewControllerIdentifier"]; + + return controller; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.h new file mode 100644 index 000000000..0a09df594 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.h @@ -0,0 +1,14 @@ +// +// DWMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWBaseMasternodeViewController.h" +#import + +@interface DWMasternodeViewController : DWBaseMasternodeViewController + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m new file mode 100644 index 000000000..8c0727718 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m @@ -0,0 +1,107 @@ +// +// DWMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeViewController.h" +#import "DWMasternodeDetailViewController.h" +#import "DWMasternodeTableViewCell.h" +#import "DWRegisterMasternodeViewController.h" +#import "DWResultsMasternodeViewController.h" +#import +#import + +static UITextField *TextFieldSubviewOfView(UIView *view) { + if ([view isKindOfClass:UITextField.class]) { + return (UITextField *)view; + } + else { + UITextField *textField = nil; + for (UIView *subview in view.subviews) { + textField = TextFieldSubviewOfView(subview); + if (textField) { + break; + } + } + return textField; + } +} + +@interface DWMasternodeViewController () + +@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; +@property (strong, nonatomic) UISearchController *searchController; +@property (strong, nonatomic) DWResultsMasternodeViewController *searchResultsController; + +@end + +@implementation DWMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.definesPresentationContext = YES; + + DWResultsMasternodeViewController *searchResultsController = [[DWResultsMasternodeViewController alloc] initWithStyle:UITableViewStyleGrouped]; + searchResultsController.tableView.delegate = self; + self.searchResultsController = searchResultsController; + + UIColor *dashBlueColor = [UIColor colorWithRed:0.0 green:141.0 / 255.0 blue:228.0 / 255.0 alpha:1.0]; + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; + searchController.searchResultsUpdater = self; + searchController.searchBar.delegate = self; + searchController.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchController.searchBar.searchBarStyle = UISearchBarStyleProminent; + searchController.searchBar.barTintColor = dashBlueColor; + searchController.searchBar.tintColor = [UIColor whiteColor]; + UITextField *searchTextField = TextFieldSubviewOfView(searchController.searchBar); + searchTextField.tintColor = dashBlueColor; + UIView *textfieldBackground = searchTextField.subviews.firstObject; + textfieldBackground.backgroundColor = [UIColor whiteColor]; + textfieldBackground.layer.cornerRadius = 10; + textfieldBackground.clipsToBounds = YES; + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = searchController; + self.navigationItem.hidesSearchBarWhenScrolling = NO; + } + else { + self.tableView.tableHeaderView = searchController.searchBar; + } + self.searchController = searchController; +} + +#pragma mark - Table view data source + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + DWMasternodeDetailViewController *masternodeDetailViewController = (DWMasternodeDetailViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"DWMasternodeDetailViewControllerId"]; + masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; + masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode ? [simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode] : nil; + [self.navigationController pushViewController:masternodeDetailViewController animated:YES]; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWRegisterMasternodeViewController *registerMasternodeViewController = (DWRegisterMasternodeViewController *)navigationController.topViewController; + } +} + +#pragma mark UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + [self.searchResultsController updateSearchString:searchController.searchBar.text]; +} + +#pragma mark UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.h new file mode 100644 index 000000000..b699c95cd --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTransactionsViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.m new file mode 100644 index 000000000..b925b4161 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.m @@ -0,0 +1,97 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@interface DWProviderUpdateRegistrarTransactionsViewController () + +@end + +@implementation DWProviderUpdateRegistrarTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateRegistrarTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *reuseIdentifier = @"RegistrarTransactionCellIdentifier"; + DWProviderUpdateRegistrarTableViewCell *cell = (DWProviderUpdateRegistrarTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateRegistrarTransaction *transaction = [self.localMasternode.providerUpdateRegistrarTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d", transaction.blockHeight]; + cell.operatorKeyLabel.text = [NSData dataWithUInt384:transaction.operatorKey].hexString; + cell.payToAddressLabel.text = [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]; + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.h new file mode 100644 index 000000000..8c8957dd9 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateServiceTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTransactionsViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.m new file mode 100644 index 000000000..c08f47fab --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.m @@ -0,0 +1,103 @@ +// +// DWProviderUpdateServiceTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import "DSLocalMasternode.h" +#import "DSProviderUpdateServiceTransaction.h" +#import "DWProviderUpdateServiceTableViewCell.h" +#import "NSData+Bitcoin.h" +#import "NSString+Dash.h" +#include + +@interface DWProviderUpdateServiceTransactionsViewController () + +@end + +@implementation DWProviderUpdateServiceTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateServiceTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *reuseIdentifier = @"ServiceTransactionCellIdentifier"; + DWProviderUpdateServiceTableViewCell *cell = (DWProviderUpdateServiceTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateServiceTransaction *transaction = [self.localMasternode.providerUpdateServiceTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d", transaction.blockHeight]; + cell.operatorRewardPayoutAddressLabel.text = (transaction.scriptPayout.length ? [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain] : @""); + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = transaction.ipAddress.u32[3]; + cell.locationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), self.localMasternode.port]; + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.h new file mode 100644 index 000000000..1431d2bd7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.h @@ -0,0 +1,21 @@ +// +// DWReclaimMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWReclaimMasternodeViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.m new file mode 100644 index 000000000..d705f1796 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.m @@ -0,0 +1,98 @@ +// +// DWReclaimMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWReclaimMasternodeViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWReclaimMasternodeViewController () + +@property (nonatomic, strong) DSAccount *account; + +@end + +@implementation DWReclaimMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 0; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return nil; + } + } + } + return nil; +} + +- (IBAction)reclaimMasternode:(id)sender { + [self.localMasternode reclaimTransactionToAccount:self.account + completion:^(DSTransaction *_Nonnull reclaimTransaction) { + if (reclaimTransaction) { + DSMasternodeHoldingsDerivationPath *derivationPath = [[DSDerivationPathFactory sharedInstance] providerFundsDerivationPathForWallet:self.localMasternode.holdingKeysWallet]; + [derivationPath signTransaction:reclaimTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:reclaimTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create Reclaim Transaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.h new file mode 100644 index 000000000..83dabcb38 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.h @@ -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 "DWBaseMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWResultsMasternodeViewController : DWBaseMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.m new file mode 100644 index 000000000..e5369cdd1 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.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 "DWResultsMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWResultsMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.h new file mode 100644 index 000000000..5b6416db8 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.h @@ -0,0 +1,20 @@ +// +// DWUpdateMasternodeRegistrarViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRegistrarViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, strong) DSSimplifiedMasternodeEntry *simplifiedMasternodeEntry; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.m new file mode 100644 index 000000000..7a68d0934 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.m @@ -0,0 +1,113 @@ +// +// DWUpdateMasternodeRegistrarViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWUpdateMasternodeRegistrarViewController () + +@property (nonatomic, strong) DWKeyValueTableViewCell *payoutTableViewCell; +@property (nonatomic, strong) DSAccount *account; +@property (nonatomic, strong) DSWallet *votingWallet; + +@end + +@implementation DWUpdateMasternodeRegistrarViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.payoutTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; + self.votingWallet = [DWEnvironment sharedInstance].currentWallet; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 1; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return self.payoutTableViewCell; + } + } + } + return nil; +} + +- (IBAction)updateMasternode:(id)sender { + UInt160 votingHash; + if (self.votingWallet) { + DSAuthenticationKeysDerivationPath *providerVotingKeysDerivationPath = [DSAuthenticationKeysDerivationPath providerVotingKeysDerivationPathForWallet:self.votingWallet]; + votingHash = providerVotingKeysDerivationPath.firstUnusedPublicKey.hash160; + } + else { + votingHash = self.simplifiedMasternodeEntry.keyIDVoting; + } + NSString *payoutAddress = (self.payoutTableViewCell.valueTextField.text && ![self.payoutTableViewCell.valueTextField.text isEqualToString:@""]) ? self.payoutTableViewCell.valueTextField.text : self.localMasternode.payoutAddress; + [self.localMasternode updateTransactionFundedByAccount:self.account + changeOperator:self.localMasternode.providerRegistrationTransaction.operatorKey + changeVotingKeyHash:votingHash + changePayoutAddress:payoutAddress + completion:^(DSProviderUpdateRegistrarTransaction *_Nonnull providerUpdateRegistrarTransaction) { + if (providerUpdateRegistrarTransaction) { + [self.account signTransaction:providerUpdateRegistrarTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateRegistrarTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.h new file mode 100644 index 000000000..3acabae16 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.h @@ -0,0 +1,17 @@ +// +// DWUpdateMasternodeRevocationViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRevocationViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.m new file mode 100644 index 000000000..06edaf7e1 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.m @@ -0,0 +1,27 @@ +// +// DWUpdateMasternodeRevocationViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRevocationViewController.h" + +@interface DWUpdateMasternodeRevocationViewController () + +@end + +@implementation DWUpdateMasternodeRevocationViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.h new file mode 100644 index 000000000..579adf8a6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.h @@ -0,0 +1,21 @@ +// +// DWUpdateMasternodeServiceViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWUpdateMasternodeServiceViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.m new file mode 100644 index 000000000..d078a9adf --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.m @@ -0,0 +1,120 @@ +// +// DWUpdateMasternodeServiceViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeServiceViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWUpdateMasternodeServiceViewController () + +@property (nonatomic, strong) DWKeyValueTableViewCell *ipAddressTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *portTableViewCell; +@property (nonatomic, strong) DSAccount *account; + +@end + +@implementation DWUpdateMasternodeServiceViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.localMasternode.ipAddress.u32[3]; + self.ipAddressTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%s", inet_ntop(AF_INET, &ipAddress, s, sizeof(s))]; + self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; + self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d", self.localMasternode.port]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 2; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return self.ipAddressTableViewCell; + case 1: + return self.portTableViewCell; + } + } + } + return nil; +} + +- (IBAction)updateMasternode:(id)sender { + NSString *ipAddressString = self.ipAddressTableViewCell.valueTextField.text; + NSString *portString = self.portTableViewCell.valueTextField.text; + UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + uint16_t port = [portString intValue]; + [self.localMasternode updateTransactionFundedByAccount:self.account + toIPAddress:ipAddress + port:port + payoutAddress:nil + completion:^(DSProviderUpdateServiceTransaction *_Nonnull providerUpdateServiceTransaction) { + if (providerUpdateServiceTransaction) { + [self.account signTransaction:providerUpdateServiceTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h new file mode 100644 index 000000000..b6a9d9dcb --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h @@ -0,0 +1,36 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@class DSAuthenticationKeysDerivationPath; + +@interface DWDerivationPathKeysViewController : UITableViewController + +@property (nonatomic, strong) DSAuthenticationKeysDerivationPath *derivationPath; + +- (instancetype)initWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m new file mode 100644 index 000000000..974c032d7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m @@ -0,0 +1,154 @@ +// +// 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 "DWDerivationPathKeysViewController.h" + +#import "DWDerivationPathKeysModel.h" +#import "DWDerivationPathKeysTableViewCell.h" +#import "DWSelectorFormTableViewCell.h" +#import "DWUIKit.h" +#import "UIView+DWHUD.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWDerivationPathKeysViewController () + +@property (readonly, nonatomic, strong) DWDerivationPathKeysModel *model; +@property (nonatomic, assign) NSInteger visibleIndexes; + +@end + +@implementation DWDerivationPathKeysViewController + +- (instancetype)initWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + _model = [[DWDerivationPathKeysModel alloc] initWithDerivationPath:derivationPath]; + self.derivationPath = derivationPath; + self.hidesBottomBarWhenPushed = YES; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.tableFooterView = [[UIView alloc] init]; + self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; + self.tableView.estimatedSectionHeaderHeight = 30.0; + + NSArray *cellClasses = @[ + DWSelectorFormTableViewCell.class, + DWDerivationPathKeysTableViewCell.class, + ]; + + for (Class cellClass in cellClasses) { + [self.tableView registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; + } + + self.visibleIndexes = [self.derivationPath firstUnusedIndex] + 1; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.visibleIndexes + 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + if (section == self.visibleIndexes) { + return 1; + } + else { + return _DWDerivationPathInfo_Count; + } +} + +- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + UITextView *labelTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + labelTextView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + labelTextView.textColor = [UIColor dw_darkTitleColor]; + labelTextView.userInteractionEnabled = FALSE; + labelTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + labelTextView.adjustsFontForContentSizeCategory = YES; + labelTextView.textAlignment = NSTextAlignmentCenter; + labelTextView.textContainerInset = UIEdgeInsetsMake(10, 0, 10, 0); + if (section == self.visibleIndexes) { + labelTextView.text = @" "; + } + else { + labelTextView.text = [NSString stringWithFormat:NSLocalizedString(@"Keypair %ld", nil), section]; + } + return labelTextView; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.section == self.visibleIndexes) { + NSString *cellId = DWSelectorFormTableViewCell.dw_reuseIdentifier; + DWSelectorFormTableViewCell *cell = (DWSelectorFormTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + cell.cellModel = self.model.loadMoreItem; + return cell; + } + else { + NSString *cellId = DWDerivationPathKeysTableViewCell.dw_reuseIdentifier; + DWDerivationPathKeysTableViewCell *cell = + (DWDerivationPathKeysTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + + NSInteger index = indexPath.section; + DWDerivationPathInfo info = indexPath.row; + id item = [self.model itemForInfo:info atIndex:index]; + cell.item = item; + + return cell; + } +} + +#pragma mark - UITableViewDataDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + if (indexPath.section == self.visibleIndexes) { + self.visibleIndexes += 1; + + [tableView beginUpdates]; + [tableView insertSections:[NSIndexSet indexSetWithIndex:self.visibleIndexes - 1] withRowAnimation:UITableViewRowAnimationAutomatic]; + [tableView endUpdates]; + + [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.visibleIndexes - 1] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + } + else { + DWDerivationPathKeysTableViewCell *cell = + (DWDerivationPathKeysTableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; + id item = cell.item; + [UIPasteboard generalPasteboard].string = item.detail; + + [self.view dw_showInfoHUDWithText:NSLocalizedString(@"Copied", nil)]; + } +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h similarity index 96% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h index 2051b0ec4..9bd6bcb06 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h @@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN @interface DWKeysOverviewViewController : UIViewController +//+ (instancetype)controller; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.h new file mode 100644 index 000000000..131b74eb0 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.h @@ -0,0 +1,30 @@ +// +// 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 + +@class DSKey; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignMessageViewController : UIViewController + +@property (nonatomic, strong) DSKey *key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.m new file mode 100644 index 000000000..efa336c08 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.m @@ -0,0 +1,55 @@ +// +// 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 "DWSignMessageViewController.h" +#import + +@interface DWSignMessageViewController () + +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; + +@end + +@implementation DWSignMessageViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (IBAction)sign:(id)sender { + NSMutableData *stringMessageData = [NSMutableData data]; + [stringMessageData appendString:DASH_MESSAGE_MAGIC]; + [stringMessageData appendString:self.signatureMessageInputTextView.text]; + NSData *data = nil; + + if ([self.key isKindOfClass:[DSBLSKey class]]) { + DSBLSKey *blsKey = (DSBLSKey *)_key; + [blsKey signDigest:stringMessageData.SHA256_2]; + } + else { + DSECDSAKey *ecdsaKey = (DSECDSAKey *)_key; + data = [ecdsaKey compactSign:stringMessageData.SHA256_2]; + } + + if (data) { + [self.signatureMessageResultTextView setText:[data base64EncodedStringWithOptions:0]]; + } +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h new file mode 100644 index 000000000..ab75399ee --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h @@ -0,0 +1,31 @@ +// +// 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 "DWBaseFormTableViewCell.h" + +@class DSSimplifiedMasternodeEntry; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeTableViewCell : DWBaseFormTableViewCell + +- (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model + searchQuery:(nullable NSString *)searchQuery; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m new file mode 100644 index 000000000..62a01d5f5 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -0,0 +1,203 @@ +// +// 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 "DWMasternodeTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "NSAttributedString+DWHighlightText.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +static CGFloat const ACCESSORY_RADIUS = 6.0f; +static CGSize const ACCESSORY_SIZE = {ACCESSORY_RADIUS * 2, ACCESSORY_RADIUS * 2}; + +@interface DWMasternodeTableViewCell () + +@property (readonly, strong, nonatomic) UILabel *addressLabel; +@property (readonly, strong, nonatomic) UILabel *portLabel; +@property (readonly, strong, nonatomic) UILabel *availabilityLabel; +@property (readonly, nonatomic, strong) UIView *accessoryValidityView; + +@property (nullable, nonatomic, strong) DSSimplifiedMasternodeEntry *model; +@property (nullable, nonatomic, copy) NSString *searchQuery; + +@end + +@implementation DWMasternodeTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *addressLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + addressLabel.translatesAutoresizingMaskIntoConstraints = NO; + addressLabel.backgroundColor = [UIColor dw_backgroundColor]; + addressLabel.textColor = [UIColor dw_darkTitleColor]; + addressLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + addressLabel.adjustsFontForContentSizeCategory = YES; + addressLabel.minimumScaleFactor = 0.5; + addressLabel.adjustsFontSizeToFitWidth = YES; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [addressLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:addressLabel]; + _addressLabel = addressLabel; + + UILabel *portLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + portLabel.translatesAutoresizingMaskIntoConstraints = NO; + portLabel.backgroundColor = [UIColor dw_backgroundColor]; + portLabel.textColor = [UIColor dw_quaternaryTextColor]; + portLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + portLabel.adjustsFontForContentSizeCategory = YES; + portLabel.minimumScaleFactor = 0.5; + portLabel.adjustsFontSizeToFitWidth = YES; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [portLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:portLabel]; + _portLabel = portLabel; + + UILabel *availabilityLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + availabilityLabel.translatesAutoresizingMaskIntoConstraints = NO; + availabilityLabel.backgroundColor = [UIColor dw_backgroundColor]; + availabilityLabel.textAlignment = NSTextAlignmentRight; + availabilityLabel.textColor = [UIColor dw_tertiaryTextColor]; + availabilityLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + availabilityLabel.adjustsFontForContentSizeCategory = YES; + availabilityLabel.minimumScaleFactor = 0.5; + availabilityLabel.adjustsFontSizeToFitWidth = YES; + [availabilityLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [availabilityLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [availabilityLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:availabilityLabel]; + _availabilityLabel = availabilityLabel; + + UIView *accessoryValidityView = [[UIView alloc] initWithFrame:CGRectMake(10, 20, 100, 100)]; + accessoryValidityView.layer.cornerRadius = ACCESSORY_RADIUS; + + accessoryValidityView.backgroundColor = [UIColor colorNamed:@"GreenColor"]; + + accessoryValidityView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:accessoryValidityView]; + _accessoryValidityView = accessoryValidityView; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [addressLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [addressLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [addressLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [portLabel.leadingAnchor constraintEqualToAnchor:addressLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [portLabel.firstBaselineAnchor constraintEqualToAnchor:addressLabel.firstBaselineAnchor], + + [availabilityLabel.firstBaselineAnchor constraintEqualToAnchor:addressLabel.firstBaselineAnchor], + [availabilityLabel.leadingAnchor constraintEqualToAnchor:portLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + + [accessoryValidityView.leadingAnchor constraintEqualToAnchor:availabilityLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING * 2 / 3], + [accessoryValidityView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [accessoryValidityView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor + constant:2], + [accessoryValidityView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], + [accessoryValidityView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], + ]]; + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(contentSizeCategoryDidChangeNotification) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model + searchQuery:(nullable NSString *)searchQuery { + self.model = model; + self.searchQuery = searchQuery; + + [self reloadAttributedData]; +} + +- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +#pragma mark - Private + +- (void)contentSizeCategoryDidChangeNotification { + [self reloadAttributedData]; +} + +- (void)reloadAttributedData { + NSString *highlightedText = self.searchQuery; + UIColor *highlightedTextColor = [UIColor dw_dashBlueColor]; + + UIFont *addressFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + UIColor *addressColor = [UIColor dw_darkTitleColor]; + self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + font:addressFont + textColor:addressColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *portFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *portColor = [UIColor dw_quaternaryTextColor]; + self.portLabel.attributedText = [NSAttributedString attributedText:self.model.portString + font:portFont + textColor:portColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *availabilityColor = [UIColor dw_quaternaryTextColor]; + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString + font:availabilityFont + textColor:availabilityColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + self.accessoryValidityView.backgroundColor = self.model.isValid ? [UIColor colorNamed:@"GreenColor"] : [UIColor colorNamed:@"RedColor"]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib new file mode 100644 index 000000000..8c6a119c7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h new file mode 100644 index 000000000..2d4f9d561 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h @@ -0,0 +1,26 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m new file mode 100644 index 000000000..bc0ca7c52 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m @@ -0,0 +1,180 @@ +// +// 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 "DWMasternodeListViewController.h" +#import + +#import "DWMasternodeListModel.h" + +#import "DWMasternodeTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "UIView+DWRecursiveSubview.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListViewController () + +@property (nonatomic, strong) DWMasternodeListModel *model; + +@end + +@implementation DWMasternodeListViewController + +- (instancetype)init { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + self.title = NSLocalizedString(@"Masternode List", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.model = [[DWMasternodeListModel alloc] init]; + + [self setupView]; + [self setupSearchController]; + + [self.tableView reloadData]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // show search bar initially, but hide when scrolling + self.navigationItem.hidesSearchBarWhenScrolling = NO; + + const NSUInteger selectedIndex = self.model.selectedIndex; + if (selectedIndex != NSNotFound) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0]; + [self.tableView scrollToRowAtIndexPath:indexPath + atScrollPosition:UITableViewScrollPositionMiddle + animated:NO]; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + self.navigationItem.hidesSearchBarWhenScrolling = YES; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // hide semi-transparent overlays above UITextField in UISearchBar to achive basic white color + UISearchController *searchController = self.navigationItem.searchController; + UISearchBar *searchBar = searchController.searchBar; + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + [searchTextFieldBackground.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.model.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *cellId = DWMasternodeTableViewCell.dw_reuseIdentifier; + DWMasternodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + + DSSimplifiedMasternodeEntry *item = self.model.items[indexPath.row]; + const BOOL selected = indexPath.row == self.model.selectedIndex; + [cell configureWithModel:item searchQuery:self.model.trimmedQuery]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSSimplifiedMasternodeEntry *item = self.model.items[indexPath.row]; + [self.model selectItem:item]; + + [self.tableView reloadRowsAtIndexPaths:self.tableView.indexPathsForVisibleRows + withRowAnimation:UITableViewRowAnimationNone]; +} + +#pragma mark - UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + NSString *query = searchController.searchBar.text ?: @""; + [self.model filterItemsWithSearchQuery:query]; + + [self.tableView reloadData]; +} + +#pragma mark - UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +#pragma mark - Private + +- (void)setupSearchController { + self.definesPresentationContext = YES; + + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; + searchController.searchResultsUpdater = self; + searchController.obscuresBackgroundDuringPresentation = NO; + self.navigationItem.searchController = searchController; + + UISearchBar *searchBar = searchController.searchBar; + searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchBar.searchBarStyle = UISearchBarStyleMinimal; + searchBar.delegate = self; + searchBar.tintColor = [UIColor dw_tintColor]; + searchBar.barTintColor = [UIColor dw_dashNavigationBlueColor]; + + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + searchTextField.tintColor = [UIColor dw_dashNavigationBlueColor]; + searchTextField.textColor = [UIColor dw_darkTitleColor]; + searchTextField.backgroundColor = [UIColor dw_backgroundColor]; + + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + searchTextFieldBackground.backgroundColor = [UIColor dw_backgroundColor]; + searchTextFieldBackground.layer.cornerRadius = 10.0; + searchTextFieldBackground.layer.masksToBounds = YES; +} + +- (void)setupView { + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 74.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.contentInset = UIEdgeInsetsMake(DWDefaultMargin(), 0.0, 0.0, 0.0); + + [self.tableView registerClass:DWMasternodeTableViewCell.class + forCellReuseIdentifier:DWMasternodeTableViewCell.dw_reuseIdentifier]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h new file mode 100644 index 000000000..bbb65be19 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h @@ -0,0 +1,36 @@ +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +@class DSSimplifiedMasternodeEntry; + +@interface DWMasternodeListModel : NSObject + +@property (readonly, copy, nonatomic) NSArray *items; +@property (nullable, readonly, nonatomic, copy) NSString *trimmedQuery; +@property (readonly, nonatomic, assign) NSUInteger selectedIndex; + +- (void)selectItem:(DSSimplifiedMasternodeEntry *)item; + +- (void)filterItemsWithSearchQuery:(NSString *)query; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m new file mode 100644 index 000000000..207c54834 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -0,0 +1,120 @@ +// +// 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 "DWMasternodeListModel.h" +#import "DWEnvironment.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListModel () + +@property (readonly, copy, nonatomic) NSArray *allItems; +@property (nullable, copy, nonatomic) NSArray *filteredItems; +@property (nullable, nonatomic, copy) NSString *trimmedQuery; +@property (nonatomic, assign, getter=isSearching) BOOL searching; +@property (nonatomic, assign) NSUInteger selectedIndex; + +@end + +@implementation DWMasternodeListModel + +- (instancetype)init { + self = [super init]; + if (self) { + + _selectedIndex = NSNotFound; + + _allItems = [[self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues sortedArrayUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:@"ipAddressIsValidIPV4" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"ipAddressNumber" ascending:YES] ]]; + } + return self; +} + +- (DSMasternodeList *)currentMasternodeList { + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + DSMasternodeManager *masternodeManager = chain.chainManager.masternodeManager; + return masternodeManager.currentMasternodeList; +} + +- (NSArray *)items { + if (self.isSearching) { + return self.filteredItems ?: @[]; + } + else { + return self.allItems; + } +} + +- (void)selectItem:(DSSimplifiedMasternodeEntry *)item { + self.selectedIndex = [_allItems indexOfObject:item]; +} + +- (void)filterItemsWithSearchQuery:(NSString *)query { + self.searching = query.length > 0; + + NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet]; + NSString *trimmedQuery = [query stringByTrimmingCharactersInSet:whitespaces]; + self.trimmedQuery = trimmedQuery; + + NSPredicate *predicate = [self searchPredicateForTrimmedQuery:trimmedQuery]; + self.filteredItems = [self.allItems filteredArrayUsingPredicate:predicate]; +} + +#pragma mark - Private + +- (NSCompoundPredicate *)searchPredicateForTrimmedQuery:(NSString *)trimmedQuery { + NSArray *searchItems = [trimmedQuery componentsSeparatedByString:@" "]; + + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + for (NSString *searchString in searchItems) { + NSCompoundPredicate *orPredicate = [self findMatchesForString:searchString]; + [searchItemsPredicate addObject:orPredicate]; + } + + NSCompoundPredicate *andPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:searchItemsPredicate]; + + return andPredicate; +} + +- (NSCompoundPredicate *)findMatchesForString:(NSString *)searchString { + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + + DSSimplifiedMasternodeEntry *item = nil; + NSArray *searchKeyPaths = @[ DW_KEYPATH(item, host), DW_KEYPATH(item, validString) ]; + + for (NSString *keyPath in searchKeyPaths) { + NSExpression *leftExpression = [NSExpression expressionForKeyPath:keyPath]; + NSExpression *rightExpression = [NSExpression expressionForConstantValue:searchString]; + NSComparisonPredicateOptions options = + NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption; + NSComparisonPredicate *comparisonPredicate = + [NSComparisonPredicate predicateWithLeftExpression:leftExpression + rightExpression:rightExpression + modifier:NSDirectPredicateModifier + type:NSContainsPredicateOperatorType + options:options]; + [searchItemsPredicate addObject:comparisonPredicate]; + } + + NSCompoundPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:searchItemsPredicate]; + + return orPredicate; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h new file mode 100644 index 000000000..af7b9bfaa --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h @@ -0,0 +1,22 @@ +// +// DWRegisterMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWRegisterMasternodeViewController : KVOUIViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m new file mode 100644 index 000000000..754902156 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -0,0 +1,439 @@ +// +// DWRegisterMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWRegisterMasternodeViewController.h" +#import "DWEnvironment.h" +#import "DWFormTableViewController.h" +#import "DWKeyValueFormTableViewCell.h" +#import "DWMasternodeRegistrationModel.h" +#import "DWPublicKeyGenerationTableViewCell.h" +#import "DWSignPayloadModel.h" +#import "DWSignPayloadViewController.h" +#import "DWUIKit.h" + +#define INPUT_CELL_HEIGHT 75 +#define PUBLIC_KEY_CELL_HEIGHT 150 + +typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCell) { + DWMasternodeRegistrationCell_CollateralTx, + DWMasternodeRegistrationCell_CollateralIndex, + DWMasternodeRegistrationCell_IPAddress, + DWMasternodeRegistrationCell_Port, + DWMasternodeRegistrationCell_PayoutAddress, + DWMasternodeRegistrationCell_OwnerKey, + DWMasternodeRegistrationCell_OperatorKey, + DWMasternodeRegistrationCell_VotingKey, + _DWMasternodeRegistrationCell_Count, +}; + +typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCellType) { + DWMasternodeRegistrationCellType_InputValue, + DWMasternodeRegistrationCellType_PublicKey, +}; + +@interface DWRegisterMasternodeViewController () + +@property (null_resettable, nonatomic, strong) DWMasternodeRegistrationModel *model; +@property (nonatomic, strong) DWActionFormCellModel *registerActionModel; +@property (nonatomic, strong) DWFormTableViewController *formController; + +@end + +@implementation DWRegisterMasternodeViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + self.title = NSLocalizedString(@"Registration", nil); + self.hidesBottomBarWhenPushed = YES; + } + return self; +} + +- (DWMasternodeRegistrationModel *)model { + if (_model == nil) { + _model = [[DWMasternodeRegistrationModel alloc] initForAccount:[DWEnvironment sharedInstance].currentAccount]; + } + + return _model; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Data Source + +- (NSString *)titleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: + return NSLocalizedString(@"Collateral Tx", nil); + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Collateral Index", nil); + case DWMasternodeRegistrationCell_IPAddress: + return NSLocalizedString(@"IP Address", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Port", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Payout Address", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Owner Private Key", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Operator Public Key", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Voting Public Key", nil); + } + return @""; +} + +- (NSString *)placeholderForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: + return NSLocalizedString(@"Enter Transaction Hash", nil); + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Enter Transaction Index", nil); + case DWMasternodeRegistrationCell_IPAddress: + return NSLocalizedString(@"Enter IP Address of Masternode", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Enter Port of Masternode", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Enter Payout Address", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Enter Owner Private Key", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Enter Operator Public Key", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Enter Voting Public Key", nil); + } + return @""; +} + +- (NSString *)actionForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Default", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Use Wallet", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Use Wallet", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Use Wallet", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Use Wallet", nil); + default: + return nil; + } +} + +- (BOOL)resignCellsFirstResponders { + BOOL resigned = FALSE; + for (UITableViewCell *cell in self.formController.tableView.visibleCells) { + resigned |= [cell resignFirstResponder]; + } + return resigned; +} + +- (void (^)(void))actionBlockForModel:(DWKeyValueFormCellModel *)model forCellAtRow:(NSUInteger)row { + __weak __typeof(self) weakSelf = self; + __weak __typeof(model) weakModel = model; + switch (row) { + case DWMasternodeRegistrationCell_CollateralIndex: + return ^{ + __strong __typeof(weakSelf) strongSelf = weakSelf; + + if (!strongSelf) { + return; + } + [strongSelf resignCellsFirstResponders]; + [strongSelf.model lookupIndexesForCollateralHash:strongSelf.model.collateral.hash + completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + if (error) { + //todo display error message + } + else if ([indexSet count] == 0) { + } + else { + strongModel.valueText = [NSString stringWithFormat:@"%lu", (unsigned long)[indexSet firstIndex]]; + } + }]; + }; + case DWMasternodeRegistrationCell_Port: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; + }; + case DWMasternodeRegistrationCell_PayoutAddress: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [[DWEnvironment sharedInstance].currentAccount receiveAddress]; + }; + case DWMasternodeRegistrationCell_OwnerKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + @autoreleasepool { + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + DSKey *key = [ownerDerivationPath firstUnusedPrivateKeyFromSeed:seed]; + strongModel.valueText = key.secretKeyString; + } + }; + case DWMasternodeRegistrationCell_OperatorKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; + NSData *key = [operatorDerivationPath firstUnusedPublicKey]; + strongModel.valueText = key.hexString; + }; + case DWMasternodeRegistrationCell_VotingKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *voterDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; + NSData *key = [voterDerivationPath firstUnusedPublicKey]; + strongModel.valueText = key.hexString; + }; + default: + return nil; + } +} + +- (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { + NSString *actionText = [self actionForCellAtRow:row]; + DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; + if (actionText) { + model.actionBlock = [self actionBlockForModel:model forCellAtRow:row]; + } + __weak __typeof(self.model) weakModel = self.model; + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.collateral = ((DSUTXO){.hash = [value hexToData].UInt256, .n = strongModel.collateral.n}); + }]; + break; + } + case DWMasternodeRegistrationCell_CollateralIndex: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.collateral = ((DSUTXO){.hash = strongModel.collateral.hash, .n = [value intValue]}); + }]; + break; + } + case DWMasternodeRegistrationCell_IPAddress: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + [strongModel setIpAddressFromString:value]; + }]; + break; + } + case DWMasternodeRegistrationCell_Port: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.port = value.intValue; + }]; + break; + } + case DWMasternodeRegistrationCell_PayoutAddress: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.payoutAddress = value; + }]; + break; + } + case DWMasternodeRegistrationCell_OwnerKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.ownerKey = [DSECDSAKey keyWithPrivateKey:value onChain:[[DWEnvironment sharedInstance] currentChain]]; + }]; + break; + } + case DWMasternodeRegistrationCell_OperatorKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.operatorKey = [DSBLSKey keyWithPublicKey:[value hexToData].UInt384]; + }]; + break; + } + case DWMasternodeRegistrationCell_VotingKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.votingKey = [DSECDSAKey keyWithPublicKeyData:[value hexToData]]; + }]; + break; + } + } + + return model; +} + +- (NSArray *)items { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeRegistrationCell_Count; i++) { + [items addObject:[self modelForRow:i]]; + } + + return items; +} + +- (DWBaseFormCellModel *)registerActionModel { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + + [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + if (error) { + return; + } + [self.model registerMasternode:self + requestsPayloadSigning:^{ + [self showPayloadSigning]; + } + completion:^(NSError *_Nonnull error){ + + }]; + [self showPayloadSigning]; + }]; + }; + self.registerActionModel = registerModel; + return registerModel; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + DWFormSectionModel *registerSection = [[DWFormSectionModel alloc] init]; + registerSection.items = @[ [self registerActionModel] ]; + + return @[ section, registerSection ]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (void)showPayloadSigning { + DWSignPayloadModel *signPayloadModel = [[DWSignPayloadModel alloc] initForCollateralAddress:self.model.collateralTransaction.outputAddresses[self.model.providerRegistrationTransaction.collateralOutpoint.n] withPayloadCollateralString:self.model.providerRegistrationTransaction.payloadCollateralString]; + DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] initWithModel:signPayloadModel]; + __weak __typeof(self.model) weakModel = self.model; + __weak __typeof(self) weakSelf = self; + [signPayloadModel mvvm_observe:DW_KEYPATH(signPayloadModel, signature) + with:^(__typeof(self) self, NSData *signature) { + __strong __typeof(weakModel) strongModel = weakModel; + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf || !strongModel) { + return; + } + strongModel.providerRegistrationTransaction.payloadSignature = signature; + strongSelf.registerActionModel.title = NSLocalizedString(@"Register", nil); + strongSelf.registerActionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + [strongModel signTransactionInputsWithCompletion:^(NSError *_Nonnull error) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf.navigationController popViewControllerAnimated:YES]; + }]; + }; + }]; + [self.navigationController pushViewController:signPayloadViewController animated:YES]; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h new file mode 100644 index 000000000..455e47cda --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -0,0 +1,59 @@ +// +// 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeRegistrationModel : NSObject + +@property (nonatomic, strong) DSECDSAKey *ownerKey; +@property (nonatomic, strong) DSBLSKey *operatorKey; +@property (nonatomic, strong) DSECDSAKey *votingKey; + +@property (nonatomic, assign) uint32_t ownerKeyIndex; +@property (nonatomic, assign) uint32_t operatorKeyIndex; +@property (nonatomic, assign) uint32_t votingKeyIndex; + +@property (nonatomic, assign) UInt128 ipAddress; +@property (nonatomic, assign) uint16_t port; + +@property (nonatomic, assign) DSUTXO collateral; + +@property (nonatomic, readonly) DSTransaction *collateralTransaction; +@property (nonatomic, readonly) DSProviderRegistrationTransaction *providerRegistrationTransaction; + +@property (nonatomic, strong) NSString *payoutAddress; + +- (instancetype)initForAccount:(DSAccount *)account NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +- (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion; + +- (void)signTransactionInputsWithCompletion:(void (^_Nullable)(NSError *error))completion; + +- (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction *transaction, NSIndexSet *indexSet, NSError *error))completion; + +- (void)setIpAddressFromString:(NSString *)ipAddressString; + +- (void)findCollateralTransactionWithCompletion:(void (^_Nullable)(NSError *error))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m new file mode 100644 index 000000000..19ec8b19b --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -0,0 +1,237 @@ +// +// 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 "DWMasternodeRegistrationModel.h" +#include + +@interface DWMasternodeRegistrationModel () + +@property (nonatomic, strong) DSWallet *wallet; +@property (nonatomic, strong) DSAccount *account; + +@property (nonatomic, strong) DSTransaction *collateralTransaction; +@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; + +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *ownerDerivationPath; +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *votingDerivationPath; +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *operatorDerivationPath; + +@end + +@implementation DWMasternodeRegistrationModel + +- (instancetype)initForAccount:(DSAccount *)account { + self = [super init]; + if (self) { + _wallet = account.wallet; + _account = account; + _port = _wallet.chain.standardPort; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + _ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:_wallet]; + _votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:_wallet]; + _operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:_wallet]; + } + return self; +} + +- (void)setOperatorKeyIndex:(uint32_t)operatorKeyIndex { + _operatorKeyIndex = operatorKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _operatorKey = (DSBLSKey *)[self.operatorDerivationPath privateKeyAtIndex:operatorKeyIndex fromSeed:seed]; + } +} + +- (void)setOwnerKeyIndex:(uint32_t)ownerKeyIndex { + _ownerKeyIndex = ownerKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _ownerKey = (DSECDSAKey *)[self.ownerDerivationPath privateKeyAtIndex:ownerKeyIndex fromSeed:seed]; + } +} + +- (void)setVotingKeyIndex:(uint32_t)votingKeyIndex { + _votingKeyIndex = votingKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _votingKey = (DSECDSAKey *)[self.votingDerivationPath privateKeyAtIndex:votingKeyIndex fromSeed:seed]; + } +} + +- (void)setOperatorKey:(DSBLSKey *)operatorKey { + _operatorKey = operatorKey; + NSString *address = [operatorKey addressForChain:_wallet.chain]; + _operatorKeyIndex = [self.operatorDerivationPath indexOfKnownAddress:address]; +} + +- (void)setOwnerKey:(DSECDSAKey *)ownerKey { + _ownerKey = ownerKey; + NSString *address = [ownerKey addressForChain:_wallet.chain]; + _ownerKeyIndex = [self.ownerDerivationPath indexOfKnownAddress:address]; +} + +- (void)setVotingKey:(DSECDSAKey *)votingKey { + _votingKey = votingKey; + NSString *address = [votingKey addressForChain:_wallet.chain]; + _votingKeyIndex = [self.votingDerivationPath indexOfKnownAddress:address]; +} + +- (void)setIpAddressFromString:(NSString *)ipAddressString { + UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + } + self.ipAddress = ipAddress; +} + +- (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction *transaction, NSIndexSet *indexSet, NSError *error))completion { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:self.collateral.hash + onChain:self.account.wallet.chain + completion:^(DSTransaction *transaction, NSError *error) { + if (error) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, nil, [NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Network error", nil)}]); + }); + return; + } + if (!transaction) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, nil, [NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction could not be found", nil)}]); + }); + return; + } + NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + if ([obj isEqual:@(MASTERNODE_COST)]) + return TRUE; + return FALSE; + }]; + if ([indexSet count]) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, indexSet, nil); + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, nil, nil); + }); + } + }]; +} + +- (void)findCollateralTransactionWithCompletion:(void (^_Nullable)(NSError *error))completion { + if (self.collateralTransaction) { + if (completion) { + completion(nil); + } + return; + } + if (!dsutxo_is_zero(self.collateral)) { + [self lookupIndexesForCollateralHash:self.collateral.hash + completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { + if (error) { + if (completion) { + completion(error); + } + return; + } + if ([indexSet containsIndex:self.collateral.n]) { + self.collateralTransaction = transaction; + if (completion) { + completion(nil); + } + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Incorrect collateral", nil)}]); + } + } + }]; + } +} + +- (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion { + + + DSMasternodeManager *masternodeManager = self.wallet.chain.chainManager.masternodeManager; + + DSLocalMasternode *masternode = [masternodeManager createNewMasternodeWithIPAddress:self.ipAddress onPort:self.port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:self.operatorKeyIndex operatorPublicKey:self.operatorKey inOwnerWallet:self.wallet ownerWalletIndex:self.ownerKeyIndex ownerPrivateKey:self.ownerKey inVotingWallet:self.wallet votingWalletIndex:self.votingKeyIndex votingKey:self.votingKey]; + + // NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; + + + // DSUTXO collateral = DSUTXO_ZERO; + // UInt256 nonReversedCollateralHash = UINT256_ZERO; + // NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; + // if (![collateralTransactionHash isEqual:@""]) { + // NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; + // if (collateralTransactionHashData.length != 32) + // return; + // collateral.hash = collateralTransactionHashData.reverse.UInt256; + // + // nonReversedCollateralHash = collateralTransactionHashData.UInt256; + // collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; + // } + + + [masternode registrationTransactionFundedByAccount:self.account + toAddress:self.payoutAddress + withCollateral:self.collateral + completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { + if (providerRegistrationTransaction) { + self.providerRegistrationTransaction = providerRegistrationTransaction; + if (dsutxo_is_zero(self.collateral)) { + [self signTransactionInputsWithCompletion:completion]; + } + else { + payloadSigningRequest(); + } + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Unable to create ProviderRegistrationTransaction.", nil)}]); + } + } + }]; +} + +- (void)signTransactionInputsWithCompletion:(void (^_Nullable)(NSError *error))completion { + [self.account signTransaction:self.providerRegistrationTransaction + withPrompt:NSLocalizedString(@"Would you like to register this masternode?", nil) + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.account.wallet.chain.chainManager.transactionManager publishTransaction:self.providerRegistrationTransaction + completion:^(NSError *_Nullable error) { + if (completion) { + completion(error); + } + }]; + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction was not signed.", nil)}]); + } + } + }]; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard new file mode 100644 index 000000000..220805786 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard @@ -0,0 +1,1409 @@ + + + + + + + + + + + + Montserrat-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h new file mode 100644 index 000000000..d0194222d --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h @@ -0,0 +1,39 @@ +// +// DWSignPayloadViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// 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 "DWSignPayloadModel.h" +#import +#import + +@class DSProviderRegistrationTransaction; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignPayloadViewController : DWBaseActionButtonViewController + +@property (nonatomic, readonly) DWSignPayloadModel *model; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +- (instancetype)initWithModel:(DWSignPayloadModel *)model NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m new file mode 100644 index 000000000..6fd63cc45 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -0,0 +1,111 @@ +// +// DWSignPayloadViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import "DSAccount.h" +#import "DSECDSAKey.h" +#import "DSProviderRegistrationTransaction.h" +#import "DSWallet.h" +#import "DWSignPayloadView.h" +#import "NSData+Bitcoin.h" +#import "NSMutableData+Dash.h" +#import "NSString+Dash.h" + +@interface DWSignPayloadViewController () + +@property (nonatomic, strong) DWSignPayloadModel *model; +@property (nonatomic, strong) DWSignPayloadView *contentView; + +@end + +@implementation DWSignPayloadViewController + + +- (instancetype)initWithModel:(DWSignPayloadModel *)model { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + self.hidesBottomBarWhenPushed = YES; + _model = model; + } + return self; +} + + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self setupView]; +} + +- (NSString *)actionButtonTitle { + return NSLocalizedString(@"Verify Signature", nil); +} + +- (void)actionButtonAction:(id)sender { + [self.contentView resignFirstResponder]; + BOOL signatureVerified = [self.model verifySignature]; + if (signatureVerified) { + [self.navigationController popViewControllerAnimated:YES]; + } +} + + +- (void)setupView { + self.title = NSLocalizedString(@"External Sign", nil); + self.actionButton.enabled = YES; + + NSParameterAssert(self.model); + + DWSignPayloadView *contentView = [[DWSignPayloadView alloc] initWithFrame:CGRectZero]; + contentView.model = self.model; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + [self setupContentView:contentView]; + self.contentView = contentView; +} + + +- (void)setupObserving { +} + +//- (IBAction)sign:(id)sender { +// +// if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { +// NSData *signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; +// DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; +// NSString *address = [key addressForChain:self.providerRegistrationTransaction.chain]; +// if ([address isEqualToString:self.collateralAddress]) { +// [self.delegate viewController:self didReturnSignature:signature]; +// } +// else { +// NSLog(@"Not matching signature"); +// } +// } +// else { +// DSAccount *account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; +// +// +// DSFundsDerivationPath *derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; +// +// NSIndexPath *indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; +// +// [account.wallet seedWithPrompt:@"Sign?" +// forAmount:0 +// completion:^(NSData *_Nullable seed, BOOL cancelled) { +// if (seed && !cancelled) { +// DSECDSAKey *key = (DSECDSAKey *)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; +// NSData *data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; +// [self.delegate viewController:self didReturnSignature:data]; +// } +// }]; +// } +//} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h new file mode 100644 index 000000000..b1b90a057 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h @@ -0,0 +1,41 @@ +// +// 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignPayloadModel : KVONSObject + +@property (nonatomic, strong) NSString *collateralAddress; +@property (nonatomic, strong) NSString *payloadCollateralString; +@property (nonatomic, strong) NSString *unverifiedSignatureString; +@property (nonatomic, strong) NSString *instructionStringForCopying; +@property (nonatomic, strong) NSString *instructionStringForSigning; +@property (nonatomic, strong) NSString *instructionStringForPasting; +@property (nonatomic, strong) NSData *signature; + +- (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +- (BOOL)verifySignature; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m new file mode 100644 index 000000000..4893c002c --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m @@ -0,0 +1,53 @@ +// +// 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 "DWSignPayloadModel.h" +#import "DWEnvironment.h" +#import + +@implementation DWSignPayloadModel + +- (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString { + self = [super init]; + if (self) { + _collateralAddress = collateralAddress; + _payloadCollateralString = payloadCollateralString; + _instructionStringForCopying = NSLocalizedString(@"Please copy the following message.", nil); + _instructionStringForSigning = NSLocalizedString(@"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet.", nil); + _instructionStringForPasting = NSLocalizedString(@"Please paste the signature response from your wallet holding the collateral below.", nil); + } + return self; +} + +- (void)setSignatureFromString:(NSString *)signatureString { + self.signature = [[NSData alloc] initWithBase64EncodedString:signatureString options:0]; +} + + +- (BOOL)verifySignature { + NSData *unverifiedSignature = [[NSData alloc] initWithBase64EncodedString:self.unverifiedSignatureString options:0]; + DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:unverifiedSignature andMessageDigest:[self.payloadCollateralString magicDigest]]; + NSString *address = [key addressForChain:[DWEnvironment sharedInstance].currentChain]; + BOOL verified = [address isEqualToString:self.collateralAddress]; + if (verified) { + self.signature = unverifiedSignature; + } + return verified; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h new file mode 100644 index 000000000..cd6fb89c0 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h @@ -0,0 +1,32 @@ +// +// 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 "DWSignPayloadModel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignPayloadView : UIView + +@property (nullable, nonatomic, strong) DWSignPayloadModel *model; + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m new file mode 100644 index 000000000..7ea50ca65 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -0,0 +1,218 @@ +// +// 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 "DWSignPayloadView.h" +#import "DWUIKit.h" + +CGFloat const DW_SIGNED_PAYLOAD_TOP_PADDING = 12.0; +CGFloat const DW_SIGNED_PAYLOAD_INTER_PADDING = 12.0; +CGFloat const DW_SIGNED_PAYLOAD_BOTTOM_PADDING = 12.0; +CGFloat const DW_STEP_HEIGHT = 24.0; + +@interface DWSignPayloadView () + +@property (nonatomic, strong) UITextView *messageToSignTextView; +@property (nonatomic, strong) UITextView *signedMessageInputTextView; +@property (nonatomic, strong) UILabel *instructionForCopyingLabel; +@property (nonatomic, strong) UILabel *instructionForSigningLabel; +@property (nonatomic, strong) UILabel *instructionForPastingLabel; +@property (nonatomic, strong) UILabel *step1Label; +@property (nonatomic, strong) UILabel *step2Label; +@property (nonatomic, strong) UILabel *step3Label; + +@end + + +@implementation DWSignPayloadView + + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + + UILabel *step1Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step1Label.translatesAutoresizingMaskIntoConstraints = NO; + step1Label.backgroundColor = [UIColor clearColor]; + step1Label.numberOfLines = 1; + step1Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step1Label]; + _step1Label = step1Label; + + + UILabel *instructionForCopyingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForCopyingLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForCopyingLabel.backgroundColor = [UIColor clearColor]; + instructionForCopyingLabel.layer.cornerRadius = 3; + instructionForCopyingLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForCopyingLabel.numberOfLines = 4; + instructionForCopyingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:instructionForCopyingLabel]; + _instructionForCopyingLabel = instructionForCopyingLabel; + + + UITextView *messageToSignTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + messageToSignTextView.translatesAutoresizingMaskIntoConstraints = NO; + messageToSignTextView.backgroundColor = [UIColor clearColor]; + messageToSignTextView.layer.cornerRadius = 3; + messageToSignTextView.textContainer.lineBreakMode = NSLineBreakByCharWrapping; + messageToSignTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + [self addSubview:messageToSignTextView]; + _messageToSignTextView = messageToSignTextView; + + UILabel *step2Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step2Label.translatesAutoresizingMaskIntoConstraints = NO; + step2Label.backgroundColor = [UIColor clearColor]; + step2Label.numberOfLines = 1; + step2Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step2Label]; + _step2Label = step2Label; + + UILabel *instructionForSigningLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForSigningLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForSigningLabel.backgroundColor = [UIColor clearColor]; + instructionForSigningLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForSigningLabel.numberOfLines = 4; + instructionForSigningLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + + [self addSubview:instructionForSigningLabel]; + _instructionForSigningLabel = instructionForSigningLabel; + + + UILabel *step3Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step3Label.translatesAutoresizingMaskIntoConstraints = NO; + step3Label.backgroundColor = [UIColor clearColor]; + step3Label.numberOfLines = 1; + step3Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step3Label]; + _step3Label = step3Label; + + UILabel *instructionForPastingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForPastingLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForPastingLabel.backgroundColor = [UIColor clearColor]; + instructionForPastingLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForPastingLabel.numberOfLines = 4; + instructionForPastingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + + [self addSubview:instructionForPastingLabel]; + _instructionForPastingLabel = instructionForPastingLabel; + + UITextView *signedMessageInputTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + signedMessageInputTextView.translatesAutoresizingMaskIntoConstraints = NO; + signedMessageInputTextView.textContainer.lineBreakMode = NSLineBreakByCharWrapping; + signedMessageInputTextView.delegate = self; + signedMessageInputTextView.backgroundColor = [UIColor whiteColor]; + signedMessageInputTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + [self addSubview:signedMessageInputTextView]; + _signedMessageInputTextView = signedMessageInputTextView; + + + [NSLayoutConstraint activateConstraints:@[ + + [step1Label.topAnchor constraintEqualToAnchor:self.topAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step1Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step1Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step1Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + + [instructionForCopyingLabel.topAnchor constraintEqualToAnchor:step1Label.bottomAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [instructionForCopyingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForCopyingLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForCopyingLabel.heightAnchor constraintEqualToAnchor:messageToSignTextView.heightAnchor + multiplier:0.5 + constant:0], + + [messageToSignTextView.topAnchor constraintEqualToAnchor:instructionForCopyingLabel.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + [messageToSignTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [messageToSignTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + + [messageToSignTextView.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.67 + constant:0], + + [step2Label.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step2Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step2Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step2Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + [instructionForSigningLabel.topAnchor constraintEqualToAnchor:step2Label.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + + [instructionForSigningLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForSigningLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForSigningLabel.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.33 + constant:0], + + [step3Label.topAnchor constraintEqualToAnchor:instructionForSigningLabel.bottomAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step3Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step3Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step3Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + [instructionForPastingLabel.topAnchor constraintEqualToAnchor:step3Label.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + + [instructionForPastingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForPastingLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForPastingLabel.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.33 + constant:0], + + [signedMessageInputTextView.topAnchor constraintEqualToAnchor:instructionForPastingLabel.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + [signedMessageInputTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [signedMessageInputTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [signedMessageInputTextView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor + constant:DW_SIGNED_PAYLOAD_BOTTOM_PADDING], + ]]; + } + return self; +} + +- (void)setModel:(DWSignPayloadModel *)model { + _model = model; + self.step1Label.text = NSLocalizedString(@"Step 1", nil); + self.step2Label.text = NSLocalizedString(@"Step 2", nil); + self.step3Label.text = NSLocalizedString(@"Step 3", nil); + self.messageToSignTextView.text = [NSString stringWithFormat:@"%@ %@", model.collateralAddress, model.payloadCollateralString]; + self.instructionForCopyingLabel.text = model.instructionStringForCopying; + self.instructionForSigningLabel.text = model.instructionStringForSigning; + self.instructionForPastingLabel.text = model.instructionStringForPasting; +} + +- (BOOL)resignFirstResponder { + BOOL resigned = [super resignFirstResponder]; + resigned |= [self.signedMessageInputTextView resignFirstResponder]; + return resigned; +} + +- (void)textViewDidEndEditing:(UITextView *)textView { + if (textView == self.signedMessageInputTextView) { + self.model.unverifiedSignatureString = textView.text; + } +} + +@end diff --git a/DashWallet/Sources/UI/Views/BRCopyLabel.h b/DashWallet/Sources/UI/Views/BRCopyLabel.h new file mode 100644 index 000000000..1c56b5969 --- /dev/null +++ b/DashWallet/Sources/UI/Views/BRCopyLabel.h @@ -0,0 +1,36 @@ +// +// BRCopyLabel.h +// BreadWallet +// +// Created by Aaron Voisine on 6/21/14. +// Copyright (c) 2014 Aaron Voisine +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +// subclass of uilabel that allows users to tap the contents and get a "copy" action bubble +@interface BRCopyLabel : UILabel + +@property (nonatomic, strong) NSString *copyableText; // text that can be copied to clipboard, default is [UILabel text] +@property (nonatomic, strong) UIColor *selectedColor; // should generally have an alpha of less than 0.8 + +- (void)toggleCopyMenu; + +@end diff --git a/DashWallet/Sources/UI/Views/BRCopyLabel.m b/DashWallet/Sources/UI/Views/BRCopyLabel.m new file mode 100644 index 000000000..2035da28b --- /dev/null +++ b/DashWallet/Sources/UI/Views/BRCopyLabel.m @@ -0,0 +1,151 @@ +// +// BRCopyLabel.m +// BreadWallet +// +// Created by Aaron Voisine on 6/21/14. +// Copyright (c) 2014 Aaron Voisine +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "BRCopyLabel.h" + +@interface BRCopyLabel () + +@property (nonatomic, strong) UIView *highlight; +@property (nonatomic, readonly) CGRect copyableFrame; +@property (nonatomic, strong) id menuHideObserver; + +@end + +@implementation BRCopyLabel + +- (BOOL)canBecomeFirstResponder { + return YES; +} + +- (BOOL)resignFirstResponder { + if ([super resignFirstResponder]) { + [UIView animateWithDuration:0.2 + animations:^{ + self.highlight.alpha = 0.0; + } + completion:^(BOOL finished) { + if (finished) + [self.highlight removeFromSuperview]; + }]; + + if (self.menuHideObserver) + [[NSNotificationCenter defaultCenter] removeObserver:self.menuHideObserver]; + self.menuHideObserver = nil; + return YES; + } + else + return NO; +} + +- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { + return (action == @selector(copy:)); +} + +- (NSString *)copyableText { + return (_copyableText) ? _copyableText : self.text; +} + +- (CGRect)copyableFrame { + NSRange r = [self.text rangeOfString:self.copyableText]; + + if (r.location == NSNotFound) + return self.bounds; + + CGRect start = [[self.text substringToIndex:r.location] boundingRectWithSize:self.bounds.size + options:0 + attributes:@{NSFontAttributeName : self.font} + context:nil], + end = [[self.text substringFromIndex:r.location + r.length] boundingRectWithSize:self.bounds.size + options:0 + attributes:@{NSFontAttributeName : self.font} + context:nil]; + + if (start.size.width + end.size.width > self.bounds.size.width) + return self.bounds; + return CGRectMake(start.size.width, 0, self.bounds.size.width - (start.size.width + end.size.width), + self.bounds.size.height); +} + +- (void)setSelectedColor:(UIColor *)selectedColor { + _selectedColor = selectedColor; + self.highlight.backgroundColor = selectedColor; +} + +- (void)toggleCopyMenu { + if (self.copyableText.length == 0) + return; + + if ([self isFirstResponder]) { + [self resignFirstResponder]; + return; + } + + if (!self.highlight) { + self.highlight = + [[UIView alloc] initWithFrame:CGRectOffset(self.copyableFrame, self.frame.origin.x, self.frame.origin.y)]; + self.highlight.backgroundColor = + (self.selectedColor) ? self.selectedColor : [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:0.15]; + self.highlight.alpha = 0.0; + } + + [self.superview insertSubview:self.highlight belowSubview:self]; + [UIView animateWithDuration:0.2 + animations:^{ + self.highlight.alpha = 1.0; + }]; + [self becomeFirstResponder]; + [[UIMenuController sharedMenuController] setTargetRect:self.copyableFrame inView:self]; + [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; + + if (!self.menuHideObserver) { + self.menuHideObserver = + [[NSNotificationCenter defaultCenter] addObserverForName:UIMenuControllerWillHideMenuNotification + object:nil + queue:nil + usingBlock:^(NSNotification *note) { + [self resignFirstResponder]; + }]; + } +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + [self toggleCopyMenu]; + [super touchesEnded:touches withEvent:event]; +} + +- (void)dealloc { + if (self.menuHideObserver) + [[NSNotificationCenter defaultCenter] removeObserver:self.menuHideObserver]; +} + +// MARK: - UIResponderStandardEditActions + +- (void)copy:(id)sender { + [UIPasteboard generalPasteboard].string = self.copyableText; + // NSLog(@"%@", [UIPasteboard generalPasteboard].string); + [self resignFirstResponder]; +} + +@end diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings new file mode 100644 index 000000000..41164e86a --- /dev/null +++ b/DashWallet/ar.lproj/Localizable.strings @@ -0,0 +1,1376 @@ +/* No comment provided by engineer. */ +"%@ is not allowed to access Face ID" = "%@ is not allowed to access Face ID"; + +/* No comment provided by engineer. */ +"%@ is not allowed to access the camera" = "%@غير مسموح بالوصول إلى الكاميرا"; + +/* No comment provided by engineer. */ +"%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; + +/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + +/* No comment provided by engineer. */ +"1 hour" = "1 hour"; + +/* Shorten version of minute */ +"1 min" = "1 min"; + +/* No comment provided by engineer. */ +"24 hours" = "24 hours"; + +/* Shorten version of minutes */ +"5 min" = "5 min"; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word" = "%@إنها ليست كلمة الإستراد"; + +/* No comment provided by engineer. */ +"\ntry again in %@" = "\nأعد المحاولة في %@"; + +/* No comment provided by engineer. */ +"A device passcode is needed to safeguard your wallet. Go to settings and turn passcode on to continue." = "A device passcode is needed to safeguard your wallet. Go to settings and turn passcode on to continue."; + +/* No comment provided by engineer. */ +"About" = "عن"; + +/* Translate it as short as possible! (24 symbols max) */ +"Add Shortcut" = "Add Shortcut"; + +/* No comment provided by engineer. */ +"Address" = "Address"; + +/* No comment provided by engineer. */ +"Advanced Security" = "Advanced Security"; + +/* No comment provided by engineer. */ +"All" = "All"; + +/* No comment provided by engineer. */ +"Allow camera access in Settings" = "Allow camera access in Settings"; + +/* No comment provided by engineer. */ +"Allow Face ID access in Settings" = "Allow Face ID access in Settings"; + +/* No comment provided by engineer. */ +"Allow Touch ID access in Settings" = "Allow Touch ID access in Settings"; + +/* No comment provided by engineer. */ +"Amount Received" = "Amount Received"; + +/* No comment provided by engineer. */ +"Amount Sent" = "Amount Sent"; + +/* No comment provided by engineer. */ +"Amount too small" = "Amount too small"; + +/* No comment provided by engineer. */ +"An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; + +/* No comment provided by engineer. */ +"Application %@ is requesting a payment to" = "التطبيق %@ يطلب الدفع إلى"; + +/* No comment provided by engineer. */ +"Application %@ is requesting an address so it can pay you. Would you like to authorize this?" = "التطبيق %@ يطلب عنوانًا حتى يمكنه الدفع لك. هل ترغب في اعتماد هذا؟"; + +/* No comment provided by engineer. */ +"Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "التطبيق %@ ترغب في استلام مفتاحك الرئيسي. هذا يمكن أن تستخدم لتتبع محفظتك ، وهذا لا يمكن أن تستخدم لتحريك داش الخاص بك."; + +/* No comment provided by engineer. */ +"Are you sure?" = "هل انت متأكد ؟ "; + +/* No comment provided by engineer. */ +"Authentication is unvailable" = "Authentication is unvailable"; + +/* No comment provided by engineer. */ +"Auto Logout" = "Auto Logout"; + +/* No comment provided by engineer. */ +"Autohide Balance" = "Autohide Balance"; + +/* lowercase, ex. 4 Dash available */ +"available" = "available"; + +/* No comment provided by engineer. */ +"Available balance" = "Available balance"; + +/* No comment provided by engineer. */ +"Backup Wallet" = "Backup Wallet"; + +/* No comment provided by engineer. */ +"Bad recovery phrase" = "Bad recovery phrase"; + +/* No comment provided by engineer. */ +"Balance hidden" = "Balance hidden"; + +/* No comment provided by engineer. */ +"block #%d of %d" = "كتلة # %1$d من %2$d"; + +/* No comment provided by engineer. */ +"Block #%d of %d" = "Block #%1$d of %2$d"; + +/* No comment provided by engineer. */ +"Buy & Sell Dash" = "Buy & Sell Dash"; + +/* Translate it as short as possible! (24 symbols max) */ +"Buy / Sell Dash" = "Buy / Sell Dash"; + +/* No comment provided by engineer. */ +"Buy Dash" = "شراء داش "; + +/* No comment provided by engineer. */ +"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; + +/* 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."; + +/* No comment provided by engineer. */ +"Cancel" = "إلغاء "; + +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + +/* No comment provided by engineer. */ +"Change payment amount?" = "Change payment amount?"; + +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + +/* No comment provided by engineer. */ +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; + +/* No comment provided by engineer. */ +"Clear" = "Clear"; + +/* No comment provided by engineer. */ +"Clear trusted node?" = "Clear trusted node?"; + +/* No comment provided by engineer. */ +"Clipboard doesn't contain a valid Dash address" = "Clipboard doesn't contain a valid Dash address"; + +/* No comment provided by engineer. */ +"Close" = "Close"; + +/* No comment provided by engineer. */ +"Close App" = "Close App"; + +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + +/* Confirm */ +"Confirm" = "تأكد"; + +/* No comment provided by engineer. */ +"Confirm PIN" = "Confirm PIN"; + +/* No comment provided by engineer. */ +"Confirming" = "Confirming"; + +/* No comment provided by engineer. */ +"Connect with third party exchanges" = "Connect with third party exchanges"; + +/* No comment provided by engineer. */ +"Connected peers: %d" = "Connected peers: %d"; + +/* No comment provided by engineer. */ +"Contact Support" = "Contact Support"; + +/* No comment provided by engineer. */ +"Continue" = "Continue"; + +/* No comment provided by engineer. */ +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; + +/* No comment provided by engineer. */ +"Copy" = "Copy"; + +/* No comment provided by engineer. */ +"Copy Logs" = "Copy Logs"; + +/* No comment provided by engineer. */ +"Copyright © 2020 Dash Core" = "Copyright © 2020 Dash Core"; + +/* No comment provided by engineer. */ +"Couldn't make payment" = "Couldn't make payment"; + +/* No comment provided by engineer. */ +"Couldn't sweep balance" = "Couldn't sweep balance"; + +/* 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 Wallet" = "Create a New Wallet"; + +/* No comment provided by engineer. */ +"Dash payments can't be less than %@" = "Dash payments can't be less than %@"; + +/* No comment provided by engineer. */ +"Date" = "Date"; + +/* No comment provided by engineer. */ +"Default" = "Default"; + +/* No comment provided by engineer. */ +"Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; + +/* No comment provided by engineer. */ +"DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash)." = "DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash)."; + +/* No comment provided by engineer. */ +"DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash). Wipe this wallet immediately and restore on a secure device." = "DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash). Wipe this wallet immediately and restore on a secure device."; + +/* No comment provided by engineer. */ +"Done" = "تم"; + +/* ex., Download peer: 127.0.0.1:9999 */ +"Download peer: %@" = "Download peer: %@"; + +/* No comment provided by engineer. */ +"Enable Face ID" = "Enable Face ID"; + +/* No comment provided by engineer. */ +"Enable Receive Notifications" = "Enable Receive Notifications"; + +/* No comment provided by engineer. */ +"Enable Touch ID" = "Enable Touch ID"; + +/* No comment provided by engineer. */ +"Enter" = "Enter"; + +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + +/* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + +/* No comment provided by engineer. */ +"Enter Recovery Phrase" = "Enter Recovery Phrase"; + +/* No comment provided by engineer. */ +"Enter the amount to transfer" = "Enter the amount to transfer"; + +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Enter your 2FA code below"; + +/* No comment provided by engineer. */ +"Exit" = "Exit"; + +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + +/* No comment provided by engineer. */ +"Face ID limit" = "محدد وجه التعريف"; + +/* No comment provided by engineer. */ +"Failed wallet update" = "فشل في تحديث المحفظة"; + +/* No comment provided by engineer. */ +"Fee" = "Fee"; + +/* No comment provided by engineer. */ +"Fee is greater than balance" = "Fee is greater than balance"; + +/* No comment provided by engineer. */ +"Fee will be deducted from requested amount." = "Fee will be deducted from requested amount."; + +/* No comment provided by engineer. */ +"Filter Transactions" = "Filter Transactions"; + +/* No comment provided by engineer. */ +"Forgot PIN?" = "Forgot PIN?"; + +/* No comment provided by engineer. */ +"Get Started" = "Get Started"; + +/* No comment provided by engineer. */ +"Go to Website" = "Go to Website"; + +/* No comment provided by engineer. */ +"Have complete control and customize your wallet based on your needs" = "Have complete control and customize your wallet based on your needs"; + +/* No comment provided by engineer. */ +"Help us improve your experience" = "Help us improve your experience"; + +/* No comment provided by engineer. */ +"High" = "High"; + +/* No comment provided by engineer. */ +"History" = "History"; + +/* No comment provided by engineer. */ +"Host" = "Host"; + +/* No comment provided by engineer. */ +"I accept that I will lose my coins if I no longer possess the recovery phrase" = "أقبل أنني سأفقد عملاتي إذا لم أعد أمتلك كلمة الإستراد"; + +/* No comment provided by engineer. */ +"I wrote it down" = "I wrote it down"; + +/* No comment provided by engineer. */ +"If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device." = "If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device."; + +/* No comment provided by engineer. */ +"If you still would like to wipe it please input: \"%@\"" = "إذا كنت لا تزال ترغب في مسحها ، فيرجى إدخال: \"%@\""; + +/* No comment provided by engineer. */ +"Ignore" = "Ignore"; + +/* No comment provided by engineer. */ +"Immediately" = "Immediately"; + +/* Translate it as short as possible! (24 symbols max) */ +"Import Private Key" = "Import Private Key"; + +/* No comment provided by engineer. */ +"Import private key…" = "Import private key…"; + +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + +/* No comment provided by engineer. */ +"Insufficient funds" = "Insufficient funds"; + +/* Transaction within the wallet, transfer of own funds */ +"Internal Transfer" = "Internal Transfer"; + +/* No comment provided by engineer. */ +"Internally moved to" = "Internally moved to"; + +/* No comment provided by engineer. */ +"Invalid" = "Invalid"; + +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + +/* No comment provided by engineer. */ +"It's Important" = "It's Important"; + +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + +/* No comment provided by engineer. */ +"Keypair %ld" = "Keypair %ld"; + +/* No comment provided by engineer. */ +"Link Uphold Account" = "Link Uphold Account"; + +/* No comment provided by engineer. */ +"Load more" = "Load more"; + +/* Translate it as short as possible! (24 symbols max) */ +"Local Currency" = "Local Currency"; + +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; + +/* No comment provided by engineer. */ +"Locked" = "Locked"; + +/* No comment provided by engineer. */ +"Log Out" = "Log Out"; + +/* No comment provided by engineer. */ +"Log out from Uphold" = "Log out from Uphold"; + +/* No comment provided by engineer. */ +"Login with Face ID" = "Login with Face ID"; + +/* No comment provided by engineer. */ +"Login with Touch ID" = "Login with Touch ID"; + +/* No comment provided by engineer. */ +"Logout" = "Logout"; + +/* No comment provided by engineer. */ +"Logout after" = "Logout after"; + +/* No comment provided by engineer. */ +"Long press to copy ID" = "Long press to copy ID"; + +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; + +/* No comment provided by engineer. */ +"Manage Trusted Node" = "Manage Trusted Node"; + +/* No comment provided by engineer. */ +"Masternode Features" = "Masternode Features"; + +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + +/* No comment provided by engineer. */ +"Masternode Revocation" = "Masternode Revocation"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + +/* Contracted variant of 'Maximum' word */ +"Max" = "Max"; + +/* No comment provided by engineer. */ +"Medium" = "Medium"; + +/* No comment provided by engineer. */ +"More" = "More"; + +/* No comment provided by engineer. */ +"More Control" = "More Control"; + +/* No comment provided by engineer. */ +"Moved from" = "Moved from"; + +/* No comment provided by engineer. */ +"Moved to Address" = "Moved to Address"; + +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + +/* No comment provided by engineer. */ +"Network" = "Network"; + +/* No comment provided by engineer. */ +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; + +/* No comment provided by engineer. */ +"NFC device" = "NFC device"; + +/* No comment provided by engineer. */ +"NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; + +/* No comment provided by engineer. */ +"No address copied" = "No address copied"; + +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + +/* No comment provided by engineer. */ +"Node IP" = "Node IP"; + +/* No comment provided by engineer. */ +"None" = "None"; + +/* No comment provided by engineer. */ +"Not a Dash QR code" = "Not a Dash QR code"; + +/* No comment provided by engineer. */ +"Not a Dash URL" = "Not a Dash URL"; + +/* No comment provided by engineer. */ +"Not a valid Dash address" = "Not a valid Dash address"; + +/* No comment provided by engineer. */ +"Not yet used" = "Not yet used"; + +/* No comment provided by engineer. */ +"OK" = "حسنا"; + +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + +/* No comment provided by engineer. */ +"Operator Keys" = "Operator Keys"; + +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + +/* No comment provided by engineer. */ +"Owner Keys" = "Owner Keys"; + +/* No comment provided by engineer. */ +"Owner Private Key" = "Owner Private Key"; + +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + +/* No comment provided by engineer. */ +"Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; + +/* No comment provided by engineer. */ +"Pay with Ease" = "Pay with Ease"; + +/* No comment provided by engineer. */ +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + +/* No comment provided by engineer. */ +"PIN is always required to make a payment" = "PIN is always required to make a payment"; + +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + +/* No comment provided by engineer. */ +"Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; + +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + +/* No comment provided by engineer. */ +"Please place your phone near NFC device." = "يرجى وضع هاتفك بالقرب من جهاز NFC."; + +/* No comment provided by engineer. */ +"Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; + +/* No comment provided by engineer. */ +"Please try again" = "Please try again"; + +/* No comment provided by engineer. */ +"Please wait for the sync to complete" = "Please wait for the sync to complete"; + +/* No comment provided by engineer. */ +"Please write it down" = "Please write it down"; + +/* No comment provided by engineer. */ +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; + +/* No comment provided by engineer. */ +"Private key" = "Private key"; + +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + +/* No comment provided by engineer. */ +"Processing" = "Processing"; + +/* No comment provided by engineer. */ +"Provider Address" = "Provider Address"; + +/* No comment provided by engineer. */ +"Public key" = "Public key"; + +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + +/* No comment provided by engineer. */ +"Quick Receive" = "Quick Receive"; + +/* No comment provided by engineer. */ +"Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; + +/* ex., Rate 1 US $ = 0.000009 Dash */ +"Rate: %@ = %@" = "Rate: %1$@ = %2$@"; + +/* No comment provided by engineer. */ +"Receive" = "Receive"; + +/* No comment provided by engineer. */ +"Received" = "تم الاستلام"; + +/* No comment provided by engineer. */ +"Received %@ (%@)" = "Received %1$@ (%2$@)"; + +/* No comment provided by engineer. */ +"Received at" = "Received at"; + +/* No comment provided by engineer. */ +"Received from" = "Received from"; + +/* No comment provided by engineer. */ +"Recover Wallet" = "Recover Wallet"; + +/* No comment provided by engineer. */ +"Recovery Phrase" = "Recovery Phrase"; + +/* No comment provided by engineer. */ +"Recovery phrase doesn't match" = "Recovery phrase doesn't match"; + +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + +/* No comment provided by engineer. */ +"Registered from" = "Registered from"; + +/* No comment provided by engineer. */ +"Registered Masternode" = "Registered Masternode"; + +/* No comment provided by engineer. */ +"Registration" = "Registration"; + +/* Translate it as short as possible! (24 symbols max) */ +"Report an Issue" = "Report an Issue"; + +/* No comment provided by engineer. */ +"Rescan" = "Rescan"; + +/* No comment provided by engineer. */ +"Rescan Blockchain" = "Rescan Blockchain"; + +/* No comment provided by engineer. */ +"Reset" = "Reset"; + +/* No comment provided by engineer. */ +"Reset to Default" = "Reset to Default"; + +/* No comment provided by engineer. */ +"Reset Wallet" = "Reset Wallet"; + +/* No comment provided by engineer. */ +"Retry" = "Retry"; + +/* No comment provided by engineer. */ +"Review & Rate the app" = "Review & Rate the app"; + +/* No comment provided by engineer. */ +"Reward" = "Reward"; + +/* No comment provided by engineer. */ +"Rewards" = "Rewards"; + +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + +/* 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 Code" = "Scan QR Code"; + +/* No comment provided by engineer. */ +"Scan this to Pay" = "Scan this to Pay"; + +/* Translate it as short as possible! (24 symbols max) */ +"Scan to Pay" = "Scan to Pay"; + +/* No comment provided by engineer. */ +"Scan to Send" = "Scan to Send"; + +/* (Pay by) Scanning QR code */ +"Scanning QR code" = "Scanning QR code"; + +/* No comment provided by engineer. */ +"Screenshot detected. New recovery phrase:" = "Screenshot detected. New recovery phrase:"; + +/* No comment provided by engineer. */ +"Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "تكون لقطات الشاشة مرئية للتطبيقات والأجهزة الأخرى. إنشاء كلمة الإستراد جديدة والحفاظ على سريتها."; + +/* No comment provided by engineer. */ +"Secure now" = "Secure now"; + +/* Translate it as short as possible! (24 symbols max) */ +"Secure Wallet Now" = "Secure Wallet Now"; + +/* No comment provided by engineer. */ +"Security" = "Security"; + +/* No comment provided by engineer. */ +"Security Level" = "Security Level"; + +/* No comment provided by engineer. */ +"See on Uphold" = "See on Uphold"; + +/* No comment provided by engineer. */ +"Send" = "Send"; + +/* No comment provided by engineer. */ +"Send %@ (%@) from this private key into your wallet? The Dash network will receive a fee of %@ (%@)." = "Send %1$@ (%2$@) from this private key into your wallet? The Dash network will receive a fee of %3$@ (%4$@)."; + +/* Pay by (scanning QR code) */ +"Send by" = "Send by"; + +/* No comment provided by engineer. */ +"Send to" = "Send to"; + +/* Translate it as short as possible! (24 symbols max) */ +"Send to Address" = "Send to Address"; + +/* Translate it as short as possible! (24 symbols max) */ +"Send with NFC" = "Send with NFC"; + +/* 1 out of 4 in the Sending Animation */ +"Sending" = "Sending"; + +/* 2 out of 4 in the Sending Animation */ +"Sending." = "Sending."; + +/* 3 out of 4 in the Sending Animation */ +"Sending.." = "Sending.."; + +/* 4 out of 4 in the Sending Animation */ +"Sending..." = "Sending..."; + +/* No comment provided by engineer. */ +"Sent" = "أرسلت "; + +/* No comment provided by engineer. */ +"Sent from" = "Sent from"; + +/* No comment provided by engineer. */ +"Sent successfully" = "Sent successfully"; + +/* No comment provided by engineer. */ +"Sent to" = "Sent to"; + +/* No comment provided by engineer. */ +"Set a trusted node" = "Set a trusted node"; + +/* No comment provided by engineer. */ +"Set PIN" = "Set PIN"; + +/* No comment provided by engineer. */ +"Settings" = "الإعدادات"; + +/* No comment provided by engineer. */ +"Setup Wallet" = "Setup Wallet"; + +/* No comment provided by engineer. */ +"Share" = "Share"; + +/* No comment provided by engineer. */ +"Show Masternode Keys" = "Show Masternode Keys"; + +/* No comment provided by engineer. */ +"Show Recovery Phrase" = "Show Recovery Phrase"; + +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + +/* No comment provided by engineer. */ +"Skip" = "Skip"; + +/* No comment provided by engineer. */ +"skip" = "skip"; + +/* No comment provided by engineer. */ +"Something went wrong" = "Something went wrong"; + +/* No comment provided by engineer. */ +"Specify Amount" = "Specify Amount"; + +/* No comment provided by engineer. */ +"Spending Confirmation" = "Spending Confirmation"; + +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + +/* No comment provided by engineer. */ +"Swept!" = "Swept!"; + +/* Translate it as short as possible! (24 symbols max) */ +"Switch to Mainnet" = "Switch to Mainnet"; + +/* Translate it as short as possible! (24 symbols max) */ +"Switch to Testnet" = "Switch to Testnet"; + +/* No comment provided by engineer. */ +"Sync Failed" = "Sync Failed"; + +/* Translate it as short as possible! (24 symbols max) */ +"Sync Now" = "Sync Now"; + +/* No comment provided by engineer. */ +"Syncing" = "Syncing"; + +/* Pay using NFC (should be as short as possible) */ +"Tap" = "Tap"; + +/* No comment provided by engineer. */ +"Tap to hide balance" = "Tap to hide balance"; + +/* No comment provided by engineer. */ +"Tap to unhide balance" = "Tap to unhide balance"; + +/* No comment provided by engineer. */ +"There are no transactions to display" = "There are no transactions to display"; + +/* No comment provided by engineer. */ +"This app is open source:" = "This app is open source:"; + +/* No comment provided by engineer. */ +"This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; + +/* No comment provided by engineer. */ +"This recovery phrase is your access to the funds in this wallet." = "This recovery phrase is your access to the funds in this wallet."; + +/* No comment provided by engineer. */ +"This transaction may take several minutes to settle." = "This transaction may take several minutes to settle."; + +/* No comment provided by engineer. */ +"This transaction should settle instantly at no extra fee" = "This transaction should settle instantly at no extra fee"; + +/* No comment provided by engineer. */ +"This wallet is not empty or sync has not finished, you may not wipe it without the recovery phrase" = "هذه المحفظة ليست فارغة أو لم تنتهِ المزامنة ، ولا يجوز مسحها بدون كلمة الإستراد"; + +/* No comment provided by engineer. */ +"This will move all coins from that wallet to your wallet on this device." = "This will move all coins from that wallet to your wallet on this device."; + +/* No comment provided by engineer. */ +"Tools" = "Tools"; + +/* No comment provided by engineer. */ +"Total" = "Total"; + +/* No comment provided by engineer. */ +"Touch ID limit" = "إلمس لمعرفة الحد"; + +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + +/* No comment provided by engineer. */ +"Transaction id" = "Transaction id"; + +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + +/* No comment provided by engineer. */ +"Transfer" = "Transfer"; + +/* No comment provided by engineer. */ +"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; + +/* No comment provided by engineer. */ +"Transfer from Uphold" = "Transfer from Uphold"; + +/* No comment provided by engineer. */ +"Try again" = "Try again"; + +/* No comment provided by engineer. */ +"Turn device passcode on" = "Turn device passcode on"; + +/* No comment provided by engineer. */ +"Unable to connect" = "Unable to connect"; + +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + +/* No comment provided by engineer. */ +"Unable to get new QR code" = "Unable to get new QR code"; + +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + +/* No comment provided by engineer. */ +"Unsupported or corrupted document" = "Unsupported or corrupted document"; + +/* No comment provided by engineer. */ +"Unsupported URL" = "Unsupported URL"; + +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + +/* ex., Updated: 27.12, 8:30 */ +"Updated: %@" = "Updated: %@"; + +/* No comment provided by engineer. */ +"Uphold" = "Uphold"; + +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + +/* No comment provided by engineer. */ +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; + +/* No comment provided by engineer. */ +"Verified Successfully" = "Verified Successfully"; + +/* No comment provided by engineer. */ +"Verify" = "Verify"; + +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; + +/* No comment provided by engineer. */ +"View in Block Explorer" = "View in Block Explorer"; + +/* No comment provided by engineer. */ +"View passphrase, backup wallet…" = "View passphrase, backup wallet…"; + +/* No comment provided by engineer. */ +"View Recovery Phrase" = "View Recovery Phrase"; + +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + +/* No comment provided by engineer. */ +"Voting Keys" = "Voting Keys"; + +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; + +/* No comment provided by engineer. */ +"Wallet Keys" = "Wallet Keys"; + +/* No comment provided by engineer. */ +"WARNING" = "تحذير"; + +/* No comment provided by engineer. */ +"Warning" = "Warning"; + +/* No comment provided by engineer. */ +"We are about to show you the secret key to your wallet." = "We are about to show you the secret key to your wallet."; + +/* No comment provided by engineer. */ +"We do not store this recovery phrase." = "We do not store this recovery phrase."; + +/* No comment provided by engineer. */ +"We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; + +/* No comment provided by engineer. */ +"We Upgraded" = "We Upgraded"; + +/* No comment provided by engineer. */ +"Welcome" = "Welcome"; + +/* 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."; + +/* No comment provided by engineer. */ +"Wipe" = "Wipe"; + +/* No comment provided by engineer. */ +"Wipe Wallet" = "Wipe Wallet"; + +/* No comment provided by engineer. */ +"with Dash blockchain" = "with Dash blockchain"; + +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + +/* No comment provided by engineer. */ +"You are about to sweep funds from another Dash Wallet." = "You are about to sweep funds from another Dash Wallet."; + +/* 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 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"; + +/* 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 received Dash! If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device." = "You received Dash! If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device."; + +/* 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"; + +/* No comment provided by engineer. */ +"You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; + +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + +/* 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."; + +/* No comment provided by engineer. */ +"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; + +/* 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."; + +/* No comment provided by engineer. */ +"%@ has accepted your contact request" = ""; + +/* Username has sent you a contact request */ +"%@ has sent you a contact request" = ""; + +"(1/3) Processing Payment" = ""; + +/* No comment provided by engineer. */ +"(1/3) Unable to process payment" = ""; + +/* No comment provided by engineer. */ +"(2/3) Creating Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(2/3) Unable to create Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(3/3) Can't register username" = ""; + +/* No comment provided by engineer. */ +"(3/3) Registering Username" = ""; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word. Would you like to try to recover the correct word that should be in its place?" = ""; + +/* No comment provided by engineer. */ +"Accept" = ""; + +/* No comment provided by engineer. */ +"Activity" = ""; + +/* Add as your contact... */ +"Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Add a New Contact" = ""; + +/* Choose your Dash username */ +"Choose your" = ""; + +/* No comment provided by engineer. */ +"Confirm & Pay" = ""; + +/* No comment provided by engineer. */ +"Connecting to payment server" = ""; + +/* No comment provided by engineer. */ +"Contact Request Pending" = ""; + +/* No comment provided by engineer. */ +"Contact Requests" = ""; + +/* No comment provided by engineer. */ +"Contacts" = ""; + +/* No comment provided by engineer. */ +"Could not automatically recover missing or incorrect words" = ""; + +/* 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. */ +"Current user: %@" = ""; + +/* No comment provided by engineer. */ +"Dash username" = ""; + +/* No comment provided by engineer. */ +"DashPay Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Do not take a screenshot" = ""; + +/* (List of notifications happened) Earlier (some time ago) */ +"Earlier" = ""; + +/* Input username textfield placeholder */ +"eg: johndoe" = ""; + +/* No comment provided by engineer. */ +"Error" = ""; + +/* No comment provided by engineer. */ +"Error Upgrading" = ""; + +"Extended Public Keys" = ""; + +/* No comment provided by engineer. */ +"Find a user on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Found missing word:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found potential missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Generate extended public keys?" = ""; + +/* Username has requested to be your friend */ +"has requested to be your friend" = ""; + +/* No comment provided by engineer. */ +"header #%d of %d" = ""; + +/* Hello username, */ +"Hello %@," = ""; + +"I Accept" = ""; + +"Invalid Payment Request" = ""; + +/* No comment provided by engineer. */ +"Invalid QR Code" = ""; + +/* 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." = ""; + +/* 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?" = ""; + +"Join Evolution" = ""; + +/* No comment provided by engineer. */ +"Let me know when it’s done" = ""; + +/* Validation rule */ +"Letters and numbers only" = ""; + +"masternode list #%d of %d" = ""; + +/* Validation rule: Maximum 24 characters */ +"Maximum %ld characters" = ""; + +/* Validation rule */ +"Minimum 3 characters" = ""; + +"My Contacts" = ""; + +/* No comment provided by engineer. */ +"Name" = ""; + +/* (List of) New (notifications) */ +"New" = ""; + +/* No comment provided by engineer. */ +"Notifications" = ""; + +/* Once accepts your request... */ +"Once %@ accepts your request you can Pay Directly to Username" = ""; + +"Pay" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Pay Directly to Username" = ""; + +/* 1 out of 4 in the Paying Animation */ +"Paying" = ""; + +/* 2 out of 4 in the Paying Animation */ +"Paying." = ""; + +/* 3 out of 4 in the Paying Animation */ +"Paying.." = ""; + +/* 4 out of 4 in the Paying Animation */ +"Paying..." = ""; + +"Pending" = ""; + +/* No comment provided by engineer. */ +"Please try scanning again" = ""; + +/* No comment provided by engineer. */ +"Please Wait" = ""; + +/* No comment provided by engineer. */ +"Please wait" = ""; + +/* No comment provided by engineer. */ +"Recover" = ""; + +/* No comment provided by engineer. */ +"Recovering..." = ""; + +/* No comment provided by engineer. */ +"Recovery phrase must have 12, 15, 18, 21 or 24 words" = ""; + +/* No comment provided by engineer. */ +"Register?" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Search for a contact" = ""; + +/* No comment provided by engineer. */ +"Search for a contact request" = ""; + +/* No comment provided by engineer. */ +"Search for a User on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Search for a username" = ""; + +/* Search results for \"John Doe\" */ +"Search results for \"" = ""; + +/* No comment provided by engineer. */ +"Searching for username %@ on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Send Contact Request" = ""; + +/* No comment provided by engineer. */ +"Sending to" = ""; + +/* No comment provided by engineer. */ +"Sort by" = ""; + +/* No comment provided by engineer. */ +"Sort Contacts" = ""; + +"Support" = ""; + +/* No comment provided by engineer. */ +"Syncing Balance" = ""; + +/* No comment provided by engineer. */ +"There are no new notifications" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@ in your contacts" = ""; + +/* No comment provided by engineer. */ +"Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Upgrading to DashPay" = ""; + +/* No comment provided by engineer. */ +"Username taken" = ""; + +/* No comment provided by engineer. */ +"Validating username done" = ""; + +/* No comment provided by engineer. */ +"Validating username failed" = ""; + +/* No comment provided by engineer. */ +"Validating username…" = ""; + +/* No comment provided by engineer. */ +"View All" = ""; + +/* No comment provided by engineer. */ +"Why I should not take a screenshot?" = ""; + +/* No comment provided by engineer. */ +"WIF Private key" = ""; + +"You accepted the contact request from %@" = ""; + +/* No comment provided by engineer. */ +"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = ""; + +/* No comment provided by engineer. */ +"You sent the contact request to %@" = ""; + +"Your DashPay Username is ready to use" = ""; + +/* No comment provided by engineer. */ +"Your username %@ has been successfully created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Your username %@ is being created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Сopied address or QR" = ""; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index fb86c487a..ba580d3e5 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ не е разрешен достъпа до Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Отказ"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Промяна"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Промяна сумата за плащане?"; /* No comment provided by engineer. */ -"Change PIN" = "Промяна на ПИН"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Проверете връзката"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Затвори приложението"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Потвърди"; @@ -230,7 +249,10 @@ "Continue" = "Продължи"; /* No comment provided by engineer. */ -"Copied" = "Копирано"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Копирай"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Дата"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Валута по подразбиране,преки пътища, относно..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Вход"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Въведи ПИН"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Въведи фразата за възстановяване"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Въведи сумата за прехвърляне "; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Въведете вашият 2FA код по-долу"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Изход"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Лимит на лицева идентификация"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "История"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Импортиране на частен ключ..."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Недостатъчно средства"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Вътрешно преместени към"; -/* Invalid transaction */ -"Invalid" = "Невалиден"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "Невалидно искане за плащанеt"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "Важно е"; /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Ключова фраза %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Местна валута"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Локална заявка за сума: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Заключена"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Дълго натискане за копиране на ID"; -/* adjective, security level */ -"Low" = "Ниско"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Управление на доверен нод"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Masternode регистрация"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode обновяване"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Максимум"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Преместено в адрес"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; @@ -551,18 +632,25 @@ "Network" = "Мрежа"; /* No comment provided by engineer. */ -"Network fee" = "Мрежова такса"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "New"; /* No comment provided by engineer. */ -"NFC device" = "NFC устройство"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC устройството не предава валиден Dash адрес"; +"No address copied" = "Няма копиран адрес"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Нод IP"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Операторски ключове"; /* No comment provided by engineer. */ -"Owner Address" = "Адрес на собственика"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Ключове на собственика"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Плати"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Paying..."; /* No comment provided by engineer. */ -"Payments" = "Плащания"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Изчакване"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "ПИН се изисква винаги при правене на плащания"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Моля въведете ПИН за обновяване на портфейла"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Моля поставете вашият телефон близо до NFC устройство."; @@ -659,11 +772,17 @@ "Please write it down" = "Моля запишете го долу"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Преди използван на IP адрес"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Частен ключ"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Обработване"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Публичен адрес"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Бързо получаване"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; /* No comment provided by engineer. */ -"Registered from" = "Регистриран от"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Регистриран Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Докладвай проблем"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Възнаграждения"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Сканирай"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Покажи фраза за възстановяване"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Пропусни"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Потвърждение за похарчване"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Стъпки за възпроизвеждане на срива"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID лимит"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Транзакция id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Прехвърляне"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Не може да се свърже"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Не може да получи нов QR код"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Неподдържан или повреден документ"; /* No comment provided by engineer. */ "Unsupported URL" = "Неподдържан url"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Обновено: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Използван"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Използван от IP адрес"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Username taken"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Провери"; -/* adjective, security level */ -"Very High" = "Много високо"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "View All"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Виж фразата за възстановяване"; /* No comment provided by engineer. */ -"Voting Address" = "Адрес за гласуване"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Ключове за гласуване"; /* No comment provided by engineer. */ -"Wallet disabled" = "Портфейлът е изключен"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Ключове на портфейла"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "с Dash блок верига"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Тази фраза за възстановяване ще ви трябва за достъп до вашите средства, ако това устройство е загубено, повредено или ако Dash Wallet някога случайно бъде деинсталиран от това устройство."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index d08f46cc4..963c35a33 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nemá přístup k Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Platba se zpracovává"; /* No comment provided by engineer. */ @@ -31,6 +32,9 @@ /* No comment provided by engineer. */ "(3/3) Registering Username" = "(3/3) Registrace uživatelského jména"; +/* No comment provided by engineer. */ +"1 hour" = "1 h"; + /* No comment provided by engineer. */ "1 hour" = "1 hodina"; @@ -166,12 +170,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Změnit"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Změnit částku platby?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Změnit PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Zkontrolujte vaše připojení"; @@ -193,6 +206,15 @@ /* No comment provided by engineer. */ "Close App" = "Zavřít aplikaci"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Potvrdit"; @@ -229,6 +251,9 @@ /* No comment provided by engineer. */ "Continue" = "Pokračovat"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Zkopírováno"; @@ -274,6 +299,9 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Výchozí měna, zkratky, o aplikaci"; @@ -310,15 +338,42 @@ /* No comment provided by engineer. */ "Enter" = "Vložit"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Zadejte PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Zadejte frázi pro obnovení"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Zadejte částku k transakci"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Vložte váš 2FA kód níže"; @@ -331,9 +386,10 @@ /* No comment provided by engineer. */ "Exit" = "Odejít"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -397,7 +453,8 @@ /* No comment provided by engineer. */ "History" = "Historie"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Přijímám"; /* No comment provided by engineer. */ @@ -424,6 +481,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importovat privátní klíč…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Nedostatečný zůstatek"; @@ -436,12 +496,13 @@ /* Invalid transaction */ "Invalid" = "Neplatná"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Neplatný platební požadavek"; /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +512,10 @@ /* No comment provided by engineer. */ "It's Important" = "Je důležité"; -/* No comment provided by engineer. */ "Join Evolution" = "Připojte se k Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Klíčový pár %ld"; @@ -472,6 +534,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Místní Měna"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Požadovaná částka: %@"; @@ -499,13 +564,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Dlouhým stiskem zkopírujte ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* adjective, security level */ "Low" = "Nízká"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Spravovat důvěryhodný node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "seznam masternodů #%1$d z %2$d"; /* No comment provided by engineer. */ @@ -517,6 +589,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizace masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,15 +616,19 @@ /* No comment provided by engineer. */ "Moved to Address" = "Přesunuto na adresu"; -/* No comment provided by engineer. */ "My Contacts" = "Moje kontakty"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Jméno"; /* No comment provided by engineer. */ "Network" = "Síť"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Poplatek síti"; @@ -562,7 +641,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC zařízení neodeslalo platnou Dash adresu"; +"No address copied" = "Žádná zkopírovaná adresa"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +672,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Klíče operátora"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Klíče majitele"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Platit"; /* No comment provided by engineer. */ @@ -625,15 +724,22 @@ /* No comment provided by engineer. */ "Payments" = "Platby"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Čeká na vyřízení"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Pro platby je vždy vyžadován PIN"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Pro aktualizaci peněženky zadejte PIN kód"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Přiložte váš telefon k zařízení NFC."; @@ -658,12 +764,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Poznamenejte si ji"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Naposledy použito na IP adrese"; /* No comment provided by engineer. */ "Private key" = "Privátní klíč"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Zpracovává se"; @@ -673,6 +785,9 @@ /* No comment provided by engineer. */ "Public key" = "Veřejný klíč"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Přijmout"; @@ -718,6 +833,12 @@ /* Button title, Register (username) */ "Register" = "Registrovat"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrovat?"; @@ -727,6 +848,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registrovaný masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Nahlásit problém"; @@ -760,6 +884,9 @@ /* No comment provided by engineer. */ "Rewards" = "Odměny"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skenovat"; @@ -889,6 +1016,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobrazit frázi pro obnovení"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Přeskočit"; @@ -910,7 +1040,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Potvrzení"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Kroky pro reprodukování pádu"; + "Support" = "Podpora"; /* No comment provided by engineer. */ @@ -985,9 +1125,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "ID transakce"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transakce"; @@ -1006,15 +1152,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Nelze se připojit"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Nelze získat nový QR kód"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Nepodporovaný nebo poškozený dokument"; /* No comment provided by engineer. */ "Unsupported URL" = "Nepodporovaná URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aktualizováno: %@"; @@ -1027,6 +1203,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Použito"; @@ -1051,6 +1230,9 @@ /* No comment provided by engineer. */ "Verify" = "Ověřit"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Vělmi vysoká"; @@ -1066,12 +1248,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobrazit frázi pro obnovení"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Adresa pro hlasování"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Klíče pro hlasování"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Peněženka deaktivována"; @@ -1117,7 +1311,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "s Dash blockchainem"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Přijal si žádost o přidání mezi kontakty od %@"; /* No comment provided by engineer. */ @@ -1150,7 +1345,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Pokud toto zařízení ztratíte, poškodíte nebo odinstalujete Dash Wallet, budete potřebovat frázi pro obnovení, abyste znovu mohli nakládat s vašimi prostředky."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Tvoje uživatelské jméno DashPay je připraveo k použití"; /* No comment provided by engineer. */ diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 02095f1bf..df5686cd9 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ darf nicht auf die Touch ID zugreifen"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Verarbeite Zahlung"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Abbrechen"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Ändern"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Zahlungsbetrag ändern?"; /* No comment provided by engineer. */ -"Change PIN" = "PIN ändern"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Verbindung überprüfen"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Wähle deinen"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "App schließen"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Bestätigen"; @@ -230,7 +249,10 @@ "Continue" = "Fortfahren"; /* No comment provided by engineer. */ -"Copied" = "Kopiert"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Kopieren"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Standardwährung, Shortcuts, über..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Eingabe"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "PIN eingeben"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Wiederherstellungs-Wortfolge eingeben"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Trage den Transaktionsbetrag ein"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Trage den 2FA-Code unten ein"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Beenden"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face-ID Limit"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Verlauf"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Ich akzeptiere"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Privaten Schlüssel importieren…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Guthaben nicht ausreichend"; @@ -433,8 +490,8 @@ /* No comment provided by engineer. */ "Internally moved to" = "Intern verschoben nach"; -/* Invalid transaction */ -"Invalid" = "Ungültig"; +/* No comment provided by engineer. */ +"Invalid" = "Invalid"; /* No comment provided by engineer. */ "Invalid Payment Request" = "Ungültige Zahlungsanforderung"; @@ -442,6 +499,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Ungültiger QR-Code"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +511,10 @@ /* No comment provided by engineer. */ "It's Important" = "Dies ist wichtig"; -/* No comment provided by engineer. */ "Join Evolution" = "An Evolution teilnehmen"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -473,7 +534,10 @@ "Local Currency" = "Lokale Währung"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Lokal angefragter Betrag: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Gesichert"; @@ -499,15 +563,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Gedrückt halten zum Kopieren der ID"; -/* adjective, security level */ -"Low" = "Niedrig"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Zuverlässige Knoten verwalten"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "Masternode-Liste #%1$d von %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Masternode-Registrierung"; @@ -517,6 +591,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode-Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +618,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Verschoben zur Adresse"; -/* No comment provided by engineer. */ "My Contacts" = "Meine Kontakte"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; @@ -551,18 +629,25 @@ "Network" = "Netzwerk"; /* No comment provided by engineer. */ -"Network fee" = "Netzwerk-Gebühr"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Neu"; /* No comment provided by engineer. */ -"NFC device" = "NFC-Gerät"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC-Gerät hat keine gültige Dash-Adresse übermittelt"; +"No address copied" = "Keine Adresse kopiert"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Knoten-IP"; /* adjective, security level */ @@ -589,16 +674,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Betreiber-Schlüssel"; /* No comment provided by engineer. */ -"Owner Address" = "Besitzer-Adresse"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Besitzer-Schlüssel"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Zahlen"; /* No comment provided by engineer. */ @@ -623,7 +724,10 @@ "Paying..." = "Bezahle..."; /* No comment provided by engineer. */ -"Payments" = "Zahlungen"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Ausstehend"; @@ -631,9 +735,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN ist für jede Zahlung notwendig"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "PIN eingeben zum upgraden der Wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Bitte halte dein Telefon nahe an das NFC-Gerät."; @@ -659,11 +769,17 @@ "Please write it down" = "Bitte aufschreiben"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Zuvor verwendet über die IP-Adresse"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Privater Schlüssel"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Verarbeitung"; @@ -673,6 +789,9 @@ /* No comment provided by engineer. */ "Public key" = "öffentlicher Schlüssel"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Schnell Empfangen"; @@ -718,15 +837,24 @@ /* Button title, Register (username) */ "Register" = "Registrieren"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrieren?"; /* No comment provided by engineer. */ -"Registered from" = "Registriert von"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Registrierte Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Problem melden"; @@ -760,6 +888,9 @@ /* No comment provided by engineer. */ "Rewards" = "Belohnungen"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scannen"; @@ -889,6 +1020,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Wiederherstellungsphrase anzeigen"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Überspringen"; @@ -910,7 +1044,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Zahlungsbestätigungen"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Schritte, um den Absturz zu reproduzieren"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1129,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch-ID Limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaktions-ID"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transferieren"; @@ -1006,15 +1156,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Verbindung fehlgeschlagen"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Kann keinen neuen QR-Code erzeugen"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Nicht unterstütztes oder beschädigtes Dokument"; /* No comment provided by engineer. */ "Unsupported URL" = "URL nicht unterstützt"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1028,10 +1208,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Benutzt"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Benutzt von IP-Adresse"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Benutzername bereits vergeben"; @@ -1051,8 +1234,11 @@ /* No comment provided by engineer. */ "Verify" = "Verifizieren"; -/* adjective, security level */ -"Very High" = "Sehr hoch"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Alle Ansehen"; @@ -1067,13 +1253,25 @@ "View Recovery Phrase" = "Wiederherstellungsphrase ansehen"; /* No comment provided by engineer. */ -"Voting Address" = "Abstimmungs-Adresse"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; /* No comment provided by engineer. */ -"Wallet disabled" = "Wallet deaktiviert"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Wallet-Schlüssel"; @@ -1117,7 +1315,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "mit der Dash-Blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Du hast die Kontaktanfrage von %@ angenommen"; /* No comment provided by engineer. */ @@ -1150,7 +1349,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Diese Wiederherstellungsphrase wird zum Zugriff auf das Guthaben benötigt, sollte das Gerät verloren oder kaputt gehen, oder falls die App fälschlicherweise deinstalliert wird."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Dein DashPay-Benutzername kann jetzt verwendet werden"; /* No comment provided by engineer. */ diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 82be9844d..88c1f847c 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ δεν επιτρέπεται να έχετε πρόσβαση στο Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Επεξεργασία Πληρωμής"; /* No comment provided by engineer. */ @@ -166,12 +167,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Αλλαγή"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Αλλαγή του ποσού πληρωμής?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Αλλαγή PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Ελέγξτε την σύνδεση σας"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Κλείσιμο Εφαρμογής"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Επιβεβαίωση"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "Συνέχεια"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Αντιγράφηκε"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Ημερομηνία"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Προεπιλεγμένο νόμισμα, συντομεύσεις, σχετικά με..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Είσοδος"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Εισάγετε PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Εισάγετε την φράσης ανάκτησης"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Εισάγετε το ποσό που θα μεταφερθεί"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Εισάγετε τον 2FA κωδικό παρακάτω"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Έξοδος"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "όριο Face ID "; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Ιστορικό"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Αποδέχομαι"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Εισάγετε το ιδιωτικό κλειδί…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Ανεπαρκή χρήματα"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Μη έγκυρο"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Μη έγκυρο αίτημα πληρωμής"; /* No comment provided by engineer. */ "Invalid QR Code" = "Μη έγκυρος κωδικός QR"; +"IP Address" = "IP Address"; + /* 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 λέξεις, θα θέλατε να ανακτήσετε αυτόματα τις λέξεις που λείπουν; Αυτό μπορεί να διαρκέσει περίπου μια ώρα. Σας συνιστούμε να συνδέσετε τη συσκευή σας στην φόρτιση."; @@ -451,9 +509,10 @@ /* No comment provided by engineer. */ "It's Important" = "Είναι σημαντικό"; -/* No comment provided by engineer. */ "Join Evolution" = "Εγγραφείτε στο Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +531,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Τοπικό νόμισμα"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Τοπικό ποσό που ζητήθηκε: %@"; @@ -499,13 +561,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Πατήστε παρατεταμένα για να αντιγραψετε το ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* adjective, security level */ "Low" = "χαμηλά"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Διαχείριση Έμπιστου Κόμβου"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "Λίστα masternode #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +586,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Ανανέωση Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Μέγιστο"; @@ -541,15 +613,19 @@ /* No comment provided by engineer. */ "Moved to Address" = "Μετακινήθηκε στην διεύθυνση"; -/* No comment provided by engineer. */ "My Contacts" = "Οι Επαφές μου"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Όνομα"; /* No comment provided by engineer. */ "Network" = "Δίκτυο"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Τέλος δικτύου"; @@ -562,7 +638,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Η συσκευή NFC δεν μεταδίδει έγκυρη διεύθυνση Dash"; +"No address copied" = "Δεν αντιγράφηκε καμία διεύθυνση"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP Κόμβου"; /* adjective, security level */ @@ -589,16 +669,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Μόλις ο/η %@ αποδεχτεί το αίτημα σας, θα μπορείτε να πληρώσετε απευθείας στο όνομα χρήστη"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Κλειδιά Χειριστή"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Κλειδιά Κατόχου"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "πληρώστε"; /* No comment provided by engineer. */ @@ -625,15 +721,22 @@ /* No comment provided by engineer. */ "Payments" = "Πληρωμές"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Εκκρεμεί"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Το PIN είναι πάντα απαραίτητο για να πραγματοποιήσετε μια πληρωμή"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Παρακαλώ εισάγετε το PIN για να αναβαθμίσετε το πορτοφόλι"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Τοποθετήστε το τηλέφωνό σας κοντά στη συσκευή NFC."; @@ -658,12 +761,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Παρακαλώ να το γράψετε"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Χρησιμοποιήθηκε προηγουμένως στη διεύθυνση IP"; /* No comment provided by engineer. */ "Private key" = "Ιδιωτικό κλειδί"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Επεξεργασία"; @@ -673,6 +782,9 @@ /* No comment provided by engineer. */ "Public key" = "Δημόσιο κλειδί"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Γρήγορη Λήψη"; @@ -718,6 +830,12 @@ /* Button title, Register (username) */ "Register" = "Εγγραφή"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Εγγραφή;"; @@ -727,6 +845,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Εγγεγραμμένο Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Αναφέρετε το πρόβλημα"; @@ -760,6 +881,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ανταμοιβές"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Ανίχνευση"; @@ -889,6 +1013,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Παράλειψη"; @@ -910,7 +1037,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Επιβεβαίωση Ξοδέματος"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Βήματα για να αναπαραχθεί η κατάρρευση"; + "Support" = "Υποστήριξη"; /* No comment provided by engineer. */ @@ -985,9 +1122,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Όριο Touch ID "; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Ταυτότητα συναλλαγής"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Μεταφορά"; @@ -1006,15 +1149,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Δεν είναι δυνατή η σύνδεση"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Δεν είναι δυνατή η λήψη νέου QR κωδικού"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Μη υποστηριζόμενο ή κατεστραμμένο έγγραφο"; /* No comment provided by engineer. */ "Unsupported URL" = "Μη υποστηριζόμενο url"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Ανανεώθηκε: %@"; @@ -1027,6 +1200,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Χρησιμοποιήθηκε"; @@ -1051,6 +1227,9 @@ /* No comment provided by engineer. */ "Verify" = "Επιβεβαίωση"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Πολύ Υψηλά"; @@ -1066,12 +1245,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Διεύθυνση Ψήφου"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Κλειδιά ψήφου"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Το πορτοφόλι απενεργοποιήθηκε"; @@ -1117,7 +1308,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "Μεσώ του Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Αποδεχθήκατε το αίτημα επαφής από %@"; /* No comment provided by engineer. */ @@ -1150,7 +1342,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Θα χρειαστείτε αυτή τη φράση ανάκτησης για να αποκτήσετε πρόσβαση στα χρήματά σας εάν αυτή η συσκευή χαθεί, καταστραφεί ή εάν το Πορτοφόλι Dash απεγκατασταθει τυχαία από αυτήν τη συσκευή."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Το DashPay Username σας είναι έτοιμο για χρήση"; /* No comment provided by engineer. */ diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index b581d623e..9a7dc7fb6 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -166,12 +167,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Close App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Confirm"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Enter the amount to transfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "History"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Import private key…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Invalid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +509,10 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; -/* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +531,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -499,13 +561,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ "Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Manage Trusted Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +586,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,15 +613,19 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -562,7 +638,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +669,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Pay"; /* No comment provided by engineer. */ @@ -625,15 +721,22 @@ /* No comment provided by engineer. */ "Payments" = "Payments"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Pending"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -658,12 +761,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -673,6 +782,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -718,6 +830,12 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -727,6 +845,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; @@ -760,6 +881,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -889,6 +1013,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Skip"; @@ -910,7 +1037,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Spending Confirmation"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1122,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1149,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1027,6 +1200,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1051,6 +1227,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Very High"; @@ -1066,12 +1245,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Wallet disabled"; @@ -1117,7 +1308,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1342,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index d1dba899d..7842e9ca5 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ no está permitido a acceder al Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Procesando el pago"; /* No comment provided by engineer. */ @@ -163,16 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Cancelar"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Cambia"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "¿Cambiar monto de pago?"; /* No comment provided by engineer. */ -"Change PIN" = "Cambiar PIN"; +"Change Payout Address" = "Change Payout Address"; + +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; /* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; + "Check your connection" = "Verifique tu conección"; /* Choose your Dash username */ @@ -193,6 +204,15 @@ /* No comment provided by engineer. */ "Close App" = "Cerrar App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Confirmar"; @@ -230,7 +250,10 @@ "Continue" = "Continuar"; /* No comment provided by engineer. */ -"Copied" = "Copiado"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Copiar"; @@ -274,6 +297,9 @@ /* No comment provided by engineer. */ "Date" = "Fecha"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Moneda predeterminada, atajos, acerca..."; @@ -310,30 +336,59 @@ /* No comment provided by engineer. */ "Enter" = "Ingresa"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Ingresar PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Ingresar Frase de Recuperación"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Ingresar la cantidad a transferir"; +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ingresar tu código 2FA debajo"; /* No comment provided by engineer. */ -"Error" = "Error"; +"Enter your 2FA code below" = "Ingresa tu código 2FA debajo"; /* No comment provided by engineer. */ +"Error" = "Error"; + "Error Upgrading" = "Error al actualizar"; /* No comment provided by engineer. */ "Exit" = "Sali"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Límite de Face ID"; @@ -397,7 +452,8 @@ /* No comment provided by engineer. */ "History" = "Historial"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Yo acepto"; /* No comment provided by engineer. */ @@ -424,6 +480,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Barrer billetera de papel..."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Fondos insuficientes"; @@ -433,27 +492,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Movido internamente para"; -/* Invalid transaction */ -"Invalid" = "Inválido"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "Solicitud de pago inválida"; /* No comment provided by engineer. */ "Invalid QR Code" = "Codigo QR invalido"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "Es importante"; /* No comment provided by engineer. */ "Join Evolution" = "Únete a Evolution"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Par de llaves %Id"; @@ -473,7 +539,10 @@ "Local Currency" = "Moneda Local"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Cantidad local solicitada: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Asegurado"; @@ -499,16 +568,26 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Mantener presionado para copiar ID"; -/* adjective, security level */ -"Low" = "Bajo"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Gerenciar nodo de confianza"; +"Masternode Features" = "Masternode Features"; + +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + /* No comment provided by engineer. */ "masternode list #%d of %d" = "Lista de masternode #%1$d de %2$d"; /* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + "Masternode Registration" = "Registro de Masternode"; /* No comment provided by engineer. */ @@ -517,6 +596,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Actualizar Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Máximo"; @@ -541,9 +623,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Movido a la Dirección"; -/* No comment provided by engineer. */ "My Contacts" = "Mis contactos"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Nombre"; @@ -551,18 +634,25 @@ "Network" = "Red de trabajo"; /* No comment provided by engineer. */ -"Network fee" = "Comisión de red"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Nuevo"; /* No comment provided by engineer. */ -"NFC device" = "Dispositivo NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "El dispositivo NFC no transmitió una dirección válida de Dash"; +"No address copied" = "Ninguna dirección copiada"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP del Nodo"; /* adjective, security level */ @@ -589,18 +679,37 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Llaves de operador"; /* No comment provided by engineer. */ -"Owner Address" = "Dirección de Propietario"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Llaves del propietario"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Pagar"; +/* No comment provided by engineer. */ +"Pay and get paid instantly with easy to use payment flows" = "Pague y reciba instantáneamente con flujos de pagos fáciles de usar"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Paga y recibe instantáneamente con flujos de pagos fáciles de usar"; @@ -623,7 +732,10 @@ "Paying..." = "Pagando..."; /* No comment provided by engineer. */ -"Payments" = "Pago"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Pendiente"; @@ -631,9 +743,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN siempre será requerido para realizar un pago"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Por favor ingrese su PIN para actualizar la billetera"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Coloca tu teléfono cerca del dispositivo NFC."; @@ -659,11 +777,17 @@ "Please write it down" = "Anótala, por favor"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Usado anteriormente en la dirección de IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Llave privada"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Procesando"; @@ -673,6 +797,9 @@ /* No comment provided by engineer. */ "Public key" = "Llave pública"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Recibir Rápidamente "; @@ -718,15 +845,24 @@ /* Button title, Register (username) */ "Register" = "Registro"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrarse?"; /* No comment provided by engineer. */ -"Registered from" = "Registrado de"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternodo Registrado"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Reportar un problema"; @@ -760,6 +896,9 @@ /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; @@ -889,6 +1028,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperación"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Salta"; @@ -910,7 +1052,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Confirmación de Gasto"; +"Step 1" = "Step 1"; + /* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Pasos para reproducir el fallo"; + "Support" = "Soporte"; /* No comment provided by engineer. */ @@ -985,9 +1137,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Límite de Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "id de transacción"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transferencia"; @@ -1006,15 +1164,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "No fue posible conectarse"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* 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. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Documento no soportado o corrupto"; /* No comment provided by engineer. */ "Unsupported URL" = "Dirección no soportada"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Actualizado: %@"; @@ -1028,10 +1216,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Utilizado"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Utilizado en la dirección de IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Nombre de usuario ya ha sido tomado"; @@ -1051,6 +1242,12 @@ /* No comment provided by engineer. */ "Verify" = "Verificar"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; + /* adjective, security level */ "Very High" = "Muy alto"; @@ -1066,14 +1263,27 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ver frase de recuperación"; +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + "Voting Address" = "Dirección de voto"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; /* No comment provided by engineer. */ -"Wallet disabled" = "Billetera deshabilitada"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Llaves de billetera"; @@ -1117,7 +1327,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "con la blockchain de Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Aceptaste la solicitud de contacto de %@"; /* No comment provided by engineer. */ @@ -1150,7 +1361,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Necesitarás esta frase de recuperación para acceder a tus fondos si este dispositivo se pierde, daña o si la billetera de Dash se desinstala accidentalmente de este dispositivo."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Tu nombre de usuario de DashPay está listo para usar"; /* No comment provided by engineer. */ diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index fd34b7d90..07719a8f2 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ n'est pas autorisé à accéder à Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Traitement du paiement"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Annuler"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Modifier"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Modifier le montant du paiement ?"; /* No comment provided by engineer. */ -"Change PIN" = "Modifier le code PIN"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Vérifier votre connexion"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choisissez votre"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Fermer l'application"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Confirmer"; @@ -230,7 +249,10 @@ "Continue" = "Continuer"; /* No comment provided by engineer. */ -"Copied" = "Copié"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Copier"; @@ -275,7 +297,10 @@ "Date" = "Date"; /* No comment provided by engineer. */ -"Default currency, shortcuts, about…" = "Monnaie par défaut, raccourcis, à propos…"; +"Default" = "Default"; + +/* No comment provided by engineer. */ +"Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; /* No comment provided by engineer. */ "DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash)." = "SÉCURITÉ DE L'APPAREIL COMPROMISE\nN'importe quelle application débridée peut accéder aux données du trousseau des autres applis (et voler vos dashs)."; @@ -310,9 +335,27 @@ /* No comment provided by engineer. */ "Enter" = "Saisir"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Saisissez le code PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Saisissez la phrase de récupération"; @@ -320,20 +363,36 @@ "Enter the amount to transfer" = "Saisissez le montant à transférer"; /* No comment provided by engineer. */ -"Enter your 2FA code below" = "Tapez ci-dessous votre code 2FA"; +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; /* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Tapez ci-dessous votre code 2FA"; + "Error" = "Erreur"; /* No comment provided by engineer. */ "Error Upgrading" = "Erreur pendant la mise à jour"; +"Exit" = "Exit"; + /* No comment provided by engineer. */ "Exit" = "Quitter"; /* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + +/* No comment provided by engineer. */ +"Face ID limit" = "Limite pour FaceID"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite pour Face ID"; @@ -397,7 +456,8 @@ /* No comment provided by engineer. */ "History" = "Historique"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "J'accepte"; /* No comment provided by engineer. */ @@ -424,6 +484,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importer une clé privée…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Fonds insuffisants"; @@ -433,27 +496,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Déplacé en interne vers"; -/* Invalid transaction */ -"Invalid" = "Invalide"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "Demande de paiement invalide"; /* No comment provided by engineer. */ "Invalid QR Code" = "QR-code non valide"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "C'est important"; /* No comment provided by engineer. */ "Join Evolution" = "Rejoindre Evolution"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Paire de clés %ld"; @@ -473,7 +543,10 @@ "Local Currency" = "Monnaie locale"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Montant local demandé : %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Verrouillé"; @@ -499,15 +572,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Touchez longuement pour copier l'ID"; -/* adjective, security level */ -"Low" = "Bas"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Gérer un nœud de confiance"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "liste de masternodes #%1$d sur %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Enregistrement de masternode"; @@ -517,6 +600,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Mettre à jour un masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Maximum"; @@ -541,9 +627,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Déplacé vers l'adresse"; -/* No comment provided by engineer. */ "My Contacts" = "Mes contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Nom"; @@ -551,18 +638,25 @@ "Network" = "Réseau"; /* No comment provided by engineer. */ -"Network fee" = "Frais de réseau"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Nouveau"; /* No comment provided by engineer. */ -"NFC device" = "Appareil NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "l'appareil NFC n'a pas transmis une adresse Dash valide"; +"No address copied" = "Aucune adresse copiée"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP du nœud"; /* adjective, security level */ @@ -589,16 +683,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Clés d'opérateur"; /* No comment provided by engineer. */ -"Owner Address" = "Adresse du propriétaire"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Clés de propriétaire"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Payer"; /* No comment provided by engineer. */ @@ -623,7 +733,10 @@ "Paying..." = "Paiement en cours..."; /* No comment provided by engineer. */ -"Payments" = "Paiements"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "En attente"; @@ -631,9 +744,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Le code PIN est toujours demandé pour faire un paiement"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Veuillez saisir votre code PIN pour mettre à jour le portefeuille"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Veuillez placer votre téléphone près de l'appareil NFC."; @@ -659,11 +778,17 @@ "Please write it down" = "Veuillez l'écrire quelque part"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Utilisé précédemment à l'adresse IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Clé privée"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "En cours"; @@ -673,6 +798,9 @@ /* No comment provided by engineer. */ "Public key" = "Clé publique"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Réception rapide"; @@ -718,15 +846,24 @@ /* Button title, Register (username) */ "Register" = "Enregistrer"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Enregistrer ?"; /* No comment provided by engineer. */ -"Registered from" = "Enregistré depuis"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternode enregistré"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Signaler un problème"; @@ -760,6 +897,9 @@ /* No comment provided by engineer. */ "Rewards" = "Récompenses"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scanner"; @@ -889,6 +1029,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Voir la phase de récupération"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Ignorer"; @@ -910,7 +1053,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Confirmation de dépense"; +"Step 1" = "Step 1"; + /* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Étapes pour reproduire le plantage"; + "Support" = "Aide"; /* No comment provided by engineer. */ @@ -985,9 +1138,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite pour TouchID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Identifiant de transaction"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transférer"; @@ -1006,15 +1165,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Impossible de se connecter"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* 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. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Document non compatible ou endommagé"; /* No comment provided by engineer. */ "Unsupported URL" = "URL non compatible"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Mis à jour : %@"; @@ -1028,10 +1217,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Utilisé"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Utilisé à l'adresse IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Nom d'utilisateur déjà pris"; @@ -1051,8 +1243,11 @@ /* No comment provided by engineer. */ "Verify" = "Vérifier"; -/* adjective, security level */ -"Very High" = "Très élevé"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Tout voir"; @@ -1067,13 +1262,25 @@ "View Recovery Phrase" = "Voir la phrase de récupération"; /* No comment provided by engineer. */ -"Voting Address" = "Adresse de vote"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; /* No comment provided by engineer. */ -"Wallet disabled" = "Portefeuille désactivé"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Clés de portefeuille"; @@ -1117,7 +1324,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "avec la blockchain Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Vous avez accepté la demande de contact de %@"; /* No comment provided by engineer. */ @@ -1150,7 +1358,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Vous aurez besoin de cette phrase de récupération pour accéder à vos fonds si votre appareil est perdu ou endommagé, ou si Dash Wallet en est désinstallé accidentellement."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Votre nom d'utilisateur DashPay est prêt à être utilisé"; /* No comment provided by engineer. */ diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 07e80f2b6..6ec5d05d9 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ tidak diizinkan mengakses Pengenal Sentuh"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Memproses Pembayaran"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Batalkan"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Ubah"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + +/* No comment provided by engineer. */ +"Change payment amount?" = "Change payment amount?"; /* No comment provided by engineer. */ -"Change payment amount?" = "Ubah jumlah pembayaran?"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Change PIN" = "Ubah PIN"; +"Change PIN" = "Change PIN"; /* No comment provided by engineer. */ -"Check your connection" = "Periksa koneksi anda"; +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Pilih Anda"; @@ -194,24 +204,33 @@ "Close App" = "Tutup aplikasi"; /* No comment provided by engineer. */ -"Confirm" = "Memastikan"; +"Collateral Index" = "Collateral Index"; /* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + +/* Confirm */ +"Confirm" = "Memastikan"; + "Confirm & Pay" = "konfirmasi & bayar"; +"Confirm PIN" = "Confirm PIN"; + /* No comment provided by engineer. */ "Confirm PIN" = "Pastikan PIN"; /* No comment provided by engineer. */ -"Confirming" = "Mengkonfirmasikan"; +"Confirming" = "Confirming"; /* No comment provided by engineer. */ -"Connect with third party exchanges" = "Terhubung dengan pertukaran pihak ketiga"; +"Connect with third party exchanges" = "Connect with third party exchanges"; /* No comment provided by engineer. */ "Connected peers: %d" = "Peers yang terhubung: %d"; -/* No comment provided by engineer. */ "Connecting to payment server" = "Mengghubungkan ke server pembayaran"; /* No comment provided by engineer. */ @@ -220,17 +239,25 @@ /* No comment provided by engineer. */ "Contact Requests" = "Permintaan Kontak"; +"Contact Support" = "Contact Support"; + /* No comment provided by engineer. */ "Contact Support" = "Hubungi Dukungan"; /* No comment provided by engineer. */ "Contacts" = "Kontak"; +/* No comment provided by engineer. */ +"Continue" = "Continue"; + /* No comment provided by engineer. */ "Continue" = "Teruskan"; /* No comment provided by engineer. */ -"Copied" = "Disalin"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Salin"; @@ -274,6 +301,9 @@ /* No comment provided by engineer. */ "Date" = "Tanggal"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Mata uang standar, pintasan, tentang ..."; @@ -311,14 +341,41 @@ "Enter" = "Masuk"; /* No comment provided by engineer. */ -"Enter PIN" = "Masukkan PIN"; +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; /* No comment provided by engineer. */ -"Enter Recovery Phrase" = "Masukkan Frasa pemulihan"; +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + +/* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + +/* No comment provided by engineer. */ +"Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Masukkan jumlah yang akan ditransfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Masukkan kode 2FA Anda di bawah ini"; @@ -331,9 +388,10 @@ /* No comment provided by engineer. */ "Exit" = "Keluar"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Identitas wajah terbatas"; @@ -397,7 +455,8 @@ /* No comment provided by engineer. */ "History" = "Riwayat"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Saya terima"; /* No comment provided by engineer. */ @@ -419,10 +478,13 @@ "Immediately" = "Segera"; /* Translate it as short as possible! (24 symbols max) */ -"Import Private Key" = "Impor kunci pribadi"; +"Import Private Key" = "Import Private Key"; + +/* No comment provided by engineer. */ +"Import private key…" = "Import private key…"; /* No comment provided by engineer. */ -"Import private key…" = "Impor kunci pribadi…"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient funds" = "Dana tidak mencukupi"; @@ -436,12 +498,13 @@ /* Invalid transaction */ "Invalid" = "Tidak valid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Permintaan pembayaran tidak valid"; /* No comment provided by engineer. */ "Invalid QR Code" = "Kode QR tidak valid"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +514,10 @@ /* No comment provided by engineer. */ "It's Important" = "Ini penting"; -/* No comment provided by engineer. */ "Join Evolution" = "bergabunglah dengan evolusi"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Mata uang lokal"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Jumlah lokal yang diminta: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Terkunci"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Tekan lama untuk menyalin ID"; -/* adjective, security level */ -"Low" = "Rendah"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Kelola Node Tepercaya"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "daftar masternode #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Pendaftaran Masternode"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Pembaruan Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Terpindah ke Alamat"; -/* No comment provided by engineer. */ "My Contacts" = "Kontak saya"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Nama"; @@ -551,18 +632,25 @@ "Network" = "Jaringan"; /* No comment provided by engineer. */ -"Network fee" = "Biaya jaringan"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Baru"; /* No comment provided by engineer. */ -"NFC device" = "Perangkat NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Perangkat NFC tidak mengirimkan alamat Dash yang valid"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Kunci Operator"; /* No comment provided by engineer. */ -"Owner Address" = "Alamat pemilik"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Kunci Pemilik"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Bayar"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Membayar..."; /* No comment provided by engineer. */ -"Payments" = "Pembayaran"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Tertunda"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN selalu diperlukan untuk melakukan pembayaran"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Silakan masukkan PIN untuk meningkatkan dompet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Silakan letakkan ponsel Anda di dekat perangkat NFC."; @@ -659,11 +772,17 @@ "Please write it down" = "Tolong catat"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Sebelumnya digunakan di alamat IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Kunci pribadi"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Sedang diproses"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Kunci publik"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Terima Cepat"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Daftar"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Daftar?"; /* No comment provided by engineer. */ -"Registered from" = "Terdaftar dari"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternode Terdaftar"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Laporkan masalah"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Hadiah"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Pindai"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Tampilkan Frasa pemulihan"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Lewati"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Konfirmasi Pengiriman"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Langkah-langkah untuk mereproduksi kerusakan"; + "Support" = "Dukungan"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "ID sentuhan terbatas"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "ID transaksi"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Tidak dapat terhubung"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Tidak dapat mendapat kode QR baru"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Dokumen yang tidak didukung atau rusak"; /* No comment provided by engineer. */ "Unsupported URL" = "URL tidak didukung"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Diperbarui: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Digunakan"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Digunakan di alamat IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Nama pengguna telah diambil"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Memeriksa"; -/* adjective, security level */ -"Very High" = "Sangat tinggi"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Lihat semua"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Lihat frasa pemulihan"; /* No comment provided by engineer. */ -"Voting Address" = "Alamat pemungutan suara"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; /* No comment provided by engineer. */ -"Wallet disabled" = "Dompet dinonaktifkan"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Kunci Dompet"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "dengan Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Anda menerima permintaan kontak dari %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Anda akan memerlukan frasa pemulihan ini untuk mengakses dana Anda jika perangkat ini hilang, rusak, atau jika Dash Wallet secara tidak sengaja dihapus dari perangkat ini."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Nama Pengguna DashPay Anda siap digunakan"; /* No comment provided by engineer. */ diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 74d527791..e84dbc4f8 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ non hai dato il permesso al sensore biometrico digitale"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Pagamento in elaborazione"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Cancella"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Cambiare"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Cambiare l'ammontare del pagamento?"; /* No comment provided by engineer. */ -"Change PIN" = "Modificare PIN"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Controlla la connessione"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Scegli il tuo"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Chiudi app"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Conferma"; @@ -230,7 +249,10 @@ "Continue" = "Continua"; /* No comment provided by engineer. */ -"Copied" = "Copiato"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Copia"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Valuta predefinita, scorciatoie, riguardo ..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Immetti"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Immetti il PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Inserisci la Frase di Recupero"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Inserisci l'importo da trasferire"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Inserisci il tuo codice 2FA di seguito"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Esci"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite \"Face ID\""; @@ -397,9 +450,13 @@ /* No comment provided by engineer. */ "History" = "Storia"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Accetto"; +/* No comment provided by engineer. */ +"I accept that I will lose my coins if I no longer possess the recovery phrase" = "accetto di perdere le mie monete se non possiedo la frase di recupero"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Accetto di perdere le mie monete se non possiedo la frase di recupero"; @@ -424,6 +481,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importa chiave privata…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Fondi insufficenti"; @@ -433,8 +493,8 @@ /* No comment provided by engineer. */ "Internally moved to" = "Trasferito internamente a"; -/* Invalid transaction */ -"Invalid" = "Non valido"; +/* No comment provided by engineer. */ +"Invalid" = "Invalid"; /* No comment provided by engineer. */ "Invalid Payment Request" = "Richiesta di pagamento invalida"; @@ -442,6 +502,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code Non Valido"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +514,10 @@ /* No comment provided by engineer. */ "It's Important" = "È importante"; -/* No comment provided by engineer. */ "Join Evolution" = "Aderisci a Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Moneta Locale"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Quantità locale richiesta: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Bloccato"; @@ -493,21 +560,31 @@ /* a verb, Logout Immediately */ "Logout" = "Logout"; -/* Logout after 5 min */ -"Logout after" = "posponi il Logout"; +/* No comment provided by engineer. */ +"Logout after" = "Logout after"; /* No comment provided by engineer. */ -"Long press to copy ID" = "Tieni premuto per copiare l'ID"; +"Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ -"Low" = "Basso"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Gestisci Nodo Affidabile"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "lista masternode #%1$d di %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Registrazione Masternode"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aggiornamento Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Massimo"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Spostato in Indirizzo"; -/* No comment provided by engineer. */ "My Contacts" = "I miei contatti"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Nome"; @@ -551,18 +632,25 @@ "Network" = "Network"; /* No comment provided by engineer. */ -"Network fee" = "Commissione di rete"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Nuovo"; /* No comment provided by engineer. */ -"NFC device" = "Dispositivo NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Il dispositivo NFC non ha trasmesso un indirizzo Dash valido"; +"No address copied" = "Nessun indirizzo copiato"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP Nodo"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chiavi operatore"; /* No comment provided by engineer. */ -"Owner Address" = "Indirizzo del proprietario"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Chiavi proprietario"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Paga"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Pagamento in corso..."; /* No comment provided by engineer. */ -"Payments" = "Pagamenti"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "In attesa"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Il PIN è sempre richiesto per effettuare un pagamento"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Inserisci il PIN per aggiornare il portafoglio"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Perfavore posiziona il tuo telefono vicino al dispositivo NFC."; @@ -659,11 +772,17 @@ "Please write it down" = "Per favore scrivilo di seguito"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Utilizzato in precedenza all'indirizzo IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Chiave privata"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "In lavorazione"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Chiave pubblica"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Rapido Ricevi"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Registrati"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrato?"; /* No comment provided by engineer. */ -"Registered from" = "Registrato da"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternode registrato"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Segnala un problema"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ricompense"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scansiona"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostra la frase di recupero"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Salta"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Conferma della spesa"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Passi per riprodurre il crash"; + "Support" = "Supporto"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite \"Touch ID\""; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "id Transazione"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Trasferimento"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Impossibile connetersi"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Impossibile ottenere un nuovo codice QR"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Documento non supportato o corrotto"; /* No comment provided by engineer. */ "Unsupported URL" = "URL non supportato"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aggiornato %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Usato"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Utilizzato all'indirizzo IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Username già in uso"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Verifica"; -/* adjective, security level */ -"Very High" = "Molto Alto"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Mostra tutto"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Visualizza la frase di recupero"; /* No comment provided by engineer. */ -"Voting Address" = "Indirizzo di voto"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; /* No comment provided by engineer. */ -"Wallet disabled" = "Portafoglio disabilitato"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Chiavi Portafoglio"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "con blockchain Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Hai accettato la richiesta di contatto di %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Questa frase di recupero sarà necessaria per accedere ai tuoi fondi in caso di smarrimento, danneggiamento del dispositivo o in caso di disinstallazione accidentale del Wallet Dash da questo dispositivo."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Il tuo nome utente DashPay è pronto per l'uso"; /* No comment provided by engineer. */ diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 0d0a49aab..169c4753c 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@はTouch IDへのアクセスが許可されていません"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -166,14 +167,23 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "変更する"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "支払い金額を変更する"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "PINを変更する"; /* No comment provided by engineer. */ -"Check your connection" = "接続を確認してください"; +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "アプリを閉じる"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "確認する"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "続ける"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "コピーされた"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "日付け"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "初期設定の通貨、ショートカット、...について"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "入力"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "PINを入力してください"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "復元フレーズを入力してください"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "送金額を入力してください"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "下に2FAコードを入力してください"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "終了する"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face IDの送金可能額"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "履歴"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "秘密鍵をインポート…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "資金不足"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "内部で移転"; -/* Invalid transaction */ -"Invalid" = "無効"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "無効な支払のリクエスト"; /* No comment provided by engineer. */ "Invalid QR Code" = "無効なQRコード"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "それが重要です"; /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = " %ldキーペア"; @@ -473,7 +537,10 @@ "Local Currency" = "通貨表示"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "現地通貨の請求金額: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "ロック済み"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "長押しでIDをコピーする"; -/* adjective, security level */ -"Low" = "低"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "信頼できるノードを管理する"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "マスターノードの登録"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "マスターノードのアップデート"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "最大"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "アドレスへ移動した"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; @@ -551,18 +632,25 @@ "Network" = "ネットワーク"; /* No comment provided by engineer. */ -"Network fee" = "ネットワーク手数料"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "New"; /* No comment provided by engineer. */ -"NFC device" = "NFCデバイス"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFCデバイスは有効なDashアドレスを送信しませんでした"; +"No address copied" = "アドレスがコピーされていません"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "ノードIP"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "運用者の諸々のキー"; /* No comment provided by engineer. */ -"Owner Address" = "所有者の諸々のキー"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "所有者の諸々のキー"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "支払う"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "支払い中…"; /* No comment provided by engineer. */ -"Payments" = "お支払い"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "保留中"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "お支払いにはPINが必要です"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "ウォレットをアップグレードするためPINを入力してください"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "あなたの携帯電話をNFCデバイスに近づけてください"; @@ -659,11 +772,17 @@ "Please write it down" = "紙に書き留めて下さい"; /* No comment provided by engineer. */ -"Previously used at IP address" = "IPアドレスで以前使われていた"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "プライベートキー"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "処理中"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "パブリックキー"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "クイック入金"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; /* No comment provided by engineer. */ -"Registered from" = "から登録済み"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "登録済みのマスターノード"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "問題を報告する"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "報酬"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "スキャン"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "復元フレーズを表示する"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "スキップする"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "支出の確認"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "クラッシュを再現する手順"; + "Support" = "サポート"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch IDの送金可能額"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "取引のid"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "送金"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "接続できません"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "新しいQRコードが取得できません"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "サポートされていないか破損しているドキュメント"; /* No comment provided by engineer. */ "Unsupported URL" = "サポートされていないURL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "アップデート: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "使用済み"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "IPアドレスで使用済みです"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Username taken"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "検証する"; -/* adjective, security level */ -"Very High" = " 非常に高い"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "View All"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "復元フレーズを表示する"; /* No comment provided by engineer. */ -"Voting Address" = " 投票のアドレス"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "投票の諸々のキー"; /* No comment provided by engineer. */ -"Wallet disabled" = "ウォレットは機能停止しています"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "ウォレットの諸々のキー"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "Dashのブロックチェーンで"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "この端末を紛失したり故障した場合やこの端末からDashウォレットを\n誤まってアンインストールしてしまった場合に、あなたの資金にアクセス\nするためには、この復元フレーズが必要となります。"; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 59b5340d8..7a1dbcd7a 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@게 터치 ID 접근 권한이 없습니다"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) 지불 처리 중"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "취소"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "변경"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "지불 금액을 변경하시겠습니까?"; /* No comment provided by engineer. */ -"Change PIN" = "PIN 변경"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "연결을 확인하세요"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "다음을 선택하세요"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "앱 닫기"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "승인"; @@ -230,7 +249,10 @@ "Continue" = "계속"; /* No comment provided by engineer. */ -"Copied" = "복사됨"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "복사"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "날짜"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "통화 기본값, 단축키, 관련 정보..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "입력"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "PIN 입력하기"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "복원 문구를 입력하세요"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "송금할 금액을 입력하십시오"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "아래에 귀하의 2FA 코드를 입력하세요"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "나가기"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID 제한"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "내역"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "수락합니다"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "개인 키를 불러옵니다...."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "잔액 부족"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "다음에 내부적으로 이동"; -/* Invalid transaction */ -"Invalid" = "유효하지 않음"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "유효하지 않은 결제 요청"; /* No comment provided by engineer. */ "Invalid QR Code" = "유효하지 않은 QR 코드"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "중요"; /* No comment provided by engineer. */ "Join Evolution" = "에볼루션에 합류합니다"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "키페어 %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "현지 통화"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "요청된 로컬 금액: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "잠김"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "ID를 복사하기 위해서는 길게 누르십시오"; -/* adjective, security level */ -"Low" = "낮음"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "신뢰할 수 있는 노드 관리"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "마스터노드 리스트%2$d 중 #%1$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "마스터노드 등록"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "마스터노드 업데이트"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "최대"; @@ -541,28 +621,37 @@ /* No comment provided by engineer. */ "Moved to Address" = "주소로 이동"; -/* No comment provided by engineer. */ "My Contacts" = "나의 연락처"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "이름"; /* No comment provided by engineer. */ "Network" = "네트워크"; +"Network error" = "Network error"; + /* No comment provided by engineer. */ +"Network fee" = "Network fee"; + "Network fee" = "네트워크 수수료"; /* (List of) New (notifications) */ "New" = "새로운 알림"; /* No comment provided by engineer. */ -"NFC device" = "NFC 장치"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC 장치가 유효한 대시 주소를 전송하지 못했습니다"; +"No address copied" = "클립보드에 복사된 주소가 없습니다"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "노드 IP"; /* adjective, security level */ @@ -589,16 +678,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "%@ 님이 당신의 요청을 수락하면 사용자 이름에 직접 지불할 수 있습니다"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "운영자 키"; /* No comment provided by engineer. */ -"Owner Address" = "소유자 주소"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "소유자 키"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "지불"; /* No comment provided by engineer. */ @@ -623,7 +728,10 @@ "Paying..." = "지불 중..."; /* No comment provided by engineer. */ -"Payments" = "지불"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "대기 중"; @@ -631,9 +739,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "지불을 처리하기 위해서는 언제나 PIN이 필요합니다"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "지갑을 업그레이드하시려면 PIN을 입력하십시오"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "휴대 전화를 NFC 기기 가까이에 두십시오."; @@ -659,11 +773,17 @@ "Please write it down" = "적어주세요"; /* No comment provided by engineer. */ -"Previously used at IP address" = "IP 주소에서 이전에 사용됨"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "비밀 키"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "처리 중"; @@ -673,6 +793,9 @@ /* No comment provided by engineer. */ "Public key" = "공개 키"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "빠른 송금 수령"; @@ -718,15 +841,24 @@ /* Button title, Register (username) */ "Register" = "등록"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "등록합니까?"; /* No comment provided by engineer. */ -"Registered from" = "다음으로부터 등록되었습니다"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "등록된 마스터노드"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "오류 보고하기"; @@ -760,6 +892,9 @@ /* No comment provided by engineer. */ "Rewards" = "리워드"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "스캔"; @@ -889,6 +1024,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "복원 문구 확인하기"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "건너뛰기"; @@ -910,7 +1048,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "승인 보내는 중"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "충돌 복사본 생성 방법"; + "Support" = "지원"; /* No comment provided by engineer. */ @@ -985,9 +1133,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "터치 ID 제한"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "거래 ID"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "송금"; @@ -1006,15 +1160,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "연결할 수 없습니다"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "새로운 QR 코드를 불러올 수 없습니다"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "지원되지 않거나 손상된 문서"; /* No comment provided by engineer. */ "Unsupported URL" = "지원되지 않는 URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "업데이트됨: %@"; @@ -1028,10 +1212,13 @@ "Uphold" = "업홀드"; /* No comment provided by engineer. */ -"Used" = "사용됨"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "이 IP 주소에서 사용됨"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "이미 사용 중인 사용자 이름"; @@ -1051,8 +1238,11 @@ /* No comment provided by engineer. */ "Verify" = "인증하기"; -/* adjective, security level */ -"Very High" = "매우 높음"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "모두 보기"; @@ -1067,13 +1257,25 @@ "View Recovery Phrase" = "복구 문구 확인"; /* No comment provided by engineer. */ -"Voting Address" = "투표 주소"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; /* No comment provided by engineer. */ -"Wallet disabled" = "지갑 사용 중지됨"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "지갑 키"; @@ -1117,7 +1319,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "대시 블록체인을 통해"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "%@ 님으로부터의 연락처 요청을 수락하였습니다"; /* No comment provided by engineer. */ @@ -1150,7 +1353,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "이 기기를 분실하거나 기기가 파손되는 경우, 혹은 대시 지갑이 이 기기에서 실수로 삭제되는 경우에는 당신의 자금에 접근하기 위해서 이 복구 문구가 필요합니다."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "당신의 대시페이 사용자 이름을 사용할 수 있습니다"; /* No comment provided by engineer. */ diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings new file mode 100644 index 000000000..b8ec60eca --- /dev/null +++ b/DashWallet/nb.lproj/Localizable.strings @@ -0,0 +1,1376 @@ +/* No comment provided by engineer. */ +"%@ is not allowed to access Face ID" = "%@ is not allowed to access Face ID"; + +/* No comment provided by engineer. */ +"%@ is not allowed to access the camera" = "%@ har ikke tilgang til kameraet"; + +/* No comment provided by engineer. */ +"%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; + +/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + +/* No comment provided by engineer. */ +"1 hour" = "1 hour"; + +/* Shorten version of minute */ +"1 min" = "1 min"; + +/* No comment provided by engineer. */ +"24 hours" = "24 hours"; + +/* Shorten version of minutes */ +"5 min" = "5 min"; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word" = "\"%@\" er ikke et ord i gjenopprettingsfrasen"; + +/* No comment provided by engineer. */ +"\ntry again in %@" = "\ntry again in %@"; + +/* No comment provided by engineer. */ +"A device passcode is needed to safeguard your wallet. Go to settings and turn passcode on to continue." = "A device passcode is needed to safeguard your wallet. Go to settings and turn passcode on to continue."; + +/* No comment provided by engineer. */ +"About" = "About"; + +/* Translate it as short as possible! (24 symbols max) */ +"Add Shortcut" = "Add Shortcut"; + +/* No comment provided by engineer. */ +"Address" = "Address"; + +/* No comment provided by engineer. */ +"Advanced Security" = "Advanced Security"; + +/* No comment provided by engineer. */ +"All" = "All"; + +/* No comment provided by engineer. */ +"Allow camera access in Settings" = "Allow camera access in Settings"; + +/* No comment provided by engineer. */ +"Allow Face ID access in Settings" = "Allow Face ID access in Settings"; + +/* No comment provided by engineer. */ +"Allow Touch ID access in Settings" = "Allow Touch ID access in Settings"; + +/* No comment provided by engineer. */ +"Amount Received" = "Amount Received"; + +/* No comment provided by engineer. */ +"Amount Sent" = "Amount Sent"; + +/* No comment provided by engineer. */ +"Amount too small" = "Amount too small"; + +/* No comment provided by engineer. */ +"An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; + +/* No comment provided by engineer. */ +"Application %@ is requesting a payment to" = "Application %@ is requesting a payment to"; + +/* No comment provided by engineer. */ +"Application %@ is requesting an address so it can pay you. Would you like to authorize this?" = "Application %@ is requesting an address so it can pay you. Would you like to authorize this?"; + +/* No comment provided by engineer. */ +"Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; + +/* No comment provided by engineer. */ +"Are you sure?" = "Are you sure?"; + +/* No comment provided by engineer. */ +"Authentication is unvailable" = "Authentication is unvailable"; + +/* No comment provided by engineer. */ +"Auto Logout" = "Auto Logout"; + +/* No comment provided by engineer. */ +"Autohide Balance" = "Autohide Balance"; + +/* lowercase, ex. 4 Dash available */ +"available" = "available"; + +/* No comment provided by engineer. */ +"Available balance" = "Available balance"; + +/* No comment provided by engineer. */ +"Backup Wallet" = "Backup Wallet"; + +/* No comment provided by engineer. */ +"Bad recovery phrase" = "Bad recovery phrase"; + +/* No comment provided by engineer. */ +"Balance hidden" = "Balance hidden"; + +/* No comment provided by engineer. */ +"block #%d of %d" = "blokk #%1$d of %2$d"; + +/* No comment provided by engineer. */ +"Block #%d of %d" = "Block #%1$d of %2$d"; + +/* No comment provided by engineer. */ +"Buy & Sell Dash" = "Buy & Sell Dash"; + +/* Translate it as short as possible! (24 symbols max) */ +"Buy / Sell Dash" = "Buy / Sell Dash"; + +/* No comment provided by engineer. */ +"Buy Dash" = "Buy Dash"; + +/* No comment provided by engineer. */ +"Buy Dash with Uphold account" = "Buy Dash with Uphold account"; + +/* 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."; + +/* No comment provided by engineer. */ +"Cancel" = "Cancel"; + +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + +/* No comment provided by engineer. */ +"Change payment amount?" = "Change payment amount?"; + +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + +/* No comment provided by engineer. */ +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; + +/* No comment provided by engineer. */ +"Clear" = "Clear"; + +/* No comment provided by engineer. */ +"Clear trusted node?" = "Clear trusted node?"; + +/* No comment provided by engineer. */ +"Clipboard doesn't contain a valid Dash address" = "Clipboard doesn't contain a valid Dash address"; + +/* No comment provided by engineer. */ +"Close" = "Close"; + +/* No comment provided by engineer. */ +"Close App" = "Close App"; + +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + +/* Confirm */ +"Confirm" = "Confirm"; + +/* No comment provided by engineer. */ +"Confirm PIN" = "Confirm PIN"; + +/* No comment provided by engineer. */ +"Confirming" = "Confirming"; + +/* No comment provided by engineer. */ +"Connect with third party exchanges" = "Connect with third party exchanges"; + +/* No comment provided by engineer. */ +"Connected peers: %d" = "Connected peers: %d"; + +/* No comment provided by engineer. */ +"Contact Support" = "Contact Support"; + +/* No comment provided by engineer. */ +"Continue" = "Continue"; + +/* No comment provided by engineer. */ +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; + +/* No comment provided by engineer. */ +"Copy" = "Copy"; + +/* No comment provided by engineer. */ +"Copy Logs" = "Copy Logs"; + +/* No comment provided by engineer. */ +"Copyright © 2020 Dash Core" = "Copyright © 2020 Dash Core"; + +/* No comment provided by engineer. */ +"Couldn't make payment" = "Couldn't make payment"; + +/* No comment provided by engineer. */ +"Couldn't sweep balance" = "Couldn't sweep balance"; + +/* 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 Wallet" = "Create a New Wallet"; + +/* No comment provided by engineer. */ +"Dash payments can't be less than %@" = "Dash payments can't be less than %@"; + +/* No comment provided by engineer. */ +"Date" = "Date"; + +/* No comment provided by engineer. */ +"Default" = "Default"; + +/* No comment provided by engineer. */ +"Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; + +/* No comment provided by engineer. */ +"DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash)." = "DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash)."; + +/* No comment provided by engineer. */ +"DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash). Wipe this wallet immediately and restore on a secure device." = "DEVICE SECURITY COMPROMISED\nAny 'jailbreak' app can access any other app's keychain data (and steal your Dash). Wipe this wallet immediately and restore on a secure device."; + +/* No comment provided by engineer. */ +"Done" = "Done"; + +/* ex., Download peer: 127.0.0.1:9999 */ +"Download peer: %@" = "Download peer: %@"; + +/* No comment provided by engineer. */ +"Enable Face ID" = "Enable Face ID"; + +/* No comment provided by engineer. */ +"Enable Receive Notifications" = "Enable Receive Notifications"; + +/* No comment provided by engineer. */ +"Enable Touch ID" = "Enable Touch ID"; + +/* No comment provided by engineer. */ +"Enter" = "Enter"; + +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + +/* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + +/* No comment provided by engineer. */ +"Enter Recovery Phrase" = "Enter Recovery Phrase"; + +/* No comment provided by engineer. */ +"Enter the amount to transfer" = "Enter the amount to transfer"; + +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Enter your 2FA code below"; + +/* No comment provided by engineer. */ +"Exit" = "Exit"; + +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + +/* No comment provided by engineer. */ +"Face ID limit" = "Face ID limit"; + +/* No comment provided by engineer. */ +"Failed wallet update" = "Failed wallet update"; + +/* No comment provided by engineer. */ +"Fee" = "Fee"; + +/* No comment provided by engineer. */ +"Fee is greater than balance" = "Fee is greater than balance"; + +/* No comment provided by engineer. */ +"Fee will be deducted from requested amount." = "Fee will be deducted from requested amount."; + +/* No comment provided by engineer. */ +"Filter Transactions" = "Filter Transactions"; + +/* No comment provided by engineer. */ +"Forgot PIN?" = "Forgot PIN?"; + +/* No comment provided by engineer. */ +"Get Started" = "Get Started"; + +/* No comment provided by engineer. */ +"Go to Website" = "Go to Website"; + +/* No comment provided by engineer. */ +"Have complete control and customize your wallet based on your needs" = "Have complete control and customize your wallet based on your needs"; + +/* No comment provided by engineer. */ +"Help us improve your experience" = "Help us improve your experience"; + +/* No comment provided by engineer. */ +"High" = "High"; + +/* No comment provided by engineer. */ +"History" = "History"; + +/* No comment provided by engineer. */ +"Host" = "Host"; + +/* No comment provided by engineer. */ +"I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; + +/* No comment provided by engineer. */ +"I wrote it down" = "I wrote it down"; + +/* No comment provided by engineer. */ +"If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device." = "If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device."; + +/* 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: \"%@\""; + +/* No comment provided by engineer. */ +"Ignore" = "Ignore"; + +/* No comment provided by engineer. */ +"Immediately" = "Immediately"; + +/* Translate it as short as possible! (24 symbols max) */ +"Import Private Key" = "Import Private Key"; + +/* No comment provided by engineer. */ +"Import private key…" = "Import private key…"; + +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + +/* No comment provided by engineer. */ +"Insufficient funds" = "Insufficient funds"; + +/* Transaction within the wallet, transfer of own funds */ +"Internal Transfer" = "Internal Transfer"; + +/* No comment provided by engineer. */ +"Internally moved to" = "Internally moved to"; + +/* No comment provided by engineer. */ +"Invalid" = "Invalid"; + +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + +/* No comment provided by engineer. */ +"It's Important" = "It's Important"; + +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + +/* No comment provided by engineer. */ +"Keypair %ld" = "Keypair %ld"; + +/* No comment provided by engineer. */ +"Link Uphold Account" = "Link Uphold Account"; + +/* No comment provided by engineer. */ +"Load more" = "Load more"; + +/* Translate it as short as possible! (24 symbols max) */ +"Local Currency" = "Local Currency"; + +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; + +/* No comment provided by engineer. */ +"Locked" = "Locked"; + +/* No comment provided by engineer. */ +"Log Out" = "Log Out"; + +/* No comment provided by engineer. */ +"Log out from Uphold" = "Log out from Uphold"; + +/* No comment provided by engineer. */ +"Login with Face ID" = "Login with Face ID"; + +/* No comment provided by engineer. */ +"Login with Touch ID" = "Login with Touch ID"; + +/* No comment provided by engineer. */ +"Logout" = "Logout"; + +/* No comment provided by engineer. */ +"Logout after" = "Logout after"; + +/* No comment provided by engineer. */ +"Long press to copy ID" = "Long press to copy ID"; + +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; + +/* No comment provided by engineer. */ +"Manage Trusted Node" = "Manage Trusted Node"; + +/* No comment provided by engineer. */ +"Masternode Features" = "Masternode Features"; + +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + +/* No comment provided by engineer. */ +"Masternode Revocation" = "Masternode Revocation"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + +/* Contracted variant of 'Maximum' word */ +"Max" = "Max"; + +/* No comment provided by engineer. */ +"Medium" = "Medium"; + +/* No comment provided by engineer. */ +"More" = "More"; + +/* No comment provided by engineer. */ +"More Control" = "More Control"; + +/* No comment provided by engineer. */ +"Moved from" = "Moved from"; + +/* No comment provided by engineer. */ +"Moved to Address" = "Moved to Address"; + +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + +/* No comment provided by engineer. */ +"Network" = "Network"; + +/* No comment provided by engineer. */ +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; + +/* No comment provided by engineer. */ +"NFC device" = "NFC device"; + +/* No comment provided by engineer. */ +"NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; + +/* No comment provided by engineer. */ +"No address copied" = "No address copied"; + +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + +/* No comment provided by engineer. */ +"Node IP" = "Node IP"; + +/* No comment provided by engineer. */ +"None" = "None"; + +/* No comment provided by engineer. */ +"Not a Dash QR code" = "Not a Dash QR code"; + +/* No comment provided by engineer. */ +"Not a Dash URL" = "Not a Dash URL"; + +/* No comment provided by engineer. */ +"Not a valid Dash address" = "Not a valid Dash address"; + +/* No comment provided by engineer. */ +"Not yet used" = "Not yet used"; + +/* No comment provided by engineer. */ +"OK" = "OK"; + +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + +/* No comment provided by engineer. */ +"Operator Keys" = "Operator Keys"; + +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + +/* No comment provided by engineer. */ +"Owner Keys" = "Owner Keys"; + +/* No comment provided by engineer. */ +"Owner Private Key" = "Owner Private Key"; + +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + +/* No comment provided by engineer. */ +"Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; + +/* No comment provided by engineer. */ +"Pay with Ease" = "Pay with Ease"; + +/* No comment provided by engineer. */ +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + +/* No comment provided by engineer. */ +"PIN is always required to make a payment" = "PIN is always required to make a payment"; + +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + +/* No comment provided by engineer. */ +"Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; + +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + +/* No comment provided by engineer. */ +"Please place your phone near NFC device." = "Please place your phone near NFC device."; + +/* No comment provided by engineer. */ +"Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; + +/* No comment provided by engineer. */ +"Please try again" = "Please try again"; + +/* No comment provided by engineer. */ +"Please wait for the sync to complete" = "Please wait for the sync to complete"; + +/* No comment provided by engineer. */ +"Please write it down" = "Please write it down"; + +/* No comment provided by engineer. */ +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; + +/* No comment provided by engineer. */ +"Private key" = "Private key"; + +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + +/* No comment provided by engineer. */ +"Processing" = "Processing"; + +/* No comment provided by engineer. */ +"Provider Address" = "Provider Address"; + +/* No comment provided by engineer. */ +"Public key" = "Public key"; + +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + +/* No comment provided by engineer. */ +"Quick Receive" = "Quick Receive"; + +/* No comment provided by engineer. */ +"Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; + +/* ex., Rate 1 US $ = 0.000009 Dash */ +"Rate: %@ = %@" = "Rate: %1$@ = %2$@"; + +/* No comment provided by engineer. */ +"Receive" = "Receive"; + +/* No comment provided by engineer. */ +"Received" = "Received"; + +/* No comment provided by engineer. */ +"Received %@ (%@)" = "Received %1$@ (%2$@)"; + +/* No comment provided by engineer. */ +"Received at" = "Received at"; + +/* No comment provided by engineer. */ +"Received from" = "Received from"; + +/* No comment provided by engineer. */ +"Recover Wallet" = "Recover Wallet"; + +/* No comment provided by engineer. */ +"Recovery Phrase" = "Recovery Phrase"; + +/* No comment provided by engineer. */ +"Recovery phrase doesn't match" = "Recovery phrase doesn't match"; + +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + +/* No comment provided by engineer. */ +"Registered from" = "Registered from"; + +/* No comment provided by engineer. */ +"Registered Masternode" = "Registered Masternode"; + +/* No comment provided by engineer. */ +"Registration" = "Registration"; + +/* Translate it as short as possible! (24 symbols max) */ +"Report an Issue" = "Report an Issue"; + +/* No comment provided by engineer. */ +"Rescan" = "Rescan"; + +/* No comment provided by engineer. */ +"Rescan Blockchain" = "Rescan Blockchain"; + +/* No comment provided by engineer. */ +"Reset" = "Reset"; + +/* No comment provided by engineer. */ +"Reset to Default" = "Reset to Default"; + +/* No comment provided by engineer. */ +"Reset Wallet" = "Reset Wallet"; + +/* No comment provided by engineer. */ +"Retry" = "Retry"; + +/* No comment provided by engineer. */ +"Review & Rate the app" = "Review & Rate the app"; + +/* No comment provided by engineer. */ +"Reward" = "Reward"; + +/* No comment provided by engineer. */ +"Rewards" = "Rewards"; + +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + +/* 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 Code" = "Scan QR Code"; + +/* No comment provided by engineer. */ +"Scan this to Pay" = "Scan this to Pay"; + +/* Translate it as short as possible! (24 symbols max) */ +"Scan to Pay" = "Scan to Pay"; + +/* No comment provided by engineer. */ +"Scan to Send" = "Scan to Send"; + +/* (Pay by) Scanning QR code */ +"Scanning QR code" = "Scanning QR code"; + +/* No comment provided by engineer. */ +"Screenshot detected. New recovery phrase:" = "Screenshot detected. New recovery phrase:"; + +/* 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."; + +/* No comment provided by engineer. */ +"Secure now" = "Secure now"; + +/* Translate it as short as possible! (24 symbols max) */ +"Secure Wallet Now" = "Secure Wallet Now"; + +/* No comment provided by engineer. */ +"Security" = "Security"; + +/* No comment provided by engineer. */ +"Security Level" = "Security Level"; + +/* No comment provided by engineer. */ +"See on Uphold" = "See on Uphold"; + +/* No comment provided by engineer. */ +"Send" = "Send"; + +/* No comment provided by engineer. */ +"Send %@ (%@) from this private key into your wallet? The Dash network will receive a fee of %@ (%@)." = "Send %1$@ (%2$@) from this private key into your wallet? The Dash network will receive a fee of %3$@ (%4$@)."; + +/* Pay by (scanning QR code) */ +"Send by" = "Send by"; + +/* No comment provided by engineer. */ +"Send to" = "Send to"; + +/* Translate it as short as possible! (24 symbols max) */ +"Send to Address" = "Send to Address"; + +/* Translate it as short as possible! (24 symbols max) */ +"Send with NFC" = "Send with NFC"; + +/* 1 out of 4 in the Sending Animation */ +"Sending" = "Sending"; + +/* 2 out of 4 in the Sending Animation */ +"Sending." = "Sending."; + +/* 3 out of 4 in the Sending Animation */ +"Sending.." = "Sending.."; + +/* 4 out of 4 in the Sending Animation */ +"Sending..." = "Sending..."; + +/* No comment provided by engineer. */ +"Sent" = "Sent"; + +/* No comment provided by engineer. */ +"Sent from" = "Sent from"; + +/* No comment provided by engineer. */ +"Sent successfully" = "Sent successfully"; + +/* No comment provided by engineer. */ +"Sent to" = "Sent to"; + +/* No comment provided by engineer. */ +"Set a trusted node" = "Set a trusted node"; + +/* No comment provided by engineer. */ +"Set PIN" = "Set PIN"; + +/* No comment provided by engineer. */ +"Settings" = "Innstillinger"; + +/* No comment provided by engineer. */ +"Setup Wallet" = "Setup Wallet"; + +/* No comment provided by engineer. */ +"Share" = "Share"; + +/* No comment provided by engineer. */ +"Show Masternode Keys" = "Show Masternode Keys"; + +/* No comment provided by engineer. */ +"Show Recovery Phrase" = "Show Recovery Phrase"; + +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + +/* No comment provided by engineer. */ +"Skip" = "Skip"; + +/* No comment provided by engineer. */ +"skip" = "skip"; + +/* No comment provided by engineer. */ +"Something went wrong" = "Something went wrong"; + +/* No comment provided by engineer. */ +"Specify Amount" = "Specify Amount"; + +/* No comment provided by engineer. */ +"Spending Confirmation" = "Spending Confirmation"; + +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + +/* No comment provided by engineer. */ +"Swept!" = "Swept!"; + +/* Translate it as short as possible! (24 symbols max) */ +"Switch to Mainnet" = "Switch to Mainnet"; + +/* Translate it as short as possible! (24 symbols max) */ +"Switch to Testnet" = "Switch to Testnet"; + +/* No comment provided by engineer. */ +"Sync Failed" = "Sync Failed"; + +/* Translate it as short as possible! (24 symbols max) */ +"Sync Now" = "Sync Now"; + +/* No comment provided by engineer. */ +"Syncing" = "Syncing"; + +/* Pay using NFC (should be as short as possible) */ +"Tap" = "Tap"; + +/* No comment provided by engineer. */ +"Tap to hide balance" = "Tap to hide balance"; + +/* No comment provided by engineer. */ +"Tap to unhide balance" = "Tap to unhide balance"; + +/* No comment provided by engineer. */ +"There are no transactions to display" = "There are no transactions to display"; + +/* No comment provided by engineer. */ +"This app is open source:" = "This app is open source:"; + +/* No comment provided by engineer. */ +"This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; + +/* No comment provided by engineer. */ +"This recovery phrase is your access to the funds in this wallet." = "This recovery phrase is your access to the funds in this wallet."; + +/* No comment provided by engineer. */ +"This transaction may take several minutes to settle." = "This transaction may take several minutes to settle."; + +/* No comment provided by engineer. */ +"This transaction should settle instantly at no extra fee" = "This transaction should settle instantly at no extra fee"; + +/* 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"; + +/* No comment provided by engineer. */ +"This will move all coins from that wallet to your wallet on this device." = "This will move all coins from that wallet to your wallet on this device."; + +/* No comment provided by engineer. */ +"Tools" = "Tools"; + +/* No comment provided by engineer. */ +"Total" = "Total"; + +/* No comment provided by engineer. */ +"Touch ID limit" = "Touch ID limit"; + +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + +/* No comment provided by engineer. */ +"Transaction id" = "Transaction id"; + +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + +/* No comment provided by engineer. */ +"Transfer" = "Transfer"; + +/* No comment provided by engineer. */ +"Transfer Dash from your Uphold account to this wallet" = "Transfer Dash from your Uphold account to this wallet"; + +/* No comment provided by engineer. */ +"Transfer from Uphold" = "Transfer from Uphold"; + +/* No comment provided by engineer. */ +"Try again" = "Try again"; + +/* No comment provided by engineer. */ +"Turn device passcode on" = "Turn device passcode on"; + +/* No comment provided by engineer. */ +"Unable to connect" = "Unable to connect"; + +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + +/* No comment provided by engineer. */ +"Unable to get new QR code" = "Unable to get new QR code"; + +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + +/* No comment provided by engineer. */ +"Unsupported or corrupted document" = "Unsupported or corrupted document"; + +/* No comment provided by engineer. */ +"Unsupported URL" = "Unsupported URL"; + +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + +/* ex., Updated: 27.12, 8:30 */ +"Updated: %@" = "Updated: %@"; + +/* No comment provided by engineer. */ +"Uphold" = "Uphold"; + +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + +/* No comment provided by engineer. */ +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; + +/* No comment provided by engineer. */ +"Verified Successfully" = "Verified Successfully"; + +/* No comment provided by engineer. */ +"Verify" = "Verify"; + +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; + +/* No comment provided by engineer. */ +"View in Block Explorer" = "View in Block Explorer"; + +/* No comment provided by engineer. */ +"View passphrase, backup wallet…" = "View passphrase, backup wallet…"; + +/* No comment provided by engineer. */ +"View Recovery Phrase" = "View Recovery Phrase"; + +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + +/* No comment provided by engineer. */ +"Voting Keys" = "Voting Keys"; + +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; + +/* No comment provided by engineer. */ +"Wallet Keys" = "Wallet Keys"; + +/* No comment provided by engineer. */ +"WARNING" = "ADVARSEL"; + +/* No comment provided by engineer. */ +"Warning" = "Warning"; + +/* No comment provided by engineer. */ +"We are about to show you the secret key to your wallet." = "We are about to show you the secret key to your wallet."; + +/* No comment provided by engineer. */ +"We do not store this recovery phrase." = "We do not store this recovery phrase."; + +/* No comment provided by engineer. */ +"We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; + +/* No comment provided by engineer. */ +"We Upgraded" = "We Upgraded"; + +/* No comment provided by engineer. */ +"Welcome" = "Welcome"; + +/* 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."; + +/* No comment provided by engineer. */ +"Wipe" = "Wipe"; + +/* No comment provided by engineer. */ +"Wipe Wallet" = "Wipe Wallet"; + +/* No comment provided by engineer. */ +"with Dash blockchain" = "with Dash blockchain"; + +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + +/* No comment provided by engineer. */ +"You are about to sweep funds from another Dash Wallet." = "You are about to sweep funds from another Dash Wallet."; + +/* 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 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"; + +/* 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 received Dash! If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device." = "You received Dash! If you lose this device, you will lose your funds. Get your recovery phrase so that you can restore your wallet on another device."; + +/* 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"; + +/* No comment provided by engineer. */ +"You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; + +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + +/* 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."; + +/* No comment provided by engineer. */ +"Your Uphold account Dash balance is" = "Your Uphold account Dash balance is"; + +/* 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."; + +/* No comment provided by engineer. */ +"%@ has accepted your contact request" = ""; + +/* Username has sent you a contact request */ +"%@ has sent you a contact request" = ""; + +"(1/3) Processing Payment" = ""; + +/* No comment provided by engineer. */ +"(1/3) Unable to process payment" = ""; + +/* No comment provided by engineer. */ +"(2/3) Creating Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(2/3) Unable to create Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(3/3) Can't register username" = ""; + +/* No comment provided by engineer. */ +"(3/3) Registering Username" = ""; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word. Would you like to try to recover the correct word that should be in its place?" = ""; + +/* No comment provided by engineer. */ +"Accept" = ""; + +/* No comment provided by engineer. */ +"Activity" = ""; + +/* Add as your contact... */ +"Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Add a New Contact" = ""; + +/* Choose your Dash username */ +"Choose your" = ""; + +/* No comment provided by engineer. */ +"Confirm & Pay" = ""; + +/* No comment provided by engineer. */ +"Connecting to payment server" = ""; + +/* No comment provided by engineer. */ +"Contact Request Pending" = ""; + +/* No comment provided by engineer. */ +"Contact Requests" = ""; + +/* No comment provided by engineer. */ +"Contacts" = ""; + +/* No comment provided by engineer. */ +"Could not automatically recover missing or incorrect words" = ""; + +/* 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. */ +"Current user: %@" = ""; + +/* No comment provided by engineer. */ +"Dash username" = ""; + +/* No comment provided by engineer. */ +"DashPay Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Do not take a screenshot" = ""; + +/* (List of notifications happened) Earlier (some time ago) */ +"Earlier" = ""; + +/* Input username textfield placeholder */ +"eg: johndoe" = ""; + +/* No comment provided by engineer. */ +"Error" = ""; + +/* No comment provided by engineer. */ +"Error Upgrading" = ""; + +"Extended Public Keys" = ""; + +/* No comment provided by engineer. */ +"Find a user on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Found missing word:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found potential missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Generate extended public keys?" = ""; + +/* Username has requested to be your friend */ +"has requested to be your friend" = ""; + +/* No comment provided by engineer. */ +"header #%d of %d" = ""; + +/* Hello username, */ +"Hello %@," = ""; + +"I Accept" = ""; + +"Invalid Payment Request" = ""; + +/* No comment provided by engineer. */ +"Invalid QR Code" = ""; + +/* 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." = ""; + +/* 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?" = ""; + +"Join Evolution" = ""; + +/* No comment provided by engineer. */ +"Let me know when it’s done" = ""; + +/* Validation rule */ +"Letters and numbers only" = ""; + +"masternode list #%d of %d" = ""; + +/* Validation rule: Maximum 24 characters */ +"Maximum %ld characters" = ""; + +/* Validation rule */ +"Minimum 3 characters" = ""; + +"My Contacts" = ""; + +/* No comment provided by engineer. */ +"Name" = ""; + +/* (List of) New (notifications) */ +"New" = ""; + +/* No comment provided by engineer. */ +"Notifications" = ""; + +/* Once accepts your request... */ +"Once %@ accepts your request you can Pay Directly to Username" = ""; + +"Pay" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Pay Directly to Username" = ""; + +/* 1 out of 4 in the Paying Animation */ +"Paying" = ""; + +/* 2 out of 4 in the Paying Animation */ +"Paying." = ""; + +/* 3 out of 4 in the Paying Animation */ +"Paying.." = ""; + +/* 4 out of 4 in the Paying Animation */ +"Paying..." = ""; + +"Pending" = ""; + +/* No comment provided by engineer. */ +"Please try scanning again" = ""; + +/* No comment provided by engineer. */ +"Please Wait" = ""; + +/* No comment provided by engineer. */ +"Please wait" = ""; + +/* No comment provided by engineer. */ +"Recover" = ""; + +/* No comment provided by engineer. */ +"Recovering..." = ""; + +/* No comment provided by engineer. */ +"Recovery phrase must have 12, 15, 18, 21 or 24 words" = ""; + +/* No comment provided by engineer. */ +"Register?" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Search for a contact" = ""; + +/* No comment provided by engineer. */ +"Search for a contact request" = ""; + +/* No comment provided by engineer. */ +"Search for a User on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Search for a username" = ""; + +/* Search results for \"John Doe\" */ +"Search results for \"" = ""; + +/* No comment provided by engineer. */ +"Searching for username %@ on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Send Contact Request" = ""; + +/* No comment provided by engineer. */ +"Sending to" = ""; + +/* No comment provided by engineer. */ +"Sort by" = ""; + +/* No comment provided by engineer. */ +"Sort Contacts" = ""; + +"Support" = ""; + +/* No comment provided by engineer. */ +"Syncing Balance" = ""; + +/* No comment provided by engineer. */ +"There are no new notifications" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@ in your contacts" = ""; + +/* No comment provided by engineer. */ +"Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Upgrading to DashPay" = ""; + +/* No comment provided by engineer. */ +"Username taken" = ""; + +/* No comment provided by engineer. */ +"Validating username done" = ""; + +/* No comment provided by engineer. */ +"Validating username failed" = ""; + +/* No comment provided by engineer. */ +"Validating username…" = ""; + +/* No comment provided by engineer. */ +"View All" = ""; + +/* No comment provided by engineer. */ +"Why I should not take a screenshot?" = ""; + +/* No comment provided by engineer. */ +"WIF Private key" = ""; + +"You accepted the contact request from %@" = ""; + +/* No comment provided by engineer. */ +"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = ""; + +/* No comment provided by engineer. */ +"You sent the contact request to %@" = ""; + +"Your DashPay Username is ready to use" = ""; + +/* No comment provided by engineer. */ +"Your username %@ has been successfully created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Your username %@ is being created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Сopied address or QR" = ""; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 58c9617ca..aab2c73f6 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ heeft geen toegang tot vingeridentificatie"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Verwerking van betaling"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Annuleer"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Wissel"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Wijzig betalingsbedrag?"; /* No comment provided by engineer. */ -"Change PIN" = "Wijzig pin"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Controleer je verbinding"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Kies uw"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Sluit app af"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Bevestig"; @@ -230,7 +249,10 @@ "Continue" = "Ga door"; /* No comment provided by engineer. */ -"Copied" = "Is gekopieerd"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Kopieer"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Standaard valuta, snelkoppelingen, over... "; @@ -311,14 +336,41 @@ "Enter" = "Enter"; /* No comment provided by engineer. */ -"Enter PIN" = "Voer PIN in"; +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; /* No comment provided by engineer. */ -"Enter Recovery Phrase" = "Voer herstelzin in"; +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + +/* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + +/* No comment provided by engineer. */ +"Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Voer het bedrag in om te verplaatsen"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Voer hieronder uw 2FA code in"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Afsluiten"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiet"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Geschiedenis"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Ik accepteer"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importeer prive-sleutel"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Ontoereikende fondsen"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Ongeldig"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Ongeldig betalingsverzoek"; /* No comment provided by engineer. */ "Invalid QR Code" = "Ongeldige QR-code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +509,13 @@ /* No comment provided by engineer. */ "It's Important" = "Het is belangrijk"; -/* No comment provided by engineer. */ "Join Evolution" = "Sluit je aan bij Evolution"; +"Key to use" = "Key to use"; + +/* No comment provided by engineer. */ +"Keypair %ld" = "Keypair %ld"; + /* No comment provided by engineer. */ "Keypair %ld" = "Sleutelpaar %ld"; @@ -473,7 +535,10 @@ "Local Currency" = "Lokale munteenheid"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Lokaal verzocht bedrag: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Vergrendeld"; @@ -499,15 +564,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Lang drukken om ID te kopiëren"; -/* adjective, security level */ -"Low" = "Laag"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Beheer vertrouwde Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "lijst masternodes #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Registreren masternode"; @@ -517,6 +592,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Updaten masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +619,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Verplaatst naar adres"; -/* No comment provided by engineer. */ "My Contacts" = "Mijn contacten"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Naam"; @@ -551,18 +630,25 @@ "Network" = "Netwerk"; /* No comment provided by engineer. */ -"Network fee" = "Netwerkkosten"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Nieuw"; /* No comment provided by engineer. */ -"NFC device" = "NFC apparaat"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC apparaat heeft geen geldig Dash-adres verzonden"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +675,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Zodra%@ uw verzoek accepteert kunt u direct betalen aan Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator sleutels"; /* No comment provided by engineer. */ -"Owner Address" = "Adres eigenaar"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Eigenaar sleutels"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Betaal"; /* No comment provided by engineer. */ @@ -625,15 +727,22 @@ /* No comment provided by engineer. */ "Payments" = "Betalingen"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Wachtende"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "De PIN is altijd vereist om een betaling uit te voeren"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Voer PIN in om de portemonnee bij te werken"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Houd u uw telefoon bij een NFC apparaat"; @@ -658,12 +767,18 @@ /* No comment provided by engineer. */ "Please write it down" = "schrijf het alsjeblieft op"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Eerder gebruikt op IP-adres"; /* No comment provided by engineer. */ "Private key" = "persoonlijke sleutel"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Verwerken"; @@ -673,6 +788,9 @@ /* No comment provided by engineer. */ "Public key" = "Publieke sleutel"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Snel Ontvangen"; @@ -718,15 +836,25 @@ /* Button title, Register (username) */ "Register" = "Registreren"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registreren?"; /* No comment provided by engineer. */ "Registered from" = "Geregistreerd van"; -/* No comment provided by engineer. */ +"Registered Masternode" = "Registered Masternode"; + "Registered Masternode" = "Geregistreerde masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Meld een probleem"; @@ -760,6 +888,9 @@ /* No comment provided by engineer. */ "Rewards" = "Beloningen"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -878,17 +1009,21 @@ "Settings" = "Instellingen"; /* No comment provided by engineer. */ -"Setup Wallet" = "Portemonnee instellen"; +"Setup Wallet" = "Setup Wallet"; /* No comment provided by engineer. */ -"Share" = "Delen"; +"Share" = "Share"; + +"Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ "Show Masternode Keys" = "Toon sleutels masternode"; /* No comment provided by engineer. */ "Show Recovery Phrase" = "Toon herstelzin"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Overslaan"; @@ -910,7 +1045,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Bevestiging van de uitgaven"; +"Step 1" = "Step 1"; + /* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steppen om crash te reproduceren"; + "Support" = "Ondersteuning"; /* No comment provided by engineer. */ @@ -985,9 +1130,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "touch ID limiet"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transactie id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "overdracht"; @@ -1006,15 +1157,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Kan geen verbinding maken"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Verkrijgen van nieuwe QR-code is mislukt"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Niet-ondersteund of corrupt document"; /* No comment provided by engineer. */ "Unsupported URL" = "Niet-ondersteunde URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Bijgewerkt: %@"; @@ -1028,10 +1209,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Gebruikt"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Gebruikt op IP-adres"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Gebruikersnaam al in gebruik"; @@ -1051,8 +1235,11 @@ /* No comment provided by engineer. */ "Verify" = "Verifiëren"; -/* adjective, security level */ -"Very High" = "Heel hoog"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Bekijk alles"; @@ -1067,13 +1254,25 @@ "View Recovery Phrase" = "Toon herstelzin"; /* No comment provided by engineer. */ -"Voting Address" = "Stem adres"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; /* No comment provided by engineer. */ -"Wallet disabled" = "Portemonnee is uitgeschakeld"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Portemonnee sleutels"; @@ -1117,7 +1316,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "met Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "U heeft het contactverzoek van %@ geaccepteerd"; /* No comment provided by engineer. */ @@ -1150,7 +1350,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "U hebt deze herstelzin nodig om toegang te krijgen tot uw saldo als dit apparaat is verloren of beschadigd, of als Dash Wallet ooit per ongeluk van dit apparaat wordt verwijderd."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Uw DashPay gebruikersnaam is klaar voor gebruik"; /* No comment provided by engineer. */ diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index d82b963be..dca2bd35d 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nie na zezwolenia na dostęp do Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Przetwarzanie Transakcji"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Anuluj"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Reszta"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Zmienić ilość do zapłaty?"; /* No comment provided by engineer. */ -"Change PIN" = "Zmień kod PIN"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Sprawdź swoje połączenie"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Wybierz swój"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Zamknij Aplikacje"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Potwierdź"; @@ -230,7 +249,10 @@ "Continue" = "Dalej"; /* No comment provided by engineer. */ -"Copied" = "Skopiowano"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Kopiuj"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Domyślna waluta, skróty, o…"; @@ -310,9 +335,27 @@ /* No comment provided by engineer. */ "Enter" = "Wejdź"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Wpisz PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Wpisz Frazy Odzyskiwania"; @@ -320,20 +363,36 @@ "Enter the amount to transfer" = "Wpisz kwotę jaką chcesz przelać."; /* No comment provided by engineer. */ -"Enter your 2FA code below" = "Poniżej wpisz swój kod 2FA"; +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; /* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Poniżej wpisz swój kod 2FA"; + "Error" = "Błąd"; /* No comment provided by engineer. */ "Error Upgrading" = "Wystąpił błąd podczas ulepszania"; +"Exit" = "Exit"; + /* No comment provided by engineer. */ "Exit" = "Wyjdź"; /* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + +/* No comment provided by engineer. */ +"Face ID limit" = "Limit identyfikacji twarzy"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -397,7 +456,8 @@ /* No comment provided by engineer. */ "History" = "Historia"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Akceptuję"; /* No comment provided by engineer. */ @@ -424,6 +484,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importuj klucz prywatny..."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Niewystarczająca ilość funduszy"; @@ -433,27 +496,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Wewnętrznie przeniesiony do"; -/* Invalid transaction */ -"Invalid" = "Niewłaściwy"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "Niewłaściwe rzadanie płatności"; /* No comment provided by engineer. */ "Invalid QR Code" = "Niewłaściwy kod QR"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "To Ważne"; /* No comment provided by engineer. */ "Join Evolution" = "Dołącz do Ewolucji"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Para Kluczy %Id"; @@ -473,7 +543,10 @@ "Local Currency" = "Lokalna Waluta"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Lokalna żądana kwota %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Zablokowane"; @@ -499,15 +572,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Przyciśnij dłużej by skopiować ID"; -/* adjective, security level */ -"Low" = "Niski"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Zarządzaj Zaufanym Węzłem"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "lista masternodów #%1$d z %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Rejestracja Masternoda"; @@ -517,6 +600,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizacji Masternoda"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +627,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Przeniesione na Adres"; -/* No comment provided by engineer. */ "My Contacts" = "Moje Kontakty"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Imię"; @@ -551,18 +638,25 @@ "Network" = "Sieć"; /* No comment provided by engineer. */ -"Network fee" = "Opłata sieci"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Nowe"; /* No comment provided by engineer. */ -"NFC device" = "NFC urządzenie"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Urządzenie NFC nie wysłało poprawnego adresu Dash"; +"No address copied" = "Adres nie skopiowany"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Węzeł IP"; /* adjective, security level */ @@ -589,16 +683,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Klucze operatora"; /* No comment provided by engineer. */ -"Owner Address" = "Adres Właściciela"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Klucze właściciela"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Zapłać"; /* No comment provided by engineer. */ @@ -623,7 +733,10 @@ "Paying..." = "Płacę..."; /* No comment provided by engineer. */ -"Payments" = "Płatności"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Oczekujący"; @@ -631,9 +744,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN jest zawsze wymagany by dokonać płatności"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Proszę podaj PIN aby aktualizować portfel"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Przyłóż telefon do urządzenia NFC "; @@ -659,11 +778,17 @@ "Please write it down" = "Proszę to zapisać"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Wcześniej użyty IP address"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Klucz prywatny"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Przetwarzanie"; @@ -673,6 +798,9 @@ /* No comment provided by engineer. */ "Public key" = "Klucz publiczny"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Szybki Odbierz"; @@ -718,15 +846,24 @@ /* Button title, Register (username) */ "Register" = "Zarejestruj"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Zarejestruj?"; /* No comment provided by engineer. */ -"Registered from" = "Zarejestrowany z"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Zarejestrowany Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Zgłoś problem"; @@ -760,6 +897,9 @@ /* No comment provided by engineer. */ "Rewards" = "Nagrody"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Zeskanuj"; @@ -889,6 +1029,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Pokaż Frazy Odzyskiwania Portfela"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Pomiń"; @@ -910,7 +1053,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Potwierdzenie Wysłania"; +"Step 1" = "Step 1"; + /* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Kroki do reprodukcji awarii"; + "Support" = "Wsparcie"; /* No comment provided by engineer. */ @@ -983,11 +1136,17 @@ "Total" = "Całkowite"; /* No comment provided by engineer. */ -"Touch ID limit" = "Touch ID limit"; +"Touch ID limit" = "Limit identyfikacji odcisku palca"; + +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; /* No comment provided by engineer. */ "Transaction id" = "Transakcja id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Prześlij"; @@ -1006,15 +1165,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Połączenie jest niemożliwe"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Pobranie nowego kodu QR niemożliwe"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Nieobsługiwany lub uszkodzony dokument"; /* No comment provided by engineer. */ "Unsupported URL" = "Nieobsługiwany URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Zaktualizowany %@"; @@ -1028,10 +1217,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Użyty"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Użyty w adresie IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Nazwa użytkownika jest już zajęta"; @@ -1051,8 +1243,11 @@ /* No comment provided by engineer. */ "Verify" = "Zweryfikuj"; -/* adjective, security level */ -"Very High" = "Bardzo Wysoki"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Zobacz wszystkie"; @@ -1067,13 +1262,25 @@ "View Recovery Phrase" = "Pokaż Frazę Odzyskiwania Portfela"; /* No comment provided by engineer. */ -"Voting Address" = "Adres Głosowania"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; /* No comment provided by engineer. */ -"Wallet disabled" = "Portfel zdezaktywowany"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Klucze portfela"; @@ -1117,7 +1324,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "z łańcuchem bloków Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Zaproszenie do kontaktów od %@ zostało zaakceptowane"; /* No comment provided by engineer. */ @@ -1150,7 +1358,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Fraza odzysku danych będzie potrzebna aby mieć dostęp do funduszy w wypadku utraty tego urządzenia lub jeśli Dash Wallet zostanie przypadkowo odinstalowany. "; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Twoja nazwa użytkownika na DashPay jest gotowa"; /* No comment provided by engineer. */ diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 099856b71..ed3afd222 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ não tem permissão para acessar Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processando Pagamento"; /* No comment provided by engineer. */ @@ -166,14 +167,23 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Alterar"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Alterar o valor do pagamento?"; /* No comment provided by engineer. */ -"Change PIN" = "Mudar PIN"; +"Change Payout Address" = "Change Payout Address"; + +/* No comment provided by engineer. */ +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; /* No comment provided by engineer. */ -"Check your connection" = "Verifique sua conexão"; +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Escolha seu"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Fechar App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Confirme"; @@ -230,7 +249,10 @@ "Continue" = "Continuar"; /* No comment provided by engineer. */ -"Copied" = "Copiado"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Copiar"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Data"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Moeda padrão, atalhos, sobre..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Entrar"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Inserir PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Insira Frase de Recuperação"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Insira o valor a ser transferido"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Digite abaixo seu código de autenticação de dois fatores \"2FA\""; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Sair"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite de ID de face"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Histórico"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Eu Aceito"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importe chave privada…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Fundos insuficientes"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Movido internamente para"; -/* Invalid transaction */ -"Invalid" = "Inválido"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "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. */ +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "É Importante"; /* No comment provided by engineer. */ "Join Evolution" = "Junte-se ao Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Par de chaves %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Moeda Local"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Total local solicitado: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Bloqueado"; @@ -493,21 +560,31 @@ /* a verb, Logout Immediately */ "Logout" = "Logout"; -/* Logout after 5 min */ -"Logout after" = "Logout depois de"; +/* No comment provided by engineer. */ +"Logout after" = "Logout after"; /* No comment provided by engineer. */ -"Long press to copy ID" = "Mantenha pressionado para copiar ID"; +"Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ -"Low" = "Baixo"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Gerenciar Nó Confiável"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "lista de masternode #%1$d de %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Registro de Masternode"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Atualização de Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Máximo"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Movido para Endereço"; -/* No comment provided by engineer. */ "My Contacts" = "Meus Contatos"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Nome"; @@ -551,18 +632,25 @@ "Network" = "Rede"; /* No comment provided by engineer. */ -"Network fee" = "Taxa de rede"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Novo"; /* No comment provided by engineer. */ -"NFC device" = "Dispositivo NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Dispositivo NFC não transmitiu um endereço de Dash válido"; +"No address copied" = "Nenhum endereço copiado"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP do nó"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chaves do Operador"; /* No comment provided by engineer. */ -"Owner Address" = "Endereço do Proprietário"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Chaves do Proprietário"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Pagar"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Pagando..."; /* No comment provided by engineer. */ -"Payments" = "Pagamentos"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Pendente"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN é sempre necessário para realizar um pagamento"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Por favor, insira seu PIN para atualizar a carteira"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Por favor coloque seu telefone perto do dispositivo NFC"; @@ -659,11 +772,17 @@ "Please write it down" = "Por favor, anote"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Anteriormente usada no endereço de IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Chave privada"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processando"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Chave pública"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Receber Rapidamente"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Registrar"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrar?"; /* No comment provided by engineer. */ -"Registered from" = "Registrado desde"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternode Registrado"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Reportar um Problema"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperação"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Pular"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Confirmação de Gastos"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Passos para reproduzir a falha"; + "Support" = "Suporte"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite de ID de toque"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Id da transação"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transferir"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Não foi possível conectar"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* 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. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Documento não suportado ou corrompido"; /* No comment provided by engineer. */ "Unsupported URL" = "URL não suportada"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Atualizado: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Utilizado"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Utilizado no endereço de IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Nome de usuário já foi registrado"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Verificar"; -/* adjective, security level */ -"Very High" = "Muito Alto"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Ver Tudo"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Ver Frase de Recuperação"; /* No comment provided by engineer. */ -"Voting Address" = "Endereço de Votação"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; /* No comment provided by engineer. */ -"Wallet disabled" = "Carteira desabilitada"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Chaves da Carteira"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "com a blockchain de Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Você aceitou a solicitação de contato de %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Você precisará de esta frase de recuperação para acessar os seus fundos se este dispositivo se perca, danifique ou se Dash Wallet seja desinstalada acidentalmente de este dispositivo."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Seu Nome de Usuário no DashPay está pronto para uso"; /* No comment provided by engineer. */ diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 494a4b914..5ec8dd5bc 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ запрещен доступ к Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Обработка платежа "; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Отмена"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Изменить"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + +/* No comment provided by engineer. */ +"Change payment amount?" = "Change payment amount?"; /* No comment provided by engineer. */ -"Change payment amount?" = "Изменить сумму платежа?"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Change PIN" = "Изменить PIN"; +"Change PIN" = "Change PIN"; /* No comment provided by engineer. */ -"Check your connection" = "Проверьте ваше интернет-соединение"; +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Выберите ваше"; @@ -194,24 +204,33 @@ "Close App" = "Закрыть приложение"; /* No comment provided by engineer. */ -"Confirm" = "Подтвердить"; +"Collateral Index" = "Collateral Index"; /* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + +/* Confirm */ +"Confirm" = "Подтвердить"; + "Confirm & Pay" = "Подтвердить и оплатить"; +"Confirm PIN" = "Confirm PIN"; + /* No comment provided by engineer. */ "Confirm PIN" = "Подтвердите PIN"; /* No comment provided by engineer. */ -"Confirming" = "Подтверждается"; +"Confirming" = "Confirming"; /* No comment provided by engineer. */ -"Connect with third party exchanges" = "Использовать сторонние биржи"; +"Connect with third party exchanges" = "Connect with third party exchanges"; /* No comment provided by engineer. */ "Connected peers: %d" = "Подключенные узлы: %d"; -/* No comment provided by engineer. */ "Connecting to payment server" = "Подключение к платёжному серверу"; /* No comment provided by engineer. */ @@ -220,17 +239,25 @@ /* No comment provided by engineer. */ "Contact Requests" = "Запросы на добавление в контакты"; +"Contact Support" = "Contact Support"; + /* No comment provided by engineer. */ "Contact Support" = "Связаться с поддержкой"; /* No comment provided by engineer. */ "Contacts" = "Контакты"; +/* No comment provided by engineer. */ +"Continue" = "Continue"; + /* No comment provided by engineer. */ "Continue" = "Продолжить"; /* No comment provided by engineer. */ -"Copied" = "Скопировано"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Копировать"; @@ -274,6 +301,9 @@ /* No comment provided by engineer. */ "Date" = "Дата"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Валюта по умолчанию, ссылки, о программе…"; @@ -311,16 +341,43 @@ "Enter" = "Ввести"; /* No comment provided by engineer. */ -"Enter PIN" = "Введите PIN"; +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; /* No comment provided by engineer. */ -"Enter Recovery Phrase" = "Введите фразу восстановления"; +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + +/* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + +/* No comment provided by engineer. */ +"Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Укажите сумму перевода"; /* No comment provided by engineer. */ -"Enter your 2FA code below" = "Введите код 2FA ниже"; +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Введите код аутентификации 2FA ниже"; /* No comment provided by engineer. */ "Error" = "Ошибка"; @@ -331,9 +388,10 @@ /* No comment provided by engineer. */ "Exit" = "Выход"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Лимит Face ID"; @@ -397,9 +455,13 @@ /* No comment provided by engineer. */ "History" = "История"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Принимаю"; +/* No comment provided by engineer. */ +"I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я понимаю, что потеряю свои монеты, если у меня не будет фразы восстановления"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я понимаю, что потеряю свои средства, если у меня не будет фразы восстановления"; @@ -419,10 +481,13 @@ "Immediately" = "Немедленно"; /* Translate it as short as possible! (24 symbols max) */ -"Import Private Key" = "Импорт ключа"; +"Import Private Key" = "Import Private Key"; /* No comment provided by engineer. */ -"Import private key…" = "Импортировать приватный ключ…"; +"Import private key…" = "Import private key…"; + +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient funds" = "Недостаточно средств"; @@ -436,12 +501,13 @@ /* Invalid transaction */ "Invalid" = "Некорректная"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Некорректный платёжный запрос"; /* No comment provided by engineer. */ "Invalid QR Code" = "Некорректный QR-код"; +"IP Address" = "IP Address"; + /* 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 слов. Хотите автоматически восстановить пропущенные слова? Это займёт примерно час. Рекомендуем подключить ваш гаджет к зарядному устройству."; @@ -451,9 +517,10 @@ /* No comment provided by engineer. */ "It's Important" = "Это важно"; -/* No comment provided by engineer. */ "Join Evolution" = "Присоединиться к Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Ключи %ld"; @@ -473,7 +540,10 @@ "Local Currency" = "Валюта"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Сумма в местной валюте: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Зафиксировано"; @@ -499,15 +569,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Удерживайте чтобы скопировать ID"; -/* adjective, security level */ -"Low" = "Низкий"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Управление доверенным узлом"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "список мастернод #%1$d из %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Регистрация masternode"; @@ -517,6 +597,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Обновление masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Макс"; @@ -541,9 +624,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Перемещно на адрес"; -/* No comment provided by engineer. */ "My Contacts" = "Мои контакты"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Имя"; @@ -551,18 +635,25 @@ "Network" = "Сеть"; /* No comment provided by engineer. */ -"Network fee" = "Комиссия сети"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Новые"; /* No comment provided by engineer. */ -"NFC device" = "NFC-устройство"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC-устройство не предоставило Dash адрес"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP узла"; /* adjective, security level */ @@ -589,16 +680,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Когда %@ примет ваш запрос, вы сможете оплатить напрямую по Имени пользователя"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Ключи оператора"; /* No comment provided by engineer. */ -"Owner Address" = "Адрес владельца"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Ключи владельца"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Оплатить"; /* No comment provided by engineer. */ @@ -623,7 +730,10 @@ "Paying..." = "Оплата..."; /* No comment provided by engineer. */ -"Payments" = "Платежи"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "В ожидании"; @@ -631,11 +741,18 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Всегда требовать PIN для совершения платежа"; +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ +"Please enter PIN to upgrade wallet" = "Пожалуйста, введите PIN для выполнения обновления кошелька"; + "Please enter PIN to upgrade wallet" = "Пожалуйста, введите PIN для обновления кошелька"; /* No comment provided by engineer. */ -"Please place your phone near NFC device." = "Пожалуйста, поместите Ваш телефон рядом с NFC устройством."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + +/* No comment provided by engineer. */ +"Please place your phone near NFC device." = "Пожалуйста, поместите ваш телефон рядом с NFC устройством."; /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Пожалуйста, нажмите на слова из Вашей фразы восстановления в правильном порядке"; @@ -659,11 +776,17 @@ "Please write it down" = "Пожалуйста, запишите её"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Ранее использовалось с IP адресом"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Приватный ключ"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Обрабатывается"; @@ -673,6 +796,9 @@ /* No comment provided by engineer. */ "Public key" = "Публичный ключ"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Получить быстро"; @@ -718,15 +844,24 @@ /* Button title, Register (username) */ "Register" = "Регистрация"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Зарегистрировать?"; /* No comment provided by engineer. */ -"Registered from" = "Зарегистрировано от"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Зарегистрирована masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Сообщить о проблеме"; @@ -760,6 +895,9 @@ /* No comment provided by engineer. */ "Rewards" = "Вознаграждения"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Скан."; @@ -889,6 +1027,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Показать фразу восстановления"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Пропустить"; @@ -910,7 +1051,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Подтверждения"; +"Step 1" = "Step 1"; + /* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Шаги для воспроизведения ошибки"; + "Support" = "Поддержка"; /* No comment provided by engineer. */ @@ -985,9 +1136,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Лимит Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "ID транзакции"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Перевод средств"; @@ -1006,15 +1163,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Не удалось подключиться"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Не удалось получить новый QR-код"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Неподдерживаемый или повреждённый документ"; /* No comment provided by engineer. */ "Unsupported URL" = "Неподдерживаемый URL-адрес"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Обновлено: %@"; @@ -1028,10 +1215,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Использовано"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Использовано с IP адресом"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Имя пользователя уже занято"; @@ -1051,8 +1241,11 @@ /* No comment provided by engineer. */ "Verify" = "Подтвердить"; -/* adjective, security level */ -"Very High" = "Очень высокий"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Посмотреть все"; @@ -1067,13 +1260,25 @@ "View Recovery Phrase" = "Посмотреть фразу восстановления"; /* No comment provided by engineer. */ -"Voting Address" = "Адрес голосования"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; /* No comment provided by engineer. */ -"Wallet disabled" = "Кошелёк отключён"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Ключи кошелька"; @@ -1117,7 +1322,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "с Dash блокчейн"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Вы приняли запрос на добавление в контакты от %@"; /* No comment provided by engineer. */ @@ -1150,7 +1356,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Вам понадобится эта фраза восстановления для доступа к Вашим средствам, если это устройство будет утеряно, повреждено или приложение Dash Wallet будет случайно удалено."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Имя пользователя DashPay готово к работе"; /* No comment provided by engineer. */ diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index e77a1b749..a4e6afa7f 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ nemá povolený prístup k Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Spracovanie platby"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Zrušiť"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Zmeniť"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + +/* No comment provided by engineer. */ +"Change payment amount?" = "Change payment amount?"; /* No comment provided by engineer. */ -"Change payment amount?" = "Zmeniť sumu platby?"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Change PIN" = "Zmeniť PIN"; +"Change PIN" = "Change PIN"; /* No comment provided by engineer. */ -"Check your connection" = "Skontrolujte pripojenie"; +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Vybrať vaše"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Ukončiť Applikáciu"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Potvrdiť"; @@ -230,7 +249,10 @@ "Continue" = "Pokračovať"; /* No comment provided by engineer. */ -"Copied" = "Skopírované"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Kopírovať"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Dátum"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Predvolená mena, skratky, o programe..."; @@ -310,9 +335,27 @@ /* No comment provided by engineer. */ "Enter" = "Zadať"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Zadať PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Zadať frázu pre obnovenie"; @@ -320,20 +363,33 @@ "Enter the amount to transfer" = "Zadajte sumu, ktorú chcete previesť"; /* No comment provided by engineer. */ -"Enter your 2FA code below" = "Nižšie zadajte váš 2FA kód"; +"Enter Transaction Hash" = "Enter Transaction Hash"; /* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + +/* No comment provided by engineer. */ +"Enter your 2FA code below" = "Nižšie zadajte váš 2FA kód"; + "Error" = "Chyba"; /* No comment provided by engineer. */ "Error Upgrading" = "Chyba pri inovácii"; +"Exit" = "Exit"; + /* No comment provided by engineer. */ "Exit" = "Ukončiť"; /* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limit pre Face ID"; @@ -397,7 +453,8 @@ /* No comment provided by engineer. */ "History" = "História"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Súhlasím"; /* No comment provided by engineer. */ @@ -424,6 +481,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importovať privátny kľúč…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Nedostatok prostriedkov"; @@ -436,12 +496,13 @@ /* Invalid transaction */ "Invalid" = "Neplatná"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Neplatná žiadosť o platbu:"; /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +512,10 @@ /* No comment provided by engineer. */ "It's Important" = "Je to dôležité"; -/* No comment provided by engineer. */ "Join Evolution" = "Pridajte sa k evolúcii"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Pár kľúčov %ld"; @@ -473,7 +535,10 @@ "Local Currency" = "Miestna mena"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Miestna vyžadovaná suma: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Uzamknuté"; @@ -499,15 +564,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Dlhým stlačením kopírovať ID"; -/* adjective, security level */ -"Low" = "Nízke"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Spravovať dôveryhodný uzol"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "zoznam mastenódov: %1$d z %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Registracia masternódu"; @@ -517,6 +592,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Aktualizácia masternódu"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +619,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Presunuté k adrese"; -/* No comment provided by engineer. */ "My Contacts" = "Moje kontakty"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Meno"; @@ -551,7 +630,10 @@ "Network" = "Sieť"; /* No comment provided by engineer. */ -"Network fee" = "Sieťový poplatok "; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "nových"; @@ -562,7 +644,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC zariadenie nevyslalo validnú Dash adresu"; +"No address copied" = "Nebola skopírovaná žiadna adresa"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "IP uzla"; /* adjective, security level */ @@ -589,16 +675,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Kľúče operátora"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Kľúče vlastníka"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Zaplatiť"; /* No comment provided by engineer. */ @@ -625,17 +727,24 @@ /* No comment provided by engineer. */ "Payments" = "Platby"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Čakajúce"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Na vykonanie platby je vždy potrebný PIN"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Pre inováciu peňaženky zadajte PIN"; /* No comment provided by engineer. */ -"Please place your phone near NFC device." = "Umiestnite váš telefón blízko NFC zariadenia."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + +/* No comment provided by engineer. */ +"Please place your phone near NFC device." = "Umiestnite Váš telefón blízko NFC zariadenia."; /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Klepnite na slová z obnovovacej frázy v správnom poradí"; @@ -658,12 +767,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Prosím, zapíšte si ju"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Predtým použité na IP adrese"; /* No comment provided by engineer. */ "Private key" = "Privátny kľúč"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Spracováva sa"; @@ -673,6 +788,9 @@ /* No comment provided by engineer. */ "Public key" = "Verejný kľúč"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Rýchlo prijať"; @@ -718,15 +836,24 @@ /* Button title, Register (username) */ "Register" = "Registrovať"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Registrovať?"; /* No comment provided by engineer. */ -"Registered from" = "Registrované z"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Registrovaný masternód"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Nahlásiť problém"; @@ -760,6 +887,9 @@ /* No comment provided by engineer. */ "Rewards" = "Odmeny"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skenovať"; @@ -889,6 +1019,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobraziť frázu obnovenia"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Preskočiť"; @@ -910,11 +1043,21 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Potvrdenie minutia"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Kroky na reprodukciu chyby"; + "Support" = "Podpora"; /* No comment provided by engineer. */ -"Swept!" = "Načítať!"; +"Swept!" = "Swept!"; /* Translate it as short as possible! (24 symbols max) */ "Switch to Mainnet" = "Prepnúť na hlavnú sieť"; @@ -985,9 +1128,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limit pre Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Id transakcie"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Presun"; @@ -1006,15 +1155,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Nedá sa pripojiť"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Nepodarilo sa získať nový QR kód"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Nepodporovaný alebo poškodený dokument"; /* No comment provided by engineer. */ "Unsupported URL" = "Nepodporovaná URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Aktualizované: %@"; @@ -1027,6 +1206,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Použité"; @@ -1051,6 +1233,9 @@ /* No comment provided by engineer. */ "Verify" = "Overiť"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Veľmi vysoké"; @@ -1066,12 +1251,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobraziť frázu pre obnovenie"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Adresa pre hlasovanie"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Hlasovacie kľúče"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Peňaženka neaktívna"; @@ -1117,7 +1314,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "s Dash blockchainom"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Prijali ste kontaktnú žiadosť od %@"; /* No comment provided by engineer. */ @@ -1150,9 +1348,13 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally 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 tohto zariadenia alebo k náhodnému odinštalovaniu Dash Wallet z tohto zariadenia."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Vaše používateľské DashPay meno je pripravené"; +/* 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."; + /* 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."; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index ab9e80f51..b83d77739 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -166,12 +167,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Close App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Confirm"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Enter the amount to transfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "History"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Import private key…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Invalid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +509,10 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; -/* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +531,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -499,13 +561,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ "Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Manage Trusted Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +586,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,9 +613,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; @@ -551,7 +624,10 @@ "Network" = "Network"; /* No comment provided by engineer. */ -"Network fee" = "Tarifa e rrjetit"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "New"; @@ -562,7 +638,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +669,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Paguaj"; /* No comment provided by engineer. */ @@ -625,15 +721,22 @@ /* No comment provided by engineer. */ "Payments" = "Payments"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Pending"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -658,12 +761,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -673,6 +782,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -718,6 +830,12 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -727,6 +845,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; @@ -760,6 +881,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skano"; @@ -889,6 +1013,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Skip"; @@ -910,7 +1037,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Spending Confirmation"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1122,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1149,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1027,6 +1200,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1051,6 +1227,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Very High"; @@ -1066,12 +1245,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Wallet disabled"; @@ -1117,7 +1308,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1342,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 169215d29..bb29c8936 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -31,6 +32,9 @@ /* No comment provided by engineer. */ "(3/3) Registering Username" = "(3/3) Registering Username"; +/* No comment provided by engineer. */ +"1 hour" = "1 hour"; + /* No comment provided by engineer. */ "1 hour" = "1 timme"; @@ -166,13 +170,23 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ändra"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; + "Check your connection" = "Kontrollera din anslutning"; /* Choose your Dash username */ @@ -193,6 +207,15 @@ /* No comment provided by engineer. */ "Close App" = "Close App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Bekräfta"; @@ -229,6 +252,9 @@ /* No comment provided by engineer. */ "Continue" = "Fortsätt"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -274,6 +300,9 @@ /* No comment provided by engineer. */ "Date" = "Datum"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -310,15 +339,43 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ +"Enter PIN" = "Enter PIN"; + "Enter PIN" = "Ange PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Enter the amount to transfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -334,6 +391,9 @@ /* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -397,6 +457,9 @@ /* No comment provided by engineer. */ "History" = "Historik"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I Accept" = "I Accept"; @@ -424,6 +487,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Importera privat nyckel..."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; @@ -436,12 +502,13 @@ /* Invalid transaction */ "Invalid" = "Invalid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +518,10 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; -/* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +540,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -499,13 +570,23 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; + /* adjective, security level */ "Low" = "Låg"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Manage Trusted Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +598,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,15 +625,25 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; +/* No comment provided by engineer. */ +"Network" = "Network"; + /* No comment provided by engineer. */ "Network" = "Nätverk"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; + /* No comment provided by engineer. */ "Network fee" = "Nätverksavgift"; @@ -562,6 +656,9 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "Node IP" = "Node IP"; @@ -589,16 +686,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Betala"; /* No comment provided by engineer. */ @@ -625,15 +738,24 @@ /* No comment provided by engineer. */ "Payments" = "Betalningar"; +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + /* No comment provided by engineer. */ "Pending" = "Pending"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -658,12 +780,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -673,6 +801,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -718,6 +849,12 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -727,6 +864,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; @@ -760,6 +900,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skanna"; @@ -889,6 +1032,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Skip"; @@ -910,7 +1056,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Spending Confirmation"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1141,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1168,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1027,6 +1219,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1051,6 +1246,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Very High"; @@ -1066,12 +1264,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Wallet disabled"; @@ -1117,7 +1327,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1361,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ @@ -1170,3 +1382,5 @@ /* No comment provided by engineer. */ "Сopied address or QR" = "Сopied address or QR"; + +"No address copied" = ""; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index bc4d35796..80b668eb3 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ ไม่สามารถเข้าถึง Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) การประมวลผลการชำระเงิน"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "ยกเลิก"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "เปลี่ยนแปลง"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "เปลี่ยนแปลงจำนวนเงินที่ชำระหรือไม่"; /* No comment provided by engineer. */ -"Change PIN" = "เปลี่ยนแปลง PIN"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "ตรวจสอบการเชื่อมต่อ"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "เลือกของคุณ"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "ปิดแอพพลิเคชั่น"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "ยืนยัน"; @@ -230,7 +249,10 @@ "Continue" = "ดำเนินการต่อ"; /* No comment provided by engineer. */ -"Copied" = "คัดลอก"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "คัดลอก"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "วันที่"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "สกุลเงินเริ่มต้น, ทางลัด, เกี่ยวกับ..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "เข้าสู่"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "ใส่รหัส PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "ใส่วลีกู้คืน"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "ป้อนจำนวนเงินที่ต้องการโอน"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "ป้อนรหัส 2FA ของคุณด้านล่าง"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "ออก"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "ขีดจำกัด Face ID"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "ประวัติ"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "ฉันยอมรับ"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "นำเข้ากุญแจส่วนตัว"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "ยอดเงินไม่เพียงพอ"; @@ -433,8 +490,8 @@ /* No comment provided by engineer. */ "Internally moved to" = "ย้ายไปภายในแล้ว"; -/* Invalid transaction */ -"Invalid" = "ไม่ถูกต้อง"; +/* No comment provided by engineer. */ +"Invalid" = "Invalid"; /* No comment provided by engineer. */ "Invalid Payment Request" = "คำขอการชำระเงินไม่ถูกต้อง"; @@ -442,6 +499,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code ไม่ถูกต้อง"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* 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 คำเท่านั้นคุณต้องการกู้คืนคำที่หายไปโดยอัตโนมัติหรือไม่ อาจใช้เวลาประมาณหนึ่งชั่วโมง เราขอแนะนำให้เสียบเข้ากับอุปกรณ์ของคุณ"; @@ -451,9 +511,10 @@ /* No comment provided by engineer. */ "It's Important" = "สำคัญ"; -/* No comment provided by engineer. */ "Join Evolution" = "เข้าร่วมกับวิวัฒนาการ"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -473,7 +534,10 @@ "Local Currency" = "สกุลเงินท้องถิ่น"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "จำนวนเงินที่ต้องการท้องถิ่น: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "ล็อค"; @@ -499,15 +563,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "กดค้างเพื่อคัดลอก ID"; -/* adjective, security level */ -"Low" = "ต่ำ"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "จัดการโหนดที่เชื่อถือได้"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "รายการมาสเตอร์โหนด #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "การลงทะเบียนมาสเตอร์โหนด"; @@ -517,6 +591,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "อัพเดตมาสเตอร์โหนด"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "สูงสุด"; @@ -541,9 +618,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "ย้ายไปยังที่อยู่"; -/* No comment provided by engineer. */ "My Contacts" = "ติดต่อของฉัน"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "ชื่อ"; @@ -551,18 +629,25 @@ "Network" = "เครือข่าย"; /* No comment provided by engineer. */ -"Network fee" = "ค่าธรรมเนียมเครือข่าย"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "ใหม่"; /* No comment provided by engineer. */ -"NFC device" = "อุปกรณ์ NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "อุปกรณ์ NFC ไม่ได้ส่งที่อยู่ dash ที่ถูกต้อง"; +"No address copied" = "ไม่มีที่อยู่คัดลอก"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "โหนด IP"; /* adjective, security level */ @@ -589,15 +674,34 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "เมื่อ %@ ยอมรับคำขอของคุณคุณสามารถชำระเงินโดยตรงกับชื่อผู้ใช้"; +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ +"Operator Keys" = "ตัวดำเนินการ Keys"; + "Operator Keys" = "ตัวดำเนินการกุญแจ"; /* No comment provided by engineer. */ -"Owner Address" = "ที่อยู่เจ้าของ"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "เจ้าของกุญแจ"; +/* No comment provided by engineer. */ +"Owner Private Key" = "Owner Private Key"; + +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay" = "ชำระเงิน"; @@ -623,7 +727,10 @@ "Paying..." = "กำลังชำระเงิน"; /* No comment provided by engineer. */ -"Payments" = "การชำระเงิน"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "รอดำเนินการ"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "ต้องระบุ PIN ทุกครั้งเพื่อชำระเงิน"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "โปรดป้อน PIN เพื่ออัปเกรด Wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "โปรดวางมือถือของคุณใกล้กับอุปกรณ์ NFC"; @@ -659,11 +772,17 @@ "Please write it down" = "กรุณาเขียนลงไป"; /* No comment provided by engineer. */ -"Previously used at IP address" = "ใช้ก่อนหน้านี้ที่ที่อยู่ IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "กำลังประมวลผล"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "ได้รับอย่างรวดเร็ว"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "ลงทะเบียน"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "ลงทะเบียนหรือไม่"; /* No comment provided by engineer. */ -"Registered from" = "ลงทะเบียนจาก"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternodes ที่ลงทะเบียน"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "รายงานปัญหา"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "รางวัล"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "สแกน"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "แสดงวลีกู้คืน"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "ข้าม"; @@ -910,11 +1047,21 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "การยืนยันการใช้จ่าย"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "ขั้นตอนในการทำให้เกิดความผิดพลาดซ้ำ"; + "Support" = "ฝ่ายสนับสนุน"; /* No comment provided by engineer. */ -"Swept!" = "ลบล้าง"; +"Swept!" = "Swept!"; /* Translate it as short as possible! (24 symbols max) */ "Switch to Mainnet" = "เปลี่ยนเป็น Mainnet"; @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "ขีดจำกัด Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "id ธุรกรรม"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "โอน"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "ไม่สามารถเชื่อมต่อ"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "ไม่สามารถได้รับโค้ด QR ใหม่"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "ไม่รับรอง หรือเอกสารได้รับความเสียหาย"; /* No comment provided by engineer. */ "Unsupported URL" = "ไม่รับรองแหล่งที่มาของทรัพยากร URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "อัพเดต: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "ใช้แล้ว"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "ใช้ที่ที่อยู่ IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "ใช้ชื่อผู้ใช้แล้ว"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "ตรวจสอบ"; -/* adjective, security level */ -"Very High" = "สูงมาก"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "ดูทั้งหมด"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "ดูวลีกู้คืน"; /* No comment provided by engineer. */ -"Voting Address" = "ที่อยู่ซึ่งใช้ในการออกเสียงลงคะแนน"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; /* No comment provided by engineer. */ -"Wallet disabled" = "wallet ถูกปิดการใช้งาน"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Wallet Keys"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "กับ Dash Blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "คุณได้รับการยอมรับคำขอการติดต่อจาก %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "คุณจะต้องใช้วลีกู้คืนนี้เพื่อเข้าถึงเงินทุนของคุณหากอุปกรณ์นี้สูญหายได้รับความเสียหายหรือหาก Dash Wallet เคยถอนการติดตั้งโดยไม่ได้ตั้งใจจากอุปกรณ์นี้"; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = " ชื่อผู้ใช้ DashPay ของคุณคือพร้อมใช้งาน"; /* No comment provided by engineer. */ diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index a1c18f1f5..8f4b0a2fd 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ Dokunmatik Kimliğe erişim izni verilmiyor"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Ödeme İşleniyor"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "İptal"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Değiştir"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Ödeme tutarı değişsin mi?"; /* No comment provided by engineer. */ -"Change PIN" = "PİN Değiştir"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Bağlantınızı kontrol edin"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Seçin"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Uygulamayı kapat"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Onayla"; @@ -230,7 +249,10 @@ "Continue" = "Devam"; /* No comment provided by engineer. */ -"Copied" = "Kopyalandı"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Kopyala"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Tarih"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Varsayılan para birimi, kısayollar, hakkında…"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Gir"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "PIN Girin"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Kurtarma sözcük grubunu gir"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Aktarılacak tutarı girin"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "2FA kodunu aşağıya girin"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Çıkış"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiti"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Geçmiş"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Kabul ediyorum"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Özel anahtar içeri al…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Yetersiz bakiye"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Dahili olarak taşındı"; -/* Invalid transaction */ -"Invalid" = "Geçersiz"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "Invalid Payment Request" = "Geçersiz Ödeme Talebi"; /* No comment provided by engineer. */ "Invalid QR Code" = "Geçersiz QR Kodu"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "Bu önemli"; /* No comment provided by engineer. */ "Join Evolution" = "Evolution'a katıl"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Anahtar çifti %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Yerel Para Birimi"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Yerel istenilen miktar: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Kilitlendi"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Kimliği kopyalamak için uzun tıklayın"; -/* adjective, security level */ -"Low" = "Düşük"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Güvenilen Düğümü Yönet"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "Anadüğüm listesi #%1$d / %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Anadüğüm Kayıt İşlemi"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Anadüğüm Güncellemesi"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Maksimum"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Adrese Taşındı"; -/* No comment provided by engineer. */ "My Contacts" = "Kişilerim"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "İsim"; @@ -551,18 +632,25 @@ "Network" = "Ağ"; /* No comment provided by engineer. */ -"Network fee" = "Ağ ücreti"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Yeni"; /* No comment provided by engineer. */ -"NFC device" = "NFC cihazı"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC cihazı geçerli bir Dash adresi göndermedi"; +"No address copied" = "Kopyalanan adres yok"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Düğüm IP'si"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* 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"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operatör Anahtarları"; /* No comment provided by engineer. */ -"Owner Address" = "Sahip Adresi"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Sahip Anahtarları"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Ödeme"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Ödeniyor..."; /* No comment provided by engineer. */ -"Payments" = "Ödemeler"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Bekliyor"; @@ -631,9 +738,15 @@ /* No comment provided by engineer. */ "PIN is always required to make a payment" = "Ödeme yapmak için her zaman PIN gereklidir"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Cüzdanı yükseltmek için lütfen PİN kodunu girin"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Lütfen telefonunuzu bir NFC cihazının yakınına yerleştirin."; @@ -659,11 +772,17 @@ "Please write it down" = "Lütfen bir yere yazın"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Daha önce kullanılmış IP adresi"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Özel anahtar"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "İşleniyor"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Herkese açık anahtar"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Hızlı Al"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Kayıt ol"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Kayıt ol?"; /* No comment provided by engineer. */ -"Registered from" = "Tarafından kaydedildi"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Kayıtlı Anadüğüm"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Sorun rapor et"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ödüller"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Tara"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Atla"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Harcama Onayı"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Çökmeyi yeniden oluşturma adımları"; + "Support" = "Destek"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limiti"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "İşlem kimliği"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Aktarma"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Bağlanılamıyor"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Yeni QR kod alınamıyor"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Desteklenmeyen veya bozuk belge"; /* No comment provided by engineer. */ "Unsupported URL" = "Desteklenmeyen bağlantı"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Güncellendi: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Kullanıldı"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "IP adresinde kullanıldı"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Kullanıcı adı alınmış"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Onayla"; -/* adjective, security level */ -"Very High" = "Çok Yüksek"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Hepsini gör"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; /* No comment provided by engineer. */ -"Voting Address" = "Oy Verme Adresi"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; /* No comment provided by engineer. */ -"Wallet disabled" = "Cüzdan devredışı"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Cüzdan Anahtarları"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "Dash blok zinciri ile"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "%@'den gelen kişi talebini kabul ettiniz."; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Bu cihazın kaybolması / hasar görmesi, Dash cüzdanının bu cihazdan yanlışlıkla silinmesi durumunda paranıza erişmek için bu kurtarma ifadesine ihtiyacınız olacaktır."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "DashPay Kullanıcı Adınız kullanıma hazır"; /* No comment provided by engineer. */ diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 39ab43c25..0cc630ffa 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* 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"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Đang xử lý giao dịch"; /* No comment provided by engineer. */ @@ -163,17 +164,26 @@ /* No comment provided by engineer. */ "Cancel" = "Huỷ bỏ"; -/* A verb. Action button title for an alert 'Change payment amount?' */ -"Change" = "Thay đổi"; +/* No comment provided by engineer. */ +"Change" = "Change"; + +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; /* No comment provided by engineer. */ "Change payment amount?" = "Thay đổi số tiền cần chuyển?"; /* No comment provided by engineer. */ -"Change PIN" = "Đổi mã PIN"; +"Change Payout Address" = "Change Payout Address"; /* No comment provided by engineer. */ -"Check your connection" = "Kiểm tra kết nối của bạn"; +"Change PIN" = "Change PIN"; + +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + +/* No comment provided by engineer. */ +"Check your connection" = "Check your connection"; /* Choose your Dash username */ "Choose your" = "Chọn của bạn"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Đóng ứng dụng"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "Xác thực"; @@ -230,7 +249,10 @@ "Continue" = "Tiếp tục"; /* No comment provided by engineer. */ -"Copied" = "Đã copy"; +"Control" = "Control"; + +/* No comment provided by engineer. */ +"Copied" = "Copied"; /* No comment provided by engineer. */ "Copy" = "Sao chép"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Ngày"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Tiền tệ ngầm định, lối tắt, về..."; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Nhập"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Nhập mã PIN!"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Nhập cụm từ phục hồi"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Hãy nhập số tiền cần chuyển"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* 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"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Thoát"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Giới hạn Face ID"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "Lịch sử"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "Tôi chấp nhận"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Nhập khoá riêng..."; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Không đủ tiền"; @@ -433,27 +490,34 @@ /* No comment provided by engineer. */ "Internally moved to" = "Được di chuyển nội bộ đến"; -/* Invalid transaction */ -"Invalid" = "Không hợp lệ"; - /* No comment provided by engineer. */ +"Invalid" = "Invalid"; + "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ệ"; +"IP Address" = "IP Address"; + /* 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. */ +"It's Important" = "It's Important"; + /* No comment provided by engineer. */ "It's Important" = "Điều này là quan trọng"; /* No comment provided by engineer. */ "Join Evolution" = "Tham gia Evolution"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Cặp khoá %ld"; @@ -473,7 +537,10 @@ "Local Currency" = "Tiền địa phương"; /* No comment provided by engineer. */ -"Local requested amount: %@" = "Số lượng được yêu cầu: %@"; +"Local Name" = "Local Name"; + +/* No comment provided by engineer. */ +"Local requested amount: %@" = "Local requested amount: %@"; /* No comment provided by engineer. */ "Locked" = "Đã khoá"; @@ -499,15 +566,25 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Giữ để sao chép ID"; -/* adjective, security level */ -"Low" = "Thấp"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ +"Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Quản lý nút tin cậy"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration" = "Đăng ký Masternode"; @@ -517,6 +594,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Cập nhật Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Tối đa"; @@ -541,9 +621,10 @@ /* No comment provided by engineer. */ "Moved to Address" = "Được chuyển đến Địa chỉ"; -/* No comment provided by engineer. */ "My Contacts" = "Các liên hệ của tôi"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Tên"; @@ -551,18 +632,25 @@ "Network" = "Mạng"; /* No comment provided by engineer. */ -"Network fee" = "Phí giao dịch"; +"Network error" = "Network error"; + +/* No comment provided by engineer. */ +"Network fee" = "Network fee"; /* (List of) New (notifications) */ "New" = "Thêm mới"; /* No comment provided by engineer. */ -"NFC device" = "Thiết bị NFC"; +"NFC device" = "NFC device"; /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "Thiết bị NFC không gửi một địa chỉ Dash hợp lệ"; +"No address copied" = "Không có địa chỉ nào được copy"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Địa chỉ IP của nút"; /* adjective, security level */ @@ -589,16 +677,32 @@ /* 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 đó"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chìa khoá của người vận hành"; /* No comment provided by engineer. */ -"Owner Address" = "Địa chỉ của chủ sở hữu"; +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + +/* No comment provided by engineer. */ +"Owner Address" = "Owner Address"; + +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; /* No comment provided by engineer. */ "Owner Keys" = "Khoá của chủ sở hữu"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "thanh toán"; /* No comment provided by engineer. */ @@ -623,7 +727,10 @@ "Paying..." = "Đang gửi..."; /* No comment provided by engineer. */ -"Payments" = "Các giao dịch"; +"Payments" = "Payments"; + +/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; /* No comment provided by engineer. */ "Pending" = "Đang chờ"; @@ -631,9 +738,15 @@ /* 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"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Hãy nhập mã PIN để nâng cấp ví"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Hãy đặt điện thoại của bạn cạnh thiết bị NFC."; @@ -659,11 +772,17 @@ "Please write it down" = "Hãy vui lòng ghi xuống"; /* No comment provided by engineer. */ -"Previously used at IP address" = "Trước đó được dùng tại địa chỉ IP"; +"Port" = "Port"; + +/* No comment provided by engineer. */ +"Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Khoá riêng"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Đang xử lý"; @@ -673,6 +792,9 @@ /* No comment provided by engineer. */ "Public key" = "Khoá công khai"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Nhận nhanh"; @@ -718,15 +840,24 @@ /* Button title, Register (username) */ "Register" = "Đăng ký"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Đăng ký?"; /* No comment provided by engineer. */ -"Registered from" = "Đã đăng ký từ"; +"Registered from" = "Registered from"; /* No comment provided by engineer. */ "Registered Masternode" = "Masternode đã đăng ký"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Báo cáo về lỗi"; @@ -760,6 +891,9 @@ /* No comment provided by engineer. */ "Rewards" = "Phần thưởng"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Quét"; @@ -889,6 +1023,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Hiển thị câu phục hồi"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Bỏ qua"; @@ -910,7 +1047,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Xác nhận chi tiêu"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Các bước để tái tạo lại lỗi"; + "Support" = "Hỗ trợ"; /* No comment provided by engineer. */ @@ -985,9 +1132,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Giới hạn Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Mã giao dịch"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Chuyển"; @@ -1006,15 +1159,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Không thể kết nối"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* 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. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Tài liệu không được hỗ trợ hoặc bị hỏng"; /* No comment provided by engineer. */ "Unsupported URL" = "Địa chỉ URL không được hỗ trợ"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Đã cập nhật: %@"; @@ -1028,10 +1211,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -"Used" = "Đã dùng"; +"Use Wallet" = "Use Wallet"; /* No comment provided by engineer. */ -"Used at IP address" = "Được sử dụng tại địa chỉ IP"; +"Used" = "Used"; + +/* No comment provided by engineer. */ +"Used at IP address" = "Used at IP address"; /* No comment provided by engineer. */ "Username taken" = "Tên người dùng đã được chọn"; @@ -1051,8 +1237,11 @@ /* No comment provided by engineer. */ "Verify" = "Kiểm tra"; -/* adjective, security level */ -"Very High" = "Rất cao"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + +/* No comment provided by engineer. */ +"Very High" = "Very High"; /* No comment provided by engineer. */ "View All" = "Xem tất cả"; @@ -1067,13 +1256,25 @@ "View Recovery Phrase" = "Xem cụm từ phục hồi"; /* No comment provided by engineer. */ -"Voting Address" = "Địa chỉ bỏ phiếu"; +"View Signing Info" = "View Signing Info"; + +/* No comment provided by engineer. */ +"Voting Address" = "Voting Address"; + +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; /* No comment provided by engineer. */ "Voting Keys" = "Khoá bỏ phiếu"; /* No comment provided by engineer. */ -"Wallet disabled" = "Ví đã bị vô hiệu hoá"; +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + +/* No comment provided by engineer. */ +"Wallet disabled" = "Wallet disabled"; /* No comment provided by engineer. */ "Wallet Keys" = "Khoá của ví"; @@ -1117,7 +1318,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "với blockchain của Dash"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "Bạn đã chấp nhận yêu cầu liên hệ từ %@"; /* No comment provided by engineer. */ @@ -1150,7 +1352,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "Bạn cần cụm từ phục hồi để truy cập đến khoản tiền của bạn nếu thiết bị này bị mất, hỏng hoặc ví Dash Wallet vô tình bị gỡ bỏ khỏi thiết bị này."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Tên người dùng DashPay của bạn đã sẵn sàng để sử dụng"; /* No comment provided by engineer. */ diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 8d2c7a9fa..4729091a0 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -166,12 +167,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Close App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "确认"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Enter the amount to transfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "面容ID限制"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "History"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Import private key…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Invalid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +509,10 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; -/* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +531,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -499,13 +561,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ "Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Manage Trusted Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +586,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,15 +613,19 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -562,7 +638,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +669,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Pay"; /* No comment provided by engineer. */ @@ -625,15 +721,22 @@ /* No comment provided by engineer. */ "Payments" = "Payments"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Pending"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "请将你的手机靠近NFC设备."; @@ -658,12 +761,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -673,6 +782,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -718,6 +830,12 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -727,6 +845,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; @@ -760,6 +881,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -889,6 +1013,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Skip"; @@ -910,7 +1037,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Spending Confirmation"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1122,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "触控ID限制"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1149,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1027,6 +1200,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1051,6 +1227,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Very High"; @@ -1066,12 +1245,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Wallet disabled"; @@ -1117,7 +1308,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1342,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index f549cfa96..d97511a9a 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -13,7 +13,8 @@ /* No comment provided by engineer. */ "%@ is not allowed to access Touch ID" = "%@ is not allowed to access Touch ID"; -/* No comment provided by engineer. */ +"%ld used" = "%ld used"; + "(1/3) Processing Payment" = "(1/3) Processing Payment"; /* No comment provided by engineer. */ @@ -166,12 +167,21 @@ /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -193,6 +203,15 @@ /* No comment provided by engineer. */ "Close App" = "Close App"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* No comment provided by engineer. */ "Confirm" = "確認:"; @@ -229,6 +248,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -274,6 +296,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -310,15 +335,42 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Private Key" = "Enter Owner Private Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer" = "Enter the amount to transfer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -331,9 +383,10 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; -/* No comment provided by engineer. */ "Extended Public Keys" = "Extended Public Keys"; +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID 解鎖的限制"; @@ -397,7 +450,8 @@ /* No comment provided by engineer. */ "History" = "History"; -/* No comment provided by engineer. */ +"Host" = "Host"; + "I Accept" = "I Accept"; /* No comment provided by engineer. */ @@ -424,6 +478,9 @@ /* No comment provided by engineer. */ "Import private key…" = "Import private key…"; +/* No comment provided by engineer. */ +"Incorrect collateral" = "Incorrect collateral"; + /* No comment provided by engineer. */ "Insufficient funds" = "Insufficient funds"; @@ -436,12 +493,13 @@ /* Invalid transaction */ "Invalid" = "Invalid"; -/* No comment provided by engineer. */ "Invalid Payment Request" = "Invalid Payment Request"; /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +"IP Address" = "IP Address"; + /* 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."; @@ -451,9 +509,10 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; -/* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -472,6 +531,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -499,13 +561,20 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; -/* adjective, security level */ +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + +/* No comment provided by engineer. */ "Low" = "Low"; /* No comment provided by engineer. */ "Manage Trusted Node" = "Manage Trusted Node"; +"Masternode Features" = "Masternode Features"; + /* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + "masternode list #%d of %d" = "masternode list #%1$d of %2$d"; /* No comment provided by engineer. */ @@ -517,6 +586,9 @@ /* No comment provided by engineer. */ "Masternode Update" = "Masternode Update"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -541,15 +613,19 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; -/* No comment provided by engineer. */ "My Contacts" = "My Contacts"; +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Name" = "Name"; /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -562,7 +638,11 @@ /* No comment provided by engineer. */ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; +"No address copied" = "No address copied"; + /* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + "Node IP" = "Node IP"; /* adjective, security level */ @@ -589,16 +669,32 @@ /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +"Owner Private Key" = "Owner Private Key"; + /* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + "Pay" = "Pay"; /* No comment provided by engineer. */ @@ -625,15 +721,22 @@ /* No comment provided by engineer. */ "Payments" = "Payments"; -/* No comment provided by engineer. */ +"Payout Address" = "Payout Address"; + "Pending" = "Pending"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "PIN is always required to make a payment"; +/* No comment provided by engineer. */ +"Please copy the following message." = "Please copy the following message."; + /* No comment provided by engineer. */ "Please enter PIN to upgrade wallet" = "Please enter PIN to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "請將手機放在NFC設備附近。"; @@ -658,12 +761,18 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously used at IP address" = "Previously used at IP address"; /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -673,6 +782,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -718,6 +830,12 @@ /* Button title, Register (username) */ "Register" = "Register"; +/* No comment provided by engineer. */ +"Register" = "Register"; + +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -727,6 +845,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* Translate it as short as possible! (24 symbols max) */ "Report an Issue" = "Report an Issue"; @@ -760,6 +881,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -889,6 +1013,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Skip" = "Skip"; @@ -910,7 +1037,17 @@ /* No comment provided by engineer. */ "Spending Confirmation" = "Spending Confirmation"; +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + /* No comment provided by engineer. */ +"Step 3" = "Step 3"; + +/* No comment provided by engineer. */ +"Steps to reproduce the crash" = "Steps to reproduce the crash"; + "Support" = "Support"; /* No comment provided by engineer. */ @@ -985,9 +1122,15 @@ /* No comment provided by engineer. */ "Touch ID limit" = "指紋辨識解鎖的限制"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* A verb, button title. */ "Transfer" = "Transfer"; @@ -1006,15 +1149,45 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; /* No comment provided by engineer. */ "Unsupported URL" = "Unsupported URL"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -1027,6 +1200,9 @@ /* No comment provided by engineer. */ "Uphold" = "Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1051,6 +1227,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* adjective, security level */ "Very High" = "Very High"; @@ -1066,12 +1245,24 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet disabled" = "Wallet disabled"; @@ -1117,7 +1308,8 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; -/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + "You accepted the contact request from %@" = "You accepted the contact request from %@"; /* No comment provided by engineer. */ @@ -1150,7 +1342,8 @@ /* No comment provided by engineer. */ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device." = "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet ever is accidentally uninstalled from this device."; -/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + "Your DashPay Username is ready to use" = "Your DashPay Username is ready to use"; /* No comment provided by engineer. */ diff --git a/Podfile b/Podfile index 55289f2f1..be642b4a0 100644 --- a/Podfile +++ b/Podfile @@ -2,7 +2,7 @@ target 'dashwallet' do platform :ios, '12.0' pod 'DashSync', :path => '../DashSync/' - + pod 'CloudInAppMessaging', '0.1.0' pod 'KVO-MVVM', '0.5.6' @@ -72,7 +72,8 @@ post_install do |installer| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end +end # update info about current DashSync version # the command runs in the background after 1 sec, when `pod install` updates Podfile.lock - system("(sleep 1; sh ./scripts/dashsync_version.sh) &") -end +# system("(sleep 1; sh ./scripts/dashsync_version.sh) &") +#end diff --git a/Podfile.lock b/Podfile.lock index ec3478386..f62dcad27 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -510,6 +510,6 @@ SPEC CHECKSUMS: TinyCborObjc: 5204540fb90ff0c40fb22d408fa51bab79d78a80 UIViewController-KeyboardAdditions: a691dc7e63a49854d341455a778ee8497dfc4662 -PODFILE CHECKSUM: 72d5438b22e5ad722fe1d6024e4c3c5ae27492bd +PODFILE CHECKSUM: 595608d3c6cb3bfaf7c793a54e30629741443aa0 COCOAPODS: 1.10.1