diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index bc674a480..364f6be6a 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -451,9 +451,6 @@ 47AE8BFB28C1306000490F5E /* ExploreMapAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDA28C1305E00490F5E /* ExploreMapAnnotationView.swift */; }; 47AE8BFD28C1306000490F5E /* ExploreMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDC28C1305E00490F5E /* ExploreMapView.swift */; }; 47AE8BFE28C1306000490F5E /* AtmListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDD28C1305E00490F5E /* AtmListViewController.swift */; }; - 47AE8BFF28C1306000490F5E /* DWExploreHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */; }; - 47AE8C0028C1306000490F5E /* DWExploreTestnetContentsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */; }; - 47AE8C0128C1306000490F5E /* DWExploreTestnetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */; }; 47AE8C0328C1F0C600490F5E /* PointOfUseListSegmentedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0228C1F0C600490F5E /* PointOfUseListSegmentedCell.swift */; }; 47AE8C0528C1F74A00490F5E /* PointOfUseListFiltersCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0428C1F74A00490F5E /* PointOfUseListFiltersCell.swift */; }; 47AE8C0728C2274200490F5E /* PointOfUseListSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0628C2274200490F5E /* PointOfUseListSearchCell.swift */; }; @@ -573,8 +570,6 @@ 754565CF2DAA52A000DA4E8E /* CTXSpendEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C52DAA52A000DA4E8E /* CTXSpendEndpoint.swift */; }; 754565D12DABA5F300DA4E8E /* MerchantTypesDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565D02DABA5EB00DA4E8E /* MerchantTypesDialog.swift */; }; 754565D22DABA5F300DA4E8E /* MerchantTypesDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565D02DABA5EB00DA4E8E /* MerchantTypesDialog.swift */; }; - 754565D42DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565D32DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift */; }; - 754565D52DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565D32DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift */; }; 7545ED532DA91A2F0075F45C /* CTXConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED522DA91A2F0075F45C /* CTXConstants.swift */; }; 7545ED542DA91A2F0075F45C /* CTXConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED522DA91A2F0075F45C /* CTXConstants.swift */; }; 7545ED572DA91AF10075F45C /* CTXSpendUserAuthViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED562DA91AEA0075F45C /* CTXSpendUserAuthViewModel.swift */; }; @@ -583,6 +578,10 @@ 7545ED5E2DA91F590075F45C /* CTXSpendTermsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED5C2DA91F590075F45C /* CTXSpendTermsScreen.swift */; }; 7545ED602DA91FC60075F45C /* NumericKeyboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED5F2DA91FC60075F45C /* NumericKeyboardView.swift */; }; 7545ED612DA91FC60075F45C /* NumericKeyboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED5F2DA91FC60075F45C /* NumericKeyboardView.swift */; }; + 7549BE532DEAEA18004F0BAF /* MetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */; }; + 7549BE542DEAEA18004F0BAF /* MetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */; }; + 7549BE572DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */; }; + 7549BE582DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */; }; 754BEA122C0B6BD700E8C93C /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */; }; 754BEA132C0B6BD700E8C93C /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */; }; 754C27C72CC3C0B900BA7B9F /* UsernamePrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C27C52CC3C0B900BA7B9F /* UsernamePrefs.swift */; }; @@ -610,6 +609,12 @@ 7566F4842BB6949E005238D2 /* ToolsMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7566F4822BB69498005238D2 /* ToolsMenuViewController.swift */; }; 7566F48A2BB6CAF2005238D2 /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7566F4892BB6CAF2005238D2 /* MenuItem.swift */; }; 7566F48B2BB6CAF2005238D2 /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7566F4892BB6CAF2005238D2 /* MenuItem.swift */; }; + 7569D6832DE6DA6800768BFF /* ExploreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6822DE6DA6800768BFF /* ExploreViewController.swift */; }; + 7569D6842DE6DA6800768BFF /* ExploreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6822DE6DA6800768BFF /* ExploreViewController.swift */; }; + 7569D6862DE6DB2200768BFF /* ExploreHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6852DE6DB1B00768BFF /* ExploreHeaderView.swift */; }; + 7569D6872DE6DB2200768BFF /* ExploreHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6852DE6DB1B00768BFF /* ExploreHeaderView.swift */; }; + 7569D6892DE6DB6700768BFF /* ExploreContentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6882DE6DB6700768BFF /* ExploreContentsView.swift */; }; + 7569D68A2DE6DB6700768BFF /* ExploreContentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7569D6882DE6DB6700768BFF /* ExploreContentsView.swift */; }; 756FE7062CDCBB1B00E6C195 /* CreateUsernameViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756FE7052CDCBB1900E6C195 /* CreateUsernameViewModel.swift */; }; 756FE7082CDCBBC800E6C195 /* UsernameValidationRuleResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756FE7072CDCBBBB00E6C195 /* UsernameValidationRuleResult.swift */; }; 756FE70A2CDCD6D600E6C195 /* ValidationCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756FE7092CDCD6CD00E6C195 /* ValidationCheck.swift */; }; @@ -698,6 +703,16 @@ 75D66D332B05E7AE00A8DDA6 /* QuickVoteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D66D322B05E7AE00A8DDA6 /* QuickVoteViewController.swift */; }; 75D6D8E42D96A6DB00E40A6D /* StubTransactionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D6D8E32D96A6D500E40A6D /* StubTransactionSource.swift */; }; 75D6D8E52D96A6DB00E40A6D /* StubTransactionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D6D8E32D96A6D500E40A6D /* StubTransactionSource.swift */; }; + 75D9EBB82DE5CC3A009416A2 /* AddGiftCardsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBB72DE5CC3A009416A2 /* AddGiftCardsTable.swift */; }; + 75D9EBB92DE5CC3A009416A2 /* AddGiftCardsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBB72DE5CC3A009416A2 /* AddGiftCardsTable.swift */; }; + 75D9EBBC2DE5CD8B009416A2 /* GiftCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBBB2DE5CD8B009416A2 /* GiftCard.swift */; }; + 75D9EBBD2DE5CD8B009416A2 /* GiftCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBBB2DE5CD8B009416A2 /* GiftCard.swift */; }; + 75D9EBC22DE5CD9C009416A2 /* GiftCardsDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC12DE5CD9C009416A2 /* GiftCardsDAO.swift */; }; + 75D9EBC32DE5CD9C009416A2 /* GiftCardsDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC12DE5CD9C009416A2 /* GiftCardsDAO.swift */; }; + 75D9EBC62DE5CE14009416A2 /* GiftCardDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */; }; + 75D9EBC72DE5CE14009416A2 /* GiftCardDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */; }; + 75D9EBC82DE5CE14009416A2 /* GiftCardDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */; }; + 75D9EBC92DE5CE14009416A2 /* GiftCardDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */; }; 75DFAF2E2CF7066600CCA68B /* VoteButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75DFAF2D2CF7066200CCA68B /* VoteButton.swift */; }; 75E2F3C82AA4CF1900C3B458 /* Topper-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 75E2F3C72AA4CF1900C3B458 /* Topper-Info.plist */; }; 75E2F3CA2AA4D1B900C3B458 /* Topper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E2F3C92AA4D1B900C3B458 /* Topper.swift */; }; @@ -1225,7 +1240,6 @@ C9D2C7AB2A320AA000D15901 /* DWBaseFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BC82347E0D700451078 /* DWBaseFormTableViewCell.m */; }; C9D2C7AC2A320AA000D15901 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAC6296FAEBB00F63AC4 /* AccountCell.swift */; }; C9D2C7AD2A320AA000D15901 /* DWTransactionListDataProviderStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EA723A79AD2006A2A59 /* DWTransactionListDataProviderStub.m */; }; - C9D2C7B02A320AA000D15901 /* DWExploreHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */; }; C9D2C7B12A320AA000D15901 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA028C896BC000427E7 /* CoinbaseBaseIDForCurrencyResponse.swift */; }; C9D2C7B22A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; C9D2C7B32A320AA000D15901 /* SpecifyAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AC8412297822E000BD1B49 /* SpecifyAmountViewController.swift */; }; @@ -1251,7 +1265,6 @@ C9D2C7CD2A320AA000D15901 /* UIViewController+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDEECD294A3CF2008AE06D /* UIViewController+DashWallet.swift */; }; C9D2C7CE2A320AA000D15901 /* CrowdNodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470617D5299A671900DCC667 /* CrowdNodeCell.swift */; }; C9D2C7CF2A320AA000D15901 /* MerchantListLocationOffCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD128C1305E00490F5E /* MerchantListLocationOffCell.swift */; }; - C9D2C7D02A320AA000D15901 /* DWExploreTestnetContentsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */; }; C9D2C7D32A320AA000D15901 /* CrowdNodeAPIConfirmationTx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1186092429759C4B00279FCC /* CrowdNodeAPIConfirmationTx.swift */; }; C9D2C7D42A320AA000D15901 /* UIViewController+DWEmbedding.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913E8F23A31713006A2A59 /* UIViewController+DWEmbedding.m */; }; C9D2C7D62A320AA000D15901 /* CALayer+DWShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2CD71222F97B65008C7BC9 /* CALayer+DWShadow.m */; }; @@ -1385,7 +1398,6 @@ C9D2C87B2A320AA000D15901 /* DatabaseConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479E7923287C00EC00D0F7D7 /* DatabaseConnection.swift */; }; C9D2C87C2A320AA000D15901 /* DWSwitcherFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE312230FF4600956D5F /* DWSwitcherFormCellModel.m */; }; C9D2C87D2A320AA000D15901 /* DWIntrinsicTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFF723053ECE00C475EB /* DWIntrinsicTextView.m */; }; - C9D2C87E2A320AA000D15901 /* DWExploreTestnetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */; }; C9D2C87F2A320AA000D15901 /* AddressUserInfoDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471A2607289ACDA00056B7B2 /* AddressUserInfoDAO.swift */; }; C9D2C8812A320AA000D15901 /* DWModalTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69D223143568001B8C90 /* DWModalTransition.m */; }; C9D2C8832A320AA000D15901 /* MerchantsDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BD628C1305E00490F5E /* MerchantsDataProvider.swift */; }; @@ -2360,12 +2372,6 @@ 47AE8BDA28C1305E00490F5E /* ExploreMapAnnotationView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExploreMapAnnotationView.swift; sourceTree = ""; }; 47AE8BDC28C1305E00490F5E /* ExploreMapView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExploreMapView.swift; sourceTree = ""; }; 47AE8BDD28C1305E00490F5E /* AtmListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AtmListViewController.swift; sourceTree = ""; }; - 47AE8BDE28C1305E00490F5E /* DWExploreTestnetViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWExploreTestnetViewController.h; sourceTree = ""; }; - 47AE8BE028C1305E00490F5E /* DWExploreTestnetContentsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWExploreTestnetContentsView.h; sourceTree = ""; }; - 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWExploreHeaderView.m; sourceTree = ""; }; - 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWExploreTestnetContentsView.m; sourceTree = ""; }; - 47AE8BE328C1305E00490F5E /* DWExploreHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWExploreHeaderView.h; sourceTree = ""; }; - 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWExploreTestnetViewController.m; sourceTree = ""; }; 47AE8C0228C1F0C600490F5E /* PointOfUseListSegmentedCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseListSegmentedCell.swift; sourceTree = ""; }; 47AE8C0428C1F74A00490F5E /* PointOfUseListFiltersCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseListFiltersCell.swift; sourceTree = ""; }; 47AE8C0628C2274200490F5E /* PointOfUseListSearchCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseListSearchCell.swift; sourceTree = ""; }; @@ -2469,11 +2475,12 @@ 754565C52DAA52A000DA4E8E /* CTXSpendEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendEndpoint.swift; sourceTree = ""; }; 754565C72DAA52A000DA4E8E /* CTXSpendService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendService.swift; sourceTree = ""; }; 754565D02DABA5EB00DA4E8E /* MerchantTypesDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MerchantTypesDialog.swift; sourceTree = ""; }; - 754565D32DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DWExploreTestnetViewController+DashWallet.swift"; sourceTree = ""; }; 7545ED522DA91A2F0075F45C /* CTXConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXConstants.swift; sourceTree = ""; }; 7545ED562DA91AEA0075F45C /* CTXSpendUserAuthViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendUserAuthViewModel.swift; sourceTree = ""; }; 7545ED5C2DA91F590075F45C /* CTXSpendTermsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendTermsScreen.swift; sourceTree = ""; }; 7545ED5F2DA91FC60075F45C /* NumericKeyboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumericKeyboardView.swift; sourceTree = ""; }; + 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetadataProvider.swift; sourceTree = ""; }; + 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomIconMetadataProvider.swift; sourceTree = ""; }; 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModel.swift; sourceTree = ""; }; 754C27C52CC3C0B900BA7B9F /* UsernamePrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernamePrefs.swift; sourceTree = ""; }; 754C27CB2CC3C14F00BA7B9F /* FeatureSingleItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureSingleItem.swift; sourceTree = ""; }; @@ -2492,6 +2499,9 @@ 756557B42CE84FF70060348D /* FeeInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeeInfo.swift; sourceTree = ""; }; 7566F4822BB69498005238D2 /* ToolsMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolsMenuViewController.swift; sourceTree = ""; }; 7566F4892BB6CAF2005238D2 /* MenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + 7569D6822DE6DA6800768BFF /* ExploreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreViewController.swift; sourceTree = ""; }; + 7569D6852DE6DB1B00768BFF /* ExploreHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreHeaderView.swift; sourceTree = ""; }; + 7569D6882DE6DB6700768BFF /* ExploreContentsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreContentsView.swift; sourceTree = ""; }; 756A8F131CE566F6007893E2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Interface.strings; sourceTree = ""; }; 756FE7052CDCBB1900E6C195 /* CreateUsernameViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateUsernameViewModel.swift; sourceTree = ""; }; 756FE7072CDCBBBB00E6C195 /* UsernameValidationRuleResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameValidationRuleResult.swift; sourceTree = ""; }; @@ -2557,6 +2567,11 @@ 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = UsernameRequests.storyboard; sourceTree = ""; }; 75D66D322B05E7AE00A8DDA6 /* QuickVoteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickVoteViewController.swift; sourceTree = ""; }; 75D6D8E32D96A6D500E40A6D /* StubTransactionSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubTransactionSource.swift; sourceTree = ""; }; + 75D9EBB72DE5CC3A009416A2 /* AddGiftCardsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGiftCardsTable.swift; sourceTree = ""; }; + 75D9EBBB2DE5CD8B009416A2 /* GiftCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCard.swift; sourceTree = ""; }; + 75D9EBC12DE5CD9C009416A2 /* GiftCardsDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCardsDAO.swift; sourceTree = ""; }; + 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCardDetailsView.swift; sourceTree = ""; }; + 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCardDetailsViewModel.swift; sourceTree = ""; }; 75DE02411B0EB79A0027FF08 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 75DE02491B0EB7C80027FF08 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; 75DE024D1B0EB7FC0027FF08 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; @@ -3016,7 +3031,6 @@ C943B5882A40ED4500AF23C5 /* DWUsernameValidationRule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWUsernameValidationRule.m; sourceTree = ""; }; C943B59A2A40EE4800AF23C5 /* DWNetworkErrorViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWNetworkErrorViewController.m; sourceTree = ""; }; C943B59B2A40EE4800AF23C5 /* DWNetworkErrorViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWNetworkErrorViewController.h; sourceTree = ""; }; - C94946DE2A25EDA8008A678D /* DWHomeViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWHomeViewControllerDelegate.h; sourceTree = ""; }; C94946DF2A25EE24008A678D /* DWMainMenuViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMainMenuViewControllerDelegate.h; sourceTree = ""; }; C94D98202A4CC78F00F3BEE1 /* DashInputField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashInputField.swift; sourceTree = ""; }; C94D98222A4CC85400F3BEE1 /* UIView+Dash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Dash.swift"; sourceTree = ""; }; @@ -3783,6 +3797,7 @@ C9F451FE2A0CE60400825057 /* Home Header View */, 2A2CD70B22F97A9D008C7BC9 /* Shortcuts */, 2A4E533C22F025ED00E5168A /* Cells */, + 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */, C9F452002A0CE6C900825057 /* HomeView.swift */, 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */, 751C05DC2D3E39A600475E52 /* TransactionListDataItem.swift */, @@ -4597,12 +4612,12 @@ 2A9CEBB622E1FA0000A50237 /* Home */ = { isa = PBXGroup; children = ( + 7549BE552DEAECA5004F0BAF /* Custom Icons */, 2A1A60B92674083B003DAC65 /* Syncing Views */, 2A913E7223A2EAEF006A2A59 /* Protocols */, 2A2CD6E522F46D1A008C7BC9 /* Models */, 2A307CB322E6FA7F00A18347 /* Views */, 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */, - C94946DE2A25EDA8008A678D /* DWHomeViewControllerDelegate.h */, 75FFD6B72BF47BA20032879E /* HomeViewController.swift */, 75FFD6BA2BF48DF80032879E /* HomeViewController+JailbreakCheck.swift */, 75FFD6BD2BF491FC0032879E /* HomeViewController+BackupReminder.swift */, @@ -5152,6 +5167,7 @@ 4709C310287E78BD00B4BD48 /* Migrations */ = { isa = PBXGroup; children = ( + 75D9EBB72DE5CC3A009416A2 /* AddGiftCardsTable.swift */, 4709C311287E78BD00B4BD48 /* SeedDB.swift */, ); path = Migrations; @@ -5665,6 +5681,7 @@ 47AE8B9928BFAD0B00490F5E /* DAO */ = { isa = PBXGroup; children = ( + 75D9EBC12DE5CD9C009416A2 /* GiftCardsDAO.swift */, 47AE8BA028BFADB600490F5E /* PointOfUseDAO.swift */, ); path = DAO; @@ -5673,6 +5690,7 @@ 47AE8B9A28BFAD2000490F5E /* Entites */ = { isa = PBXGroup; children = ( + 75D9EBBB2DE5CD8B009416A2 /* GiftCard.swift */, 753E46E72DE1E24300A3FF2A /* CTXSpendModels.swift */, 47AE8B9B28BFAD2800490F5E /* ExplorePointOfUse.swift */, ); @@ -5709,9 +5727,7 @@ children = ( 47AE8BB428C1305E00490F5E /* Merchants & ATMs */, 47AE8BDF28C1305E00490F5E /* Views */, - 47AE8BDE28C1305E00490F5E /* DWExploreTestnetViewController.h */, - 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */, - 754565D32DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift */, + 7569D6822DE6DA6800768BFF /* ExploreViewController.swift */, 47838B7E290160860003E8AB /* ExploreDash.storyboard */, ); path = "Explore Dash"; @@ -5802,10 +5818,8 @@ isa = PBXGroup; children = ( 7545ED552DA91AC80075F45C /* DashSpend */, - 47AE8BE028C1305E00490F5E /* DWExploreTestnetContentsView.h */, - 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */, - 47AE8BE328C1305E00490F5E /* DWExploreHeaderView.h */, - 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */, + 7569D6882DE6DB6700768BFF /* ExploreContentsView.swift */, + 7569D6852DE6DB1B00768BFF /* ExploreHeaderView.swift */, ); path = Views; sourceTree = ""; @@ -6073,6 +6087,8 @@ 7545ED552DA91AC80075F45C /* DashSpend */ = { isa = PBXGroup; children = ( + 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */, + 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */, 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */, 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */, 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */, @@ -6084,6 +6100,14 @@ path = DashSpend; sourceTree = ""; }; + 7549BE552DEAECA5004F0BAF /* Custom Icons */ = { + isa = PBXGroup; + children = ( + 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */, + ); + path = "Custom Icons"; + sourceTree = ""; + }; 754C27C62CC3C0B900BA7B9F /* Usernames */ = { isa = PBXGroup; children = ( @@ -8504,6 +8528,7 @@ 11517C87294B0FED004FC7BF /* CrowdNodeWebService.swift in Sources */, 75EBAA1D2BBA71D9004488E3 /* ZenLedgerInfoSheet.swift in Sources */, 2A4E531422E9F0A200E5168A /* DWStartViewController.m in Sources */, + 7569D6832DE6DA6800768BFF /* ExploreViewController.swift in Sources */, 2A4E531522E9F0A200E5168A /* DWStartModel.m in Sources */, 2AB3417A23A929B6004E37A7 /* DWAdvancedSecurityModelStub.m in Sources */, 4709C32128818D5400B4BD48 /* Foundation+Bitcoin.swift in Sources */, @@ -8642,6 +8667,7 @@ 110D1781298BA9AF005BEB30 /* WKWebView+CrowdNode.swift in Sources */, 47FA3AFF29350929008D58DC /* SyncingActivityMonitor.swift in Sources */, C9F42FB029DC27F4001BC549 /* EmptyUIView.swift in Sources */, + 75D9EBB82DE5CC3A009416A2 /* AddGiftCardsTable.swift in Sources */, 757514E32B15DF7C0026AD8E /* ShadowView.swift in Sources */, 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */, C9F451F72A0CAE1300825057 /* SyncView.swift in Sources */, @@ -8683,6 +8709,8 @@ 2A3DC86E239717C2004B3DBA /* DWRecoverWalletCommand.m in Sources */, 2A9FFE832230FF4700956D5F /* DWSwitcherFormTableViewCell.m in Sources */, 2A0C699C23104588001B8C90 /* DWPaymentInput.m in Sources */, + 75D9EBC62DE5CE14009416A2 /* GiftCardDetailsViewModel.swift in Sources */, + 75D9EBC72DE5CE14009416A2 /* GiftCardDetailsView.swift in Sources */, 114D16B629812730009A124C /* OnlineAccountDetailsController.swift in Sources */, C9F451E92A0BDAE700825057 /* UIApplication+DashWallet.swift in Sources */, 110D1784298E68A8005BEB30 /* OnlineAccountInfoController.swift in Sources */, @@ -8739,6 +8767,7 @@ 2A1B7DA52323AC1F00BA8C6A /* DWModalPopupPresentationController.m in Sources */, 11517C8A294B11DD004FC7BF /* CrowdNodeBalance.swift in Sources */, 471DD1BA290A962B00E030C8 /* String+DashWallet.swift in Sources */, + 7569D6862DE6DB2200768BFF /* ExploreHeaderView.swift in Sources */, 75AA33CF2BF9D44A00F12465 /* ButtonsGroup.swift in Sources */, 2A0C69D723143B2F001B8C90 /* DWBaseModalViewController.m in Sources */, C956AF2D2A5CEA1F002FAB75 /* SheetViewController.swift in Sources */, @@ -8756,6 +8785,7 @@ 47E94B97296D7D5B000FE68E /* CustodialSwapsViewController.swift in Sources */, 2A392568234CFE9D00316EA6 /* NSAttributedString+DWHighlightText.m in Sources */, 4751136F28D9B50E00223B77 /* CoinbaseInfoViewController.swift in Sources */, + 7549BE542DEAEA18004F0BAF /* MetadataProvider.swift in Sources */, 2A9FFE7E2230FF4600956D5F /* DWSelectorFormCellModel.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, 755B4B222B0C903500B844F0 /* DWDateFormatter.swift in Sources */, @@ -8765,7 +8795,6 @@ 2A7A7BC92347E0D700451078 /* DWBaseFormTableViewCell.m in Sources */, 4751CAC7296FAEBB00F63AC4 /* AccountCell.swift in Sources */, 2A913EA823A79AD2006A2A59 /* DWTransactionListDataProviderStub.m in Sources */, - 47AE8BFF28C1306000490F5E /* DWExploreHeaderView.m in Sources */, 0F6EDFC628C896BD000427E7 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */, 759609232C455B2000F3BF04 /* SendIntro.swift in Sources */, 47AC8413297822E000BD1B49 /* SpecifyAmountViewController.swift in Sources */, @@ -8793,7 +8822,6 @@ 47CDEECE294A3CF2008AE06D /* UIViewController+DashWallet.swift in Sources */, 470617D6299A671900DCC667 /* CrowdNodeCell.swift in Sources */, 47AE8BF528C1306000490F5E /* MerchantListLocationOffCell.swift in Sources */, - 47AE8C0028C1306000490F5E /* DWExploreTestnetContentsView.m in Sources */, 1186092529759C4B00279FCC /* CrowdNodeAPIConfirmationTx.swift in Sources */, 2A913E9023A31713006A2A59 /* UIViewController+DWEmbedding.m in Sources */, 2A2CD71322F97B65008C7BC9 /* CALayer+DWShadow.m in Sources */, @@ -8830,6 +8858,7 @@ 47305872295C971F004641DA /* UIViewController+AlertPresenting.swift in Sources */, 2A858A0F237EE89C0097A7B5 /* DSWatchTransactionDataObject.m in Sources */, 47FA3B0229364991008D58DC /* HTTPClient.swift in Sources */, + 7549BE582DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */, 2A8B9E6F2302A9C200FF8653 /* DWPasteboardAddressExtractor.m in Sources */, 757111A12CF20ED800A7D452 /* CoinJoinMixingTxSet.swift in Sources */, 477F501529531C07003C7508 /* ViewModel+Coinbase.swift in Sources */, @@ -8884,6 +8913,7 @@ 47AE8BA128BFADB600490F5E /* PointOfUseDAO.swift in Sources */, 4759D51729300212002F20DC /* ProvideAmountViewController.swift in Sources */, C94D98252A4CC8FD00F3BEE1 /* UIControl+Dash.swift in Sources */, + 75D9EBBD2DE5CD8B009416A2 /* GiftCard.swift in Sources */, 2AD1CE7722DB51B500C99324 /* DWCheckbox.m in Sources */, 2ACCD8592319399100A96B62 /* DWRequestAmountViewController.m in Sources */, C909615329F28E3700002D82 /* DerivationPathKeysModel.swift in Sources */, @@ -8960,7 +8990,6 @@ 75889B762AD296E700C17F5D /* CoinJoinInfoViewController.swift in Sources */, 2A9FFE822230FF4700956D5F /* DWSwitcherFormCellModel.m in Sources */, 2A74EFF823053ECE00C475EB /* DWIntrinsicTextView.m in Sources */, - 47AE8C0128C1306000490F5E /* DWExploreTestnetViewController.m in Sources */, 471A2608289ACDA00056B7B2 /* AddressUserInfoDAO.swift in Sources */, 2A0C69D323143568001B8C90 /* DWModalTransition.m in Sources */, 47AE8BF928C1306000490F5E /* MerchantsDataProvider.swift in Sources */, @@ -8998,6 +9027,7 @@ 7581B19B2CE349BB00714007 /* ConfirmSpendDialog.swift in Sources */, 472D13DF299DF5C6006903F1 /* TaxReportGenerator.swift in Sources */, 119E8D122909513F00D406C1 /* CrowdNodeError.swift in Sources */, + 75D9EBC32DE5CD9C009416A2 /* GiftCardsDAO.swift in Sources */, 111C3C4E296C52F800788E18 /* WithdrawalLimit.swift in Sources */, 2A8B9E6522FFE43500FF8653 /* DWPayModel.m in Sources */, 47AE8C1828C63F9C00490F5E /* PointOfUseDetailsView.swift in Sources */, @@ -9043,7 +9073,6 @@ 2A7A7BCD2347F01B00451078 /* DWSecurityMenuViewController.m in Sources */, 11BD738128E7356100A34022 /* CrowdNode.swift in Sources */, 47AE8B9F28BFAD8200490F5E /* SQLite+ExloreDash.swift in Sources */, - 754565D42DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift in Sources */, 2A1F6415238FEEA900A9B505 /* DWAdvancedSecurityModel.m in Sources */, 47AE8BF828C1306000490F5E /* AtmDataProvider.swift in Sources */, 110C67952921147F006B580C /* GettingStartedViewController.swift in Sources */, @@ -9065,6 +9094,7 @@ 1141E4C5291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift in Sources */, 47C6E6E329196D48003FEDF2 /* TerritoriesListCell.swift in Sources */, 2A4E531D22EA49FE00E5168A /* DWProgressView.m in Sources */, + 7569D6892DE6DB6700768BFF /* ExploreContentsView.swift in Sources */, 47A5146428491C60005A8E3E /* TxDetailCells.swift in Sources */, 477F501729543834003C7508 /* BaseViewController+NetworkReachability.swift in Sources */, 75D5F3CE191EC270004AB296 /* main.m in Sources */, @@ -9217,6 +9247,7 @@ C9D2C6D82A320AA000D15901 /* AtmListViewController.swift in Sources */, C9D2C6D92A320AA000D15901 /* TxDetailViewController.swift in Sources */, C9D2C6DA2A320AA000D15901 /* NSAttributedString+Builder.swift in Sources */, + 75D9EBB92DE5CC3A009416A2 /* AddGiftCardsTable.swift in Sources */, C943B4DE2A40A54600AF23C5 /* DWDPWelcomePageViewController.m in Sources */, C9D2C6DB2A320AA000D15901 /* DWPreviewSeedPhraseContentView.m in Sources */, C9D2C6DC2A320AA000D15901 /* DWPhoneWCSessionManager.m in Sources */, @@ -9443,6 +9474,7 @@ C943B51D2A40A54600AF23C5 /* InvitationBottomView.swift in Sources */, C943B32D2A408CED00AF23C5 /* DWAvatarPublicURLViewController.m in Sources */, 75AA33D32BF9E18E00F12465 /* Color+DWStyle.swift in Sources */, + 7549BE532DEAEA18004F0BAF /* MetadataProvider.swift in Sources */, C9D2C76F2A320AA000D15901 /* DWProgressAnimator.mm in Sources */, C943B3192A408CED00AF23C5 /* DWDPUpdateProfileModel.m in Sources */, C9D2C7702A320AA000D15901 /* CrowdNodeModel.swift in Sources */, @@ -9524,7 +9556,6 @@ 7566F4842BB6949E005238D2 /* ToolsMenuViewController.swift in Sources */, C943B33A2A408CED00AF23C5 /* DWUploadAvatarModel.m in Sources */, C943B3392A408CED00AF23C5 /* DWUploadAvatarViewController.m in Sources */, - C9D2C7B02A320AA000D15901 /* DWExploreHeaderView.m in Sources */, 759609242C455B2000F3BF04 /* SendIntro.swift in Sources */, C9D2C7B12A320AA000D15901 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */, C9D2C7B22A320AA000D15901 /* (null) in Sources */, @@ -9568,7 +9599,6 @@ C9D2C7CE2A320AA000D15901 /* CrowdNodeCell.swift in Sources */, 751B61C62ADFFD0A00D1C2EF /* IntegrationViewController+Coinbase.swift in Sources */, C9D2C7CF2A320AA000D15901 /* MerchantListLocationOffCell.swift in Sources */, - C9D2C7D02A320AA000D15901 /* DWExploreTestnetContentsView.m in Sources */, C9D2C7D32A320AA000D15901 /* CrowdNodeAPIConfirmationTx.swift in Sources */, C9D2C7D42A320AA000D15901 /* UIViewController+DWEmbedding.m in Sources */, 7503643F2C89D49A0029EC0D /* CoinJoinService.swift in Sources */, @@ -9645,6 +9675,7 @@ C9D2C8122A320AA000D15901 /* SeedDB.swift in Sources */, C9D2C8132A320AA000D15901 /* DWPinField.m in Sources */, C943B3252A408CED00AF23C5 /* DWEditProfileViewController.m in Sources */, + 75D9EBBC2DE5CD8B009416A2 /* GiftCard.swift in Sources */, 75D6D8E52D96A6DB00E40A6D /* StubTransactionSource.swift in Sources */, C943B59C2A40EE5300AF23C5 /* DWNetworkErrorViewController.m in Sources */, 75EE9F422DE2F750000AD1AD /* DashSpendConfirmationDialog.swift in Sources */, @@ -9743,6 +9774,8 @@ C943B53F2A40A6BE00AF23C5 /* DPAlertChildContentsView.m in Sources */, C9D2C85B2A320AA000D15901 /* PointOfUseListEmptyResultsView.swift in Sources */, 75A0A3F42CA7DBCF003ED48B /* TimeUtils.swift in Sources */, + 75D9EBC82DE5CE14009416A2 /* GiftCardDetailsViewModel.swift in Sources */, + 75D9EBC92DE5CE14009416A2 /* GiftCardDetailsView.swift in Sources */, 75FFD6C82BF495800032879E /* HomeViewController+Shortcuts.swift in Sources */, C9D2C85D2A320AA000D15901 /* DWLockPinInputView.m in Sources */, C9D2C85E2A320AA000D15901 /* UIView+DWHUD.m in Sources */, @@ -9781,7 +9814,6 @@ C9D2C87B2A320AA000D15901 /* DatabaseConnection.swift in Sources */, C9D2C87C2A320AA000D15901 /* DWSwitcherFormCellModel.m in Sources */, C9D2C87D2A320AA000D15901 /* DWIntrinsicTextView.m in Sources */, - C9D2C87E2A320AA000D15901 /* DWExploreTestnetViewController.m in Sources */, C9D2C87F2A320AA000D15901 /* AddressUserInfoDAO.swift in Sources */, 75D66D332B05E7AE00A8DDA6 /* QuickVoteViewController.swift in Sources */, 754D020D2D1558EB005CA466 /* GroupedTransactions.swift in Sources */, @@ -9817,6 +9849,7 @@ C943B3382A408CED00AF23C5 /* DWEditProfileAvatarView.m in Sources */, C943B5582A40DA3700AF23C5 /* DWFullScreenModalControllerViewController.m in Sources */, C9D2C89B2A320AA000D15901 /* DWImportWalletInfoViewController.m in Sources */, + 7569D6872DE6DB2200768BFF /* ExploreHeaderView.swift in Sources */, C9D2C89D2A320AA000D15901 /* SyncingAlertContentView.swift in Sources */, C9D2C89E2A320AA000D15901 /* AddressUserInfo.swift in Sources */, C943B5062A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m in Sources */, @@ -9832,6 +9865,7 @@ C9D2C8A72A320AA000D15901 /* TaxReportGenerator.swift in Sources */, C9D2C8A82A320AA000D15901 /* CrowdNodeError.swift in Sources */, C9D2C8A92A320AA000D15901 /* WithdrawalLimit.swift in Sources */, + 7569D6842DE6DA6800768BFF /* ExploreViewController.swift in Sources */, C943B4B12A40A54600AF23C5 /* DWBaseContactsViewController.m in Sources */, C943B5302A40A54600AF23C5 /* DWNotificationsFetchedDataSource.m in Sources */, C9D2C8AA2A320AA000D15901 /* DWPayModel.m in Sources */, @@ -9842,7 +9876,6 @@ C9D2C8AF2A320AA000D15901 /* FromLabel.swift in Sources */, 759063EF2C427324002F2AA9 /* DWMainMenuViewController+DashPay.swift in Sources */, C9D2C8B02A320AA000D15901 /* DWPhraseRepairChildViewController.m in Sources */, - 754565D52DAD0F5B00DA4E8E /* DWExploreTestnetViewController+DashWallet.swift in Sources */, C9D2C8B12A320AA000D15901 /* SingleInputAddressSelector.swift in Sources */, C943B5382A40A65B00AF23C5 /* DWScrollingViewController.m in Sources */, C9D2C8B22A320AA000D15901 /* CoinbaseAccountAddress.swift in Sources */, @@ -9865,12 +9898,14 @@ C9D2C8C22A320AA000D15901 /* TransactionObserver.swift in Sources */, C943B4EB2A40A54600AF23C5 /* DWModalUserProfileViewController.m in Sources */, C9D2C8C32A320AA000D15901 /* DWInfoTextCell.m in Sources */, + 7569D68A2DE6DB6700768BFF /* ExploreContentsView.swift in Sources */, C943B50D2A40A54600AF23C5 /* DWConfirmInvitationViewController.m in Sources */, C943B4F62A40A54600AF23C5 /* DWDPContactObject.m in Sources */, C9D2C8C42A320AA000D15901 /* ColorizedText.swift in Sources */, 75EAFBB22B04C057005ABC6A /* CustomHUDView.swift in Sources */, C9D2C8C72A320AA000D15901 /* PaymentsViewController.swift in Sources */, C9D2C8C92A320AA000D15901 /* ServiceDataSource.swift in Sources */, + 7549BE572DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */, C9D2C8CA2A320AA000D15901 /* ConverterView.swift in Sources */, C9D2C8CB2A320AA000D15901 /* DWModalBaseAnimation.m in Sources */, C9D2C8CC2A320AA000D15901 /* SpendableTransaction.swift in Sources */, @@ -9922,6 +9957,7 @@ 7573C2E52B01120B00F4C347 /* MasternodeKey.swift in Sources */, C9D2C8F02A320AA000D15901 /* DWProgressView.m in Sources */, C9D2C8F12A320AA000D15901 /* TxDetailCells.swift in Sources */, + 75D9EBC22DE5CD9C009416A2 /* GiftCardsDAO.swift in Sources */, 754565D12DABA5F300DA4E8E /* MerchantTypesDialog.swift in Sources */, C9D2C8F22A320AA000D15901 /* BaseViewController+NetworkReachability.swift in Sources */, C9D2C8F32A320AA000D15901 /* main.m in Sources */, diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json new file mode 100644 index 000000000..e79e4e1cf --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "network.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "network@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "network@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png new file mode 100644 index 000000000..3a9a51f58 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png new file mode 100644 index 000000000..4bf5d5505 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png new file mode 100644 index 000000000..fc8d292b1 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json new file mode 100644 index 000000000..969e4d7f0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "merchant.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "merchant@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "merchant@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png new file mode 100644 index 000000000..b23e2f8d8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png new file mode 100644 index 000000000..607eb55e4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png new file mode 100644 index 000000000..d1f65a5bb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png differ diff --git a/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift b/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift index 272ae576c..bc7df15c1 100644 --- a/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift +++ b/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift @@ -70,7 +70,7 @@ extension DatabaseConnection { } static func migrations() -> [Migration] { - [SeedDB()] + [SeedDB(), AddGiftCardsTable()] } static func migrationsBundle() -> Bundle { diff --git a/DashWallet/Sources/Infrastructure/Database/Migrations/AddGiftCardsTable.swift b/DashWallet/Sources/Infrastructure/Database/Migrations/AddGiftCardsTable.swift new file mode 100644 index 000000000..bff844747 --- /dev/null +++ b/DashWallet/Sources/Infrastructure/Database/Migrations/AddGiftCardsTable.swift @@ -0,0 +1,38 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite +import SQLiteMigrationManager + +struct AddGiftCardsTable: Migration { + var version: Int64 = 20250114120000 + + func migrateDatabase(_ db: Connection) throws { + try db.run(GiftCard.table.create(ifNotExists: true) { t in + t.column(GiftCard.txId, primaryKey: true) + t.column(GiftCard.merchantName) + t.column(GiftCard.merchantUrl) + t.column(GiftCard.price) + t.column(GiftCard.number) + t.column(GiftCard.pin) + t.column(GiftCard.barcodeValue) + t.column(GiftCard.barcodeFormat) + t.column(GiftCard.note) + }) + } +} \ No newline at end of file diff --git a/DashWallet/Sources/Models/Explore Dash/Model/DAO/GiftCardsDAO.swift b/DashWallet/Sources/Models/Explore Dash/Model/DAO/GiftCardsDAO.swift new file mode 100644 index 000000000..9f1ac080b --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Model/DAO/GiftCardsDAO.swift @@ -0,0 +1,250 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite +import Combine + +// MARK: - GiftCardsDAO + +protocol GiftCardsDAO { + func create(dto: GiftCard) async + func get(byTxId txId: Data) async -> GiftCard? + func observeCard(byTxId txId: Data) -> AnyPublisher + func update(dto: GiftCard) async + func updateCardDetails(txId: Data, number: String, pin: String?) async + func updateBarcode(txId: Data, value: String, format: String) async + func delete(byTxId txId: Data) async + func all() async -> [GiftCard] +} + +// MARK: - GiftCardsDAOImpl + +class GiftCardsDAOImpl: NSObject, GiftCardsDAO { + private var db: Connection { DatabaseConnection.shared.db } + private var cache: [String: GiftCard] = [:] + private var subjects: [String: CurrentValueSubject] = [:] + + static let shared = GiftCardsDAOImpl() + + func create(dto: GiftCard) async { + do { + let insert = GiftCard.table.insert(or: .replace, + GiftCard.txId <- dto.txId, + GiftCard.merchantName <- dto.merchantName, + GiftCard.merchantUrl <- dto.merchantUrl, + GiftCard.price <- dto.price.description, + GiftCard.number <- dto.number, + GiftCard.pin <- dto.pin, + GiftCard.barcodeValue <- dto.barcodeValue, + GiftCard.barcodeFormat <- dto.barcodeFormat, + GiftCard.note <- dto.note) + try await execute(insert) + let key = dto.txId.hexEncodedString() + self.cache[key] = dto + self.subjects[key]?.send(dto) + } catch { + print(error) + } + } + + func get(byTxId txId: Data) async -> GiftCard? { + let statement = GiftCard.table.filter(GiftCard.txId == txId) + + do { + let results: [GiftCard] = try await prepare(statement) + let key = txId.hexEncodedString() + self.cache[key] = results.first + return results.first + } catch { + print(error) + } + + return nil + } + + func observeCard(byTxId txId: Data) -> AnyPublisher { + let key = txId.hexEncodedString() + + if subjects[key] == nil { + subjects[key] = CurrentValueSubject(cache[key]) + + Task { + let card = await get(byTxId: txId) + subjects[key]?.send(card) + } + } + + return subjects[key]!.eraseToAnyPublisher() + } + + func update(dto: GiftCard) async { + await create(dto: dto) + } + + func updateCardDetails(txId: Data, number: String, pin: String?) async { + do { + let update = GiftCard.table.filter(GiftCard.txId == txId) + .update(GiftCard.number <- number, + GiftCard.pin <- pin, + GiftCard.note <- nil) + try await execute(update) + + // Update cache and notify observers + if let existingCard = await get(byTxId: txId) { + let updatedCard = GiftCard( + txId: existingCard.txId, + merchantName: existingCard.merchantName, + merchantUrl: existingCard.merchantUrl, + price: existingCard.price, + number: number, + pin: pin, + barcodeValue: existingCard.barcodeValue, + barcodeFormat: existingCard.barcodeFormat, + note: nil + ) + let key = txId.hexEncodedString() + cache[key] = updatedCard + subjects[key]?.send(updatedCard) + } + } catch { + print(error) + } + } + + func updateBarcode(txId: Data, value: String, format: String) async { + do { + let update = GiftCard.table.filter(GiftCard.txId == txId) + .update(GiftCard.barcodeValue <- value, + GiftCard.barcodeFormat <- format) + try await execute(update) + + // Update cache and notify observers + if let existingCard = await get(byTxId: txId) { + let updatedCard = GiftCard( + txId: existingCard.txId, + merchantName: existingCard.merchantName, + merchantUrl: existingCard.merchantUrl, + price: existingCard.price, + number: existingCard.number, + pin: existingCard.pin, + barcodeValue: value, + barcodeFormat: format, + note: existingCard.note + ) + let key = txId.hexEncodedString() + cache[key] = updatedCard + subjects[key]?.send(updatedCard) + } + } catch { + print(error) + } + } + + func delete(byTxId txId: Data) async { + let key = txId.hexEncodedString() + self.cache[key] = nil + self.subjects[key]?.send(nil) + + do { + let deleteQuery = GiftCard.table.filter(GiftCard.txId == txId).delete() + try await execute(deleteQuery) + } catch { + print(error) + } + } + + func all() async -> [GiftCard] { + do { + return try await prepare(GiftCard.table) + } catch { + print(error) + } + + return [] + } +} + +// MARK: - async / await + +extension GiftCardsDAOImpl { + private func execute(_ query: Insert) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func execute(_ query: Update) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func execute(_ query: Delete) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func prepare(_ statement: QueryType) async throws -> [T] { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume(returning: []) } + + var result: [T] = [] + + do { + for row in try db.prepare(statement) { + let rowItem = T(row: row) + result.append(rowItem) + } + + continuation.resume(returning: result) + } catch { + continuation.resume(throwing: error) + } + } + } + } +} \ No newline at end of file diff --git a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift index ea4b47c9c..ae24a4191 100644 --- a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift @@ -36,22 +36,54 @@ struct RefreshTokenResponse: Codable { struct GiftCardResponse: Codable { let id: String - let percentDiscount: String - let paymentCryptoAmount: String - let cardFiatAmount: String - let cardFiatCurrency: String - let paymentUrls: [String: String] - let paymentCryptoCurrency: String + let status: String // unpaid, paid, fulfilled, rejected + let barcodeUrl: String? + let cardNumber: String? + let cardPin: String? + + let cryptoAmount: String? + let cryptoCurrency: String? let paymentCryptoNetwork: String - let paymentFiatCurrency: String - let userId: String - let merchantName: String - let userEmail: String - let created: String - let rate: String - let paymentFiatAmount: String - let status: String let paymentId: String + let percentDiscount: String + let rate: String + let redeemUrl: String? + let fiatAmount: String? + let fiatCurrency: String? + let paymentUrls: [String: String]? + + let cardFiatAmount: String? + let cardFiatCurrency: String? + let userId: String? + let merchantName: String? + let userEmail: String? + let created: String? + let info: MerchantInfo? + + enum CodingKeys: String, CodingKey { + case id + case status + case barcodeUrl + case cardNumber = "number" + case cardPin = "pin" + case cryptoAmount = "paymentCryptoAmount" + case cryptoCurrency = "paymentCryptoCurrency" + case paymentCryptoNetwork + case paymentId + case percentDiscount + case rate + case redeemUrl + case fiatAmount = "paymentFiatAmount" + case fiatCurrency = "paymentFiatCurrency" + case paymentUrls + case cardFiatAmount + case cardFiatCurrency + case userId + case merchantName + case userEmail + case created + case info + } } struct MerchantResponse: Codable { diff --git a/DashWallet/Sources/Models/Explore Dash/Model/Entites/GiftCard.swift b/DashWallet/Sources/Models/Explore Dash/Model/Entites/GiftCard.swift new file mode 100644 index 000000000..62bca7c9a --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/GiftCard.swift @@ -0,0 +1,69 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite + +// MARK: - GiftCard + +struct GiftCard: RowDecodable { + let txId: Data + let merchantName: String + let merchantUrl: String? + let price: Decimal + let number: String? + let pin: String? + let barcodeValue: String? + let barcodeFormat: String? + let note: String? + + static let table = Table("gift_cards") + static let txId = SQLite.Expression("txId") + static let merchantName = SQLite.Expression("merchantName") + static let merchantUrl = SQLite.Expression("merchantUrl") + static let price = SQLite.Expression("price") + static let number = SQLite.Expression("number") + static let pin = SQLite.Expression("pin") + static let barcodeValue = SQLite.Expression("barcodeValue") + static let barcodeFormat = SQLite.Expression("barcodeFormat") + static let note = SQLite.Expression("note") + + init(row: Row) { + self.txId = row[GiftCard.txId] + self.merchantName = row[GiftCard.merchantName] + self.merchantUrl = row[GiftCard.merchantUrl] + self.price = Decimal(string: row[GiftCard.price]) ?? 0 + self.number = row[GiftCard.number] + self.pin = row[GiftCard.pin] + self.barcodeValue = row[GiftCard.barcodeValue] + self.barcodeFormat = row[GiftCard.barcodeFormat] + self.note = row[GiftCard.note] + } + + init(txId: Data, merchantName: String, merchantUrl: String?, price: Decimal, number: String? = nil, + pin: String? = nil, barcodeValue: String? = nil, barcodeFormat: String? = nil, note: String? = nil) { + self.txId = txId + self.merchantName = merchantName + self.merchantUrl = merchantUrl + self.price = price + self.number = number + self.pin = pin + self.barcodeValue = barcodeValue + self.barcodeFormat = barcodeFormat + self.note = note + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift index 71558f5f8..868966e98 100644 --- a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift @@ -74,7 +74,7 @@ extension CTXSpendEndpoint: TargetType, AccessTokenAuthorizable { case .refreshToken: return "refresh-token" case .purchaseGiftCard: return "gift-cards" case .getMerchant(let merchantId): return "merchants/\(merchantId)" - case .getGiftCard(let txid): return "gift-cards" + case .getGiftCard(_): return "gift-cards" } } @@ -99,6 +99,8 @@ extension CTXSpendEndpoint: TargetType, AccessTokenAuthorizable { return .requestJSONEncodable(request) case .purchaseGiftCard(let request): return .requestJSONEncodable(request) + case .getGiftCard(let txid): + return .requestParameters(parameters: ["txid": txid], encoding: URLEncoding.queryString) default: return .requestPlain } diff --git a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift index 9884ea034..e08344e09 100644 --- a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift @@ -124,9 +124,7 @@ class CTXSpendService: CTXSpendAPIAccessTokenProvider, CTXSpendTokenProvider, Ob ) do { - let response: GiftCardResponse = try await CTXSpendAPI.shared.request(.purchaseGiftCard(request)) - DSLogger.log("Gift card purchased successfully: \(response)") - return response + return try await CTXSpendAPI.shared.request(.purchaseGiftCard(request)) } catch let error as CTXSpendError { DSLogger.log("Gift card purchase failed with CTXSpendError: \(error)") throw error diff --git a/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m b/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m index 15830fe78..a7f171e16 100644 --- a/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m +++ b/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m @@ -47,7 +47,6 @@ + (NSString *)transactionURLFormat { + (NSString *)logoutURLString { return @"https://uphold.com/"; - } @end diff --git a/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift b/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift index 0cd221846..3312cb90b 100644 --- a/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift +++ b/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift @@ -17,7 +17,6 @@ import UIKit -@objc(DWCrowdNodeAPYView) class CrowdNodeAPYView: UIView { override init(frame: CGRect) { diff --git a/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m b/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m deleted file mode 100644 index d879c97a5..000000000 --- a/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreTestnetViewController.h" - -#import "DWColoredButton.h" -#import "DWEnvironment.h" -#import "DWExploreHeaderView.h" -#import "DWExploreTestnetContentsView.h" -#import "DWScrollingViewController.h" -#import "DWUIKit.h" - -@implementation DWExploreTestnetViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor dw_darkBlueColor]; - - UIView *contentView = [[UIView alloc] init]; - contentView.translatesAutoresizingMaskIntoConstraints = NO; - [self.view addSubview:contentView]; - - UIView *footerView = [[UIView alloc] init]; - footerView.translatesAutoresizingMaskIntoConstraints = NO; - footerView.backgroundColor = [UIColor dw_backgroundColor]; - [self.view addSubview:footerView]; - - DWColoredButton *actionButton = [[DWColoredButton alloc] init]; - actionButton.translatesAutoresizingMaskIntoConstraints = NO; - actionButton.style = DWColoredButtonStyle_Black; - [actionButton setTitle:NSLocalizedString(@"Get Test Dash", nil) forState:UIControlStateNormal]; - [actionButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside]; - [footerView addSubview:actionButton]; - - CGFloat padding = 16.0; - [NSLayoutConstraint activateConstraints:@[ - [contentView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], - - [footerView.topAnchor constraintEqualToAnchor:contentView.bottomAnchor], - [footerView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.view.trailingAnchor constraintEqualToAnchor:footerView.trailingAnchor], - [self.view.bottomAnchor constraintEqualToAnchor:footerView.bottomAnchor], - - [actionButton.topAnchor constraintEqualToAnchor:footerView.topAnchor - constant:padding], - [actionButton.leadingAnchor constraintEqualToAnchor:footerView.leadingAnchor - constant:padding], - [footerView.trailingAnchor constraintEqualToAnchor:actionButton.trailingAnchor - constant:padding], - [footerView.bottomAnchor constraintEqualToAnchor:actionButton.bottomAnchor - constant:padding], - - [actionButton.heightAnchor constraintEqualToConstant:46.0], - ]]; - - // Contents - - DWExploreHeaderView *headerView = [[DWExploreHeaderView alloc] init]; - headerView.translatesAutoresizingMaskIntoConstraints = NO; - headerView.image = [UIImage imageNamed:@"image.explore.dash.wallet"]; - headerView.title = NSLocalizedString(@"Explore Dash", nil); - headerView.subtitle = NSLocalizedString(@"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users.", nil); - - DWExploreTestnetContentsView *contentsView = [[DWExploreTestnetContentsView alloc] init]; - contentsView.translatesAutoresizingMaskIntoConstraints = NO; - - DWScrollingViewController *scrollingController = [[DWScrollingViewController alloc] init]; - scrollingController.keyboardNotificationsEnabled = NO; - - [self dw_embedChild:scrollingController inContainer:contentView]; - - UIView *parentView = scrollingController.contentView; - - UIView *overscrollView = [[UIView alloc] init]; - overscrollView.translatesAutoresizingMaskIntoConstraints = NO; - overscrollView.backgroundColor = [UIColor dw_backgroundColor]; - [parentView addSubview:overscrollView]; - - [parentView addSubview:headerView]; - [parentView addSubview:contentsView]; - - [NSLayoutConstraint activateConstraints:@[ - [headerView.topAnchor constraintEqualToAnchor:parentView.topAnchor], - [headerView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:headerView.trailingAnchor], - - [contentsView.topAnchor constraintEqualToAnchor:headerView.bottomAnchor], - [contentsView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:contentsView.trailingAnchor], - [parentView.bottomAnchor constraintEqualToAnchor:contentsView.bottomAnchor], - - [overscrollView.topAnchor constraintEqualToAnchor:contentsView.bottomAnchor - constant:-10], - [overscrollView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:overscrollView.trailingAnchor], - [overscrollView.heightAnchor constraintEqualToConstant:500], - ]]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} - -- (void)buttonAction { - DSAccount *account = [DWEnvironment sharedInstance].currentAccount; - NSString *paymentAddress = account.receiveAddress; - if (paymentAddress == nil) { - return; - } - - [UIPasteboard generalPasteboard].string = paymentAddress; - NSURL *url = [NSURL URLWithString:@"https://testnet-faucet.dash.org/"]; - [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; -} - -@end diff --git a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController+DashWallet.swift b/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController+DashWallet.swift deleted file mode 100644 index 98d9730eb..000000000 --- a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController+DashWallet.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// Created by Andrei Ashikhmin -// Copyright © 2025 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import SwiftUI - -private let kMerchantTypesShown = "merchantTypesInfoDialogShownKey" - -extension DWExploreTestnetViewController { - @objc - public func showWhereToSpendViewController() { - if UserDefaults.standard.bool(forKey: kMerchantTypesShown) != true { - let hostingController = UIHostingController(rootView: MerchantTypesDialog { [weak self] in - UserDefaults.standard.setValue(true, forKey: kMerchantTypesShown) - self?.showMerchants() - }) - hostingController.setDetent(640) - self.present(hostingController, animated: true) - } else { - showMerchants() - } - } - - private func showMerchants() { - let vc = MerchantListViewController() - vc.payWithDashHandler = { [weak self] in - guard let self = self else { return } - self.delegate?.exploreTestnetViewControllerShowSendPayment(self) - } - - self.navigationController?.pushViewController(vc, animated: true) - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h b/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h deleted file mode 100644 index fee552f27..000000000 --- a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class DWExploreTestnetViewController; -@protocol DWNavigationFullscreenable; - -@protocol DWExploreTestnetViewControllerDelegate - -- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreTestnetViewController *)controller; -- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreTestnetViewController *)controller; - -@end - -@interface DWExploreTestnetViewController : UIViewController - -@property (nullable, nonatomic, weak) id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.m b/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.m deleted file mode 100644 index a9d1e1c01..000000000 --- a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreTestnetViewController.h" - -#import "DWEnvironment.h" -#import "DWExploreHeaderView.h" -#import "DWExploreTestnetContentsView.h" -#import "DWUIKit.h" -#import "dashwallet-Swift.h" - -@implementation DWExploreTestnetViewController - -- (BOOL)requiresNoNavigationBar { - return YES; -} - -- (void)showAtms { - DWExploreTestnetViewController *__weak weakSelf = self; - - AtmListViewController *vc = [[AtmListViewController alloc] init]; - vc.payWithDashHandler = ^{ - [weakSelf.delegate exploreTestnetViewControllerShowReceivePayment:weakSelf]; - }; - vc.sellDashHandler = ^{ - [weakSelf.delegate exploreTestnetViewControllerShowSendPayment:weakSelf]; - }; - [self.navigationController pushViewController:vc animated:YES]; -} - -- (void)showStakingIfSynced { - if (SyncingActivityMonitor.shared.state == SyncingActivityMonitorStateSyncDone) { - UIViewController *vc = [CrowdNodeModelObjcWrapper getRootVC]; - [self.navigationController pushViewController:vc animated:YES]; - } - else { - [self notifyChainSyncing]; - } -} - -- (void)notifyChainSyncing { - NSString *title = NSLocalizedString(@"The chain is syncing…", nil); - NSString *message = NSLocalizedString(@"Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up.", nil); - UIAlertController *alert = [UIAlertController - alertControllerWithTitle:title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - { - UIAlertAction *action = [UIAlertAction - actionWithTitle:NSLocalizedString(@"Go to CrowdNode website", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - [[UIApplication sharedApplication] openURL:[CrowdNodeObjcWrapper crowdNodeWebsiteUrl] - options:@{} - completionHandler:^(BOOL success){ - }]; - }]; - [alert addAction:action]; - } - - { - UIAlertAction *action = [UIAlertAction - actionWithTitle:NSLocalizedString(@"Close", nil) - style:UIAlertActionStyleCancel - handler:nil]; - [alert addAction:action]; - } - - [self presentViewController:alert - animated:YES - completion:nil]; -} - - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor dw_darkBlueColor]; - - // Contents - DWExploreHeaderView *headerView = [[DWExploreHeaderView alloc] init]; - headerView.translatesAutoresizingMaskIntoConstraints = NO; - headerView.image = [UIImage imageNamed:@"image.explore.dash.wallet"]; - headerView.title = NSLocalizedString(@"Explore Dash", nil); - headerView.subtitle = NSLocalizedString(@"Find merchants that accept Dash, where to buy it and how to earn income with it.", nil); - [headerView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - - DWExploreTestnetViewController *__weak weakSelf = self; - - DWExploreTestnetContentsView *contentsView = [[DWExploreTestnetContentsView alloc] init]; - contentsView.translatesAutoresizingMaskIntoConstraints = NO; - [headerView setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - contentsView.whereToSpendHandler = ^{ - [weakSelf showWhereToSpendViewController]; - }; - contentsView.atmHandler = ^{ - [weakSelf showAtms]; - }; - contentsView.stakingHandler = ^{ - [weakSelf showStakingIfSynced]; - }; - - UIStackView *parentView = [[UIStackView alloc] init]; - parentView.translatesAutoresizingMaskIntoConstraints = NO; - parentView.distribution = UIStackViewDistributionEqualSpacing; - parentView.axis = UILayoutConstraintAxisVertical; - parentView.spacing = 34; - - [parentView addArrangedSubview:headerView]; - [parentView addArrangedSubview:contentsView]; - [self.view addSubview:parentView]; - - [NSLayoutConstraint activateConstraints:@[ - [headerView.heightAnchor constraintLessThanOrEqualToConstant:kExploreHeaderViewHeight], - [parentView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor - constant:10], - [parentView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], - [parentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor] - ]]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} - -- (void)buttonAction { - DSAccount *account = [DWEnvironment sharedInstance].currentAccount; - NSString *paymentAddress = account.receiveAddress; - if (paymentAddress == nil) { - return; - } - - [UIPasteboard generalPasteboard].string = paymentAddress; - NSURL *url = [NSURL URLWithString:@"https://testnet-faucet.dash.org/"]; - [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; -} - -@end diff --git a/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift new file mode 100644 index 000000000..662b39529 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift @@ -0,0 +1,191 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import SwiftUI + +private let kMerchantTypesShown = "merchantTypesInfoDialogShownKey" +private let kExploreHeaderViewHeight: CGFloat = 351.0 + +// MARK: - DWExploreTestnetViewControllerDelegate + +@objc(DWExploreViewControllerDelegate) +protocol ExploreViewControllerDelegate: AnyObject { + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) +} + +// MARK: - DWExploreTestnetViewController + +@objc(DWExploreViewController) +class ExploreViewController: UIViewController, NavigationFullscreenable { + + @objc weak var delegate: ExploreViewControllerDelegate? + + var requiresNoNavigationBar: Bool { + return true + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .dw_darkBlue() + setupLayout() + } + + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + // MARK: - Layout Setup + + private func setupLayout() { + let headerView = ExploreHeaderView() + headerView.translatesAutoresizingMaskIntoConstraints = false + headerView.image = UIImage(named: "image.explore.dash.wallet") + headerView.title = NSLocalizedString("Explore Dash", comment: "") + headerView.subtitle = NSLocalizedString("Find merchants that accept Dash, where to buy it and how to earn income with it.", comment: "") + + headerView.setContentHuggingPriority(.defaultHigh, for: .vertical) + + let contentsView = ExploreContentsView() + contentsView.translatesAutoresizingMaskIntoConstraints = false + headerView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + + contentsView.getTestDashHandler = { [weak self] in + self?.getTestDashAction() + } + + contentsView.whereToSpendHandler = { [weak self] in + self?.showWhereToSpendViewController() + } + contentsView.atmHandler = { [weak self] in + self?.showAtms() + } + contentsView.stakingHandler = { [weak self] in + self?.showStakingIfSynced() + } + + let parentView = UIStackView() + parentView.translatesAutoresizingMaskIntoConstraints = false + parentView.distribution = .equalSpacing + parentView.axis = .vertical + parentView.spacing = 34 + + parentView.addArrangedSubview(headerView) + parentView.addArrangedSubview(contentsView) + view.addSubview(parentView) + + NSLayoutConstraint.activate([ + headerView.heightAnchor.constraint(lessThanOrEqualToConstant: kExploreHeaderViewHeight), + parentView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10), + parentView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + parentView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + parentView.trailingAnchor.constraint(equalTo: view.trailingAnchor) + ]) + } + + // MARK: - Actions + + private func getTestDashAction() { + let account = DWEnvironment.sharedInstance().currentAccount + + if let paymentAddress = account.receiveAddress { + UIPasteboard.general.string = paymentAddress + } + + if let url = URL(string: "http://faucet.testnet.networks.dash.org/") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + } + + private func showAtms() { + let vc = AtmListViewController() + vc.payWithDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowReceivePayment(self) + } + vc.sellDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowSendPayment(self) + } + navigationController?.pushViewController(vc, animated: true) + } + + private func showStakingIfSynced() { + if SyncingActivityMonitor.shared.state == .syncDone { + let vc = CrowdNodeModelObjcWrapper.getRootVC() + navigationController?.pushViewController(vc, animated: true) + } else { + notifyChainSyncing() + } + } + + private func notifyChainSyncing() { + let title = NSLocalizedString("The chain is syncing…", comment: "") + let message = NSLocalizedString("Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up.", comment: "") + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + + let websiteAction = UIAlertAction( + title: NSLocalizedString("Go to CrowdNode website", comment: ""), + style: .default + ) { _ in + UIApplication.shared.open(CrowdNodeObjcWrapper.crowdNodeWebsiteUrl(), options: [:], completionHandler: nil) + } + alert.addAction(websiteAction) + + let closeAction = UIAlertAction( + title: NSLocalizedString("Close", comment: ""), + style: .cancel, + handler: nil + ) + alert.addAction(closeAction) + + present(alert, animated: true, completion: nil) + } + + // MARK: - Where to Spend + + private func showWhereToSpendViewController() { + if UserDefaults.standard.bool(forKey: kMerchantTypesShown) != true { + let hostingController = UIHostingController(rootView: MerchantTypesDialog { [weak self] in + UserDefaults.standard.setValue(true, forKey: kMerchantTypesShown) + self?.showMerchants() + }) + hostingController.setDetent(640) + present(hostingController, animated: true) + } else { + showMerchants() + } + } + + private func showMerchants() { + let vc = MerchantListViewController() + vc.payWithDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowSendPayment(self) + } + vc.onGiftCardPurchased = { [weak self] txId in + guard let self = self else { return } + self.dismiss(animated: true) + self.delegate?.exploreViewControllerShowGiftCard(self, txId: txId) + } + + navigationController?.pushViewController(vc, animated: true) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift index 0f9132360..a33ca8a0b 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift @@ -27,6 +27,7 @@ class PointOfUseDetailsViewController: UIViewController { @objc public var payWithDashHandler: (()->())? @objc var sellDashHandler: (()->())? + @objc var onGiftCardPurchased: ((Data)->())? private var contentView: UIView! private var detailsView: PointOfUseDetailsView! @@ -225,7 +226,10 @@ extension PointOfUseDetailsViewController { private func showDashSpendPayScreen(justAuthenticated: Bool = false) { let hostingController = UIHostingController( - rootView: DashSpendPayScreen(merchant: self.pointOfUse, justAuthenticated: justAuthenticated) + rootView: DashSpendPayScreen(merchant: self.pointOfUse, justAuthenticated: justAuthenticated) { [weak self] txId in + // Navigate back to home and show gift card details + self?.onGiftCardPurchased?(txId) + } ) self.navigationController?.pushViewController(hostingController, animated: true) diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift index cacac9ce0..a81d697a1 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift @@ -42,6 +42,7 @@ class ExplorePointOfUseListViewController: UIViewController { // Change to Notification instead of chaining the property @objc var payWithDashHandler: (() -> Void)? @objc var sellDashHandler: (()->())? + @objc var onGiftCardPurchased: ((Data)->())? internal var model: PointOfUseListModel! internal var segmentTitles: [String] { model.segmentTitles } @@ -126,6 +127,7 @@ class ExplorePointOfUseListViewController: UIViewController { let vc = PointOfUseDetailsViewController(pointOfUse: pointOfUse) vc.payWithDashHandler = payWithDashHandler vc.sellDashHandler = sellDashHandler + vc.onGiftCardPurchased = onGiftCardPurchased navigationController?.pushViewController(vc, animated: true) } diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift index f6605990d..67400ad8e 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift @@ -196,6 +196,7 @@ class MerchantListViewController: ExplorePointOfUseListViewController { let vc = PointOfUseDetailsViewController(pointOfUse: pointOfUse, isShowAllHidden: merchant.type == .online) vc.payWithDashHandler = payWithDashHandler + vc.onGiftCardPurchased = onGiftCardPurchased navigationController?.pushViewController(vc, animated: true) } diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m deleted file mode 100644 index 0cf0ef252..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreHeaderView.h" - -#import "DWUIKit.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWExploreHeaderView () - -@property (readonly, nonatomic, strong) UIImageView *iconImageView; -@property (readonly, nonatomic, strong) UILabel *titleLabel; -@property (readonly, nonatomic, strong) UILabel *descLabel; - -@end - -NS_ASSUME_NONNULL_END - -@implementation DWExploreHeaderView - -CGFloat const kExploreHeaderViewHeight = 351.0f; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor dw_darkBlueColor]; - self.spacing = 4; - self.axis = UILayoutConstraintAxisVertical; - self.distribution = UIStackViewDistributionFillProportionally; - - UIImageView *iconImageView = [[UIImageView alloc] init]; - iconImageView.translatesAutoresizingMaskIntoConstraints = NO; - iconImageView.contentMode = UIViewContentModeScaleAspectFit; - [self addArrangedSubview:iconImageView]; - - _iconImageView = iconImageView; - - UILabel *titleLabel = [[UILabel alloc] init]; - titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - titleLabel.textColor = [UIColor whiteColor]; // always white - titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleLargeTitle]; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.numberOfLines = 0; - titleLabel.minimumScaleFactor = 0.4; - titleLabel.adjustsFontSizeToFitWidth = YES; - [self addArrangedSubview:titleLabel]; - _titleLabel = titleLabel; - - UILabel *descLabel = [[UILabel alloc] init]; - descLabel.translatesAutoresizingMaskIntoConstraints = NO; - descLabel.textColor = [UIColor whiteColor]; // always white - descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; - descLabel.textAlignment = NSTextAlignmentCenter; - descLabel.numberOfLines = 0; - descLabel.adjustsFontSizeToFitWidth = YES; - descLabel.minimumScaleFactor = 0.4; - [self addArrangedSubview:descLabel]; - _descLabel = descLabel; - - [iconImageView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - [titleLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - [descLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - - [NSLayoutConstraint activateConstraints:@[ - [iconImageView.heightAnchor constraintLessThanOrEqualToConstant:250.0], - [descLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor - constant:15.0], - [descLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor - constant:-15.0], - ]]; - } - return self; -} - -- (UIImage *)image { - return self.iconImageView.image; -} - -- (void)setImage:(UIImage *)image { - self.iconImageView.image = image; -} - -- (NSString *)title { - return self.titleLabel.text; -} - -- (void)setTitle:(NSString *)title { - self.titleLabel.text = title; -} - -- (NSString *)subtitle { - return self.descLabel.text; -} - -- (void)setSubtitle:(NSString *)subtitle { - self.descLabel.text = subtitle; -} - -@end diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h deleted file mode 100644 index 7c76effb2..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWExploreTestnetContentsView : UIView -@property (nonatomic, copy) void (^whereToSpendHandler)(void); -@property (nonatomic, copy) void (^atmHandler)(void); -@property (nonatomic, copy) void (^stakingHandler)(void); -@end - -@interface DWExploreTestnetContentsViewCell : UIView -@property (nullable, nonatomic, strong) UIImage *image; -@property (nullable, nonatomic, copy) NSString *title; -@property (nullable, nonatomic, copy) NSString *subtitle; - -@property (nonatomic, copy) void (^actionHandler)(void); - -- (void)addContent:(UIView *)view; -@end - -@interface DWExploreCrowdNodeContentsViewCell : DWExploreTestnetContentsViewCell -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m deleted file mode 100644 index 2a3d43684..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m +++ /dev/null @@ -1,273 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreTestnetContentsView.h" - -#import "DWEnvironment.h" -#import "DWUIKit.h" -#import "dashwallet-Swift.h" - - -@interface DWExploreTestnetContentsView () -@end - -@implementation DWExploreTestnetContentsView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor dw_darkBlueColor]; - - UIView *contentView = [[UIView alloc] init]; - contentView.translatesAutoresizingMaskIntoConstraints = NO; - contentView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - contentView.layer.cornerRadius = 8.0; - contentView.layer.masksToBounds = YES; - contentView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; // TL | TR - [self addSubview:contentView]; - - UIView *subContentView = [[UIView alloc] init]; - subContentView.translatesAutoresizingMaskIntoConstraints = NO; - subContentView.backgroundColor = [UIColor dw_backgroundColor]; - subContentView.layer.cornerRadius = 8.0; - subContentView.layer.masksToBounds = YES; - [contentView addSubview:subContentView]; - - UIStackView *buttonsStackView = [UIStackView new]; - buttonsStackView.translatesAutoresizingMaskIntoConstraints = NO; - buttonsStackView.spacing = 8; - buttonsStackView.axis = UILayoutConstraintAxisVertical; - buttonsStackView.distribution = UIStackViewDistributionEqualSpacing; - [subContentView addSubview:buttonsStackView]; - - __weak typeof(self) weakSelf = self; - DWExploreTestnetContentsViewCell *merchantsItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.wheretospend"] - title:NSLocalizedString(@"Where to Spend?", nil) - subtitle:NSLocalizedString(@"Find merchants who accept Dash as payment.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.whereToSpendHandler(); - }]; - [buttonsStackView addArrangedSubview:merchantsItem]; - - DWExploreTestnetContentsViewCell *atmItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.atm"] - title:NSLocalizedString(@"ATMs", nil) - subtitle:NSLocalizedString(@"Find where to buy or sell DASH and other cryptocurrencies for cash.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.atmHandler(); - }]; - [buttonsStackView addArrangedSubview:atmItem]; - - // TODO: Fix typo in subtitle: should be taps not clicks - DWExploreTestnetContentsViewCell *cnItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.staking"] - title:NSLocalizedString(@"Staking", nil) - subtitle:NSLocalizedString(@"Easily stake Dash and earn passive income with a few simple clicks.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.stakingHandler(); - }]; - [cnItem addContent:[[DWCrowdNodeAPYView alloc] initWithFrame:CGRectZero]]; - [buttonsStackView addArrangedSubview:cnItem]; - - CGFloat verticalPadding = 10; - - [NSLayoutConstraint activateConstraints:@[ - [contentView.topAnchor constraintEqualToAnchor:self.topAnchor], - [contentView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - [contentView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [contentView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - - [subContentView.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:15], - [subContentView.bottomAnchor constraintLessThanOrEqualToAnchor:contentView.bottomAnchor - constant:-35], - [subContentView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor - constant:-15], - [subContentView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor - constant:15], - - [buttonsStackView.topAnchor constraintEqualToAnchor:subContentView.topAnchor - constant:verticalPadding], - [buttonsStackView.bottomAnchor constraintEqualToAnchor:subContentView.bottomAnchor - constant:-verticalPadding], - [buttonsStackView.trailingAnchor constraintEqualToAnchor:subContentView.trailingAnchor], - [buttonsStackView.leadingAnchor constraintEqualToAnchor:subContentView.leadingAnchor], - ]]; - } - return self; -} - -- (nonnull DWExploreTestnetContentsViewCell *)itemWithImage:(UIImage *)image title:(NSString *)title subtitle:(NSString *)subtitle action:(void (^)(void))action { - DWExploreTestnetContentsViewCell *item = [[DWExploreTestnetContentsViewCell alloc] initWithFrame:CGRectZero]; - item.translatesAutoresizingMaskIntoConstraints = NO; - [item setImage:image]; - [item setTitle:title]; - [item setSubtitle:subtitle]; - [item setActionHandler:action]; - return item; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - - if (indexPath.row == 0) { - _whereToSpendHandler(); - } - else if (indexPath.row == 1) { - _atmHandler(); - } - else { - _stakingHandler(); - } -} - -@end - -@interface DWExploreTestnetContentsViewCell () -@property (readonly, nonatomic, strong) UIImageView *iconImageView; -@property (readonly, nonatomic, strong) UILabel *titleLabel; -@property (readonly, nonatomic, strong) UILabel *descLabel; -@property (readonly, nonatomic, strong) UIStackView *contentStack; -@end - -@implementation DWExploreTestnetContentsViewCell - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureHierarchy]; - } - - return self; -} - -- (void)buttonAction:(UIButton *)sender { - _actionHandler(); -} - -- (void)configureHierarchy { - self.backgroundColor = [UIColor dw_backgroundColor]; - - UIStackView *stackView = [UIStackView new]; - stackView.axis = UILayoutConstraintAxisHorizontal; - stackView.spacing = 10; - stackView.alignment = UIStackViewAlignmentTop; - stackView.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:stackView]; - - UIImageView *iconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 34, 34)]; - iconImageView.translatesAutoresizingMaskIntoConstraints = NO; - iconImageView.contentMode = UIViewContentModeCenter; - [stackView addArrangedSubview:iconImageView]; - _iconImageView = iconImageView; - - UIStackView *labelsStackView = [UIStackView new]; - labelsStackView.translatesAutoresizingMaskIntoConstraints = NO; - labelsStackView.axis = UILayoutConstraintAxisVertical; - labelsStackView.spacing = 1; - labelsStackView.alignment = UIStackViewAlignmentLeading; - [stackView addArrangedSubview:labelsStackView]; - _contentStack = labelsStackView; - - UILabel *titleLabel = [[UILabel alloc] init]; - [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - titleLabel.textColor = [UIColor labelColor]; - titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; - titleLabel.textAlignment = NSTextAlignmentLeft; - titleLabel.numberOfLines = 0; - [labelsStackView addArrangedSubview:titleLabel]; - _titleLabel = titleLabel; - - UILabel *descLabel = [[UILabel alloc] init]; - [descLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - descLabel.translatesAutoresizingMaskIntoConstraints = NO; - descLabel.textColor = [UIColor secondaryLabelColor]; - descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; - descLabel.textAlignment = NSTextAlignmentLeft; - descLabel.numberOfLines = 0; - [labelsStackView addArrangedSubview:descLabel]; - _descLabel = descLabel; - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.translatesAutoresizingMaskIntoConstraints = NO; - button.titleLabel.text = @""; - [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:button]; - - [NSLayoutConstraint activateConstraints:@[ - [iconImageView.widthAnchor constraintEqualToConstant:34], - [iconImageView.heightAnchor constraintEqualToConstant:34], - - [stackView.topAnchor constraintEqualToAnchor:self.topAnchor - constant:12], - [stackView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor - constant:-12], - [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor - constant:15], - [stackView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - - [button.topAnchor constraintEqualToAnchor:self.topAnchor], - [button.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - [button.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [button.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - ]]; -} - -- (UIImage *)image { - return self.iconImageView.image; -} - -- (void)setImage:(UIImage *)image { - self.iconImageView.image = image; -} - -- (NSString *)title { - return self.titleLabel.text; -} - -- (void)setTitle:(NSString *)title { - self.titleLabel.text = title; -} - -- (NSString *)subtitle { - return self.descLabel.text; -} - -- (void)setSubtitle:(NSString *)subtitle { - self.descLabel.text = subtitle; -} - -- (void)addContent:(UIView *)view { - UIView *last = [[_contentStack arrangedSubviews] lastObject]; - [_contentStack setCustomSpacing:10 afterView:last]; - [_contentStack addArrangedSubview:view]; -} -@end diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift index 4bcae2226..be1ebe0c8 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift @@ -65,110 +65,110 @@ struct CTXSpendUserAuthScreen: View { let onAuthSuccess: () -> Void var body: some View { - ZStack(alignment: .bottom) { + VStack(spacing: 0) { + // Header VStack(spacing: 0) { - VStack(spacing: 0) { - HStack { - Button(action: { - presentationMode.wrappedValue.dismiss() - }) { - Image(systemName: "chevron.left") - .font(.system(size: 18, weight: .semibold)) - .foregroundColor(.primaryText) - .padding(10) - } - - Spacer() - - Text("DashSpend") - .font(.system(size: 14, weight: .semibold)) + HStack { + Button(action: { + presentationMode.wrappedValue.dismiss() + }) { + Image(systemName: "chevron.left") + .font(.system(size: 18, weight: .semibold)) .foregroundColor(.primaryText) - .frame(maxWidth: .infinity) - - Spacer() - - Color.clear - .frame(width: 44, height: 44) + .padding(10) } - .padding(.top, 5) - .padding(.horizontal, 10) + + Spacer() + + Text("DashSpend") + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.primaryText) + .frame(maxWidth: .infinity) + + Spacer() + + Color.clear + .frame(width: 44, height: 44) } - - ScrollView { - VStack(alignment: .leading, spacing: 20) { - VStack(alignment: .leading, spacing: 4) { - Text(authType.screenTitle) - .font(.system(size: 24, weight: .bold)) - .foregroundColor(.primaryText) - - Text(authType.screenSubtitle) - .font(.system(size: 13)) - .foregroundColor(.primaryText) - .lineSpacing(4) - } - .padding(.horizontal, 20) + .padding(.top, 5) + .padding(.horizontal, 10) + } + + // Content + ScrollView { + VStack(alignment: .leading, spacing: 20) { + VStack(alignment: .leading, spacing: 4) { + Text(authType.screenTitle) + .font(.system(size: 24, weight: .bold)) + .foregroundColor(.primaryText) - VStack(spacing: 4) { - TextInput( - label: authType.textInputHint, - text: $viewModel.input, - keyboardType: .emailAddress, - autocapitalization: .never, - isEnabled: authType != .otp, - onSubmit: { - viewModel.onContinue() - } - ).focused($isTextFieldFocused) - - if viewModel.showError { - Text(viewModel.errorMessage) - .font(.footnote) - .foregroundColor(.systemRed) - .padding(.horizontal, 8) + Text(authType.screenSubtitle) + .font(.system(size: 13)) + .foregroundColor(.primaryText) + .lineSpacing(4) + } + .padding(.horizontal, 20) + + VStack(spacing: 4) { + TextInput( + label: authType.textInputHint, + text: $viewModel.input, + keyboardType: .emailAddress, + autocapitalization: .never, + isEnabled: authType != .otp, + onSubmit: { + viewModel.onContinue() } + ).focused($isTextFieldFocused) + + if viewModel.showError { + Text(viewModel.errorMessage) + .font(.footnote) + .foregroundColor(.systemRed) + .padding(.horizontal, 8) } - .padding(.horizontal, 20) } - .padding(.top, 10) + .padding(.horizontal, 20) } - - Spacer() - - VStack { - if authType == .otp { - NumericKeyboardView( - value: $viewModel.input, - showDecimalSeparator: false, - actionButtonText: NSLocalizedString("Continue", comment: ""), - actionEnabled: true, - inProgress: viewModel.isLoading, - actionHandler: { - viewModel.onContinue() - } - ).frame(maxWidth: .infinity) - .frame(height: UIDevice.isIphone5OrLess ? 290 : 320) - .padding(.horizontal, 20) - .padding(.bottom, 20) - } else { - ZStack(alignment: .center) { - DashButton( - text: viewModel.isLoading ? "" : NSLocalizedString("Continue", comment: "Continue"), - isEnabled: viewModel.isInputValid(authType: authType) - ) { - if !viewModel.isLoading { - viewModel.onContinue() - } - } - .padding(.horizontal, 20) - - if viewModel.isLoading { - SwiftUI.ProgressView() - .tint(.white) - } + .padding(.top, 10) + } + + Spacer() + + // Bottom section with button or keyboard + if authType == .otp { + NumericKeyboardView( + value: $viewModel.input, + showDecimalSeparator: false, + actionButtonText: NSLocalizedString("Continue", comment: ""), + actionEnabled: true, + inProgress: viewModel.isLoading, + actionHandler: { + viewModel.onContinue() + } + ) + .frame(maxWidth: .infinity) + .frame(height: UIDevice.isIphone5OrLess ? 290 : 320) + .padding(.horizontal, 20) + .padding(.bottom, 20) + } else { + ZStack(alignment: .center) { + DashButton( + text: viewModel.isLoading ? "" : NSLocalizedString("Continue", comment: "Continue"), + isEnabled: viewModel.isInputValid(authType: authType) + ) { + if !viewModel.isLoading { + viewModel.onContinue() } } + .padding(.horizontal, 20) + + if viewModel.isLoading { + SwiftUI.ProgressView() + .tint(.white) + } } - .padding(.bottom, authType == .otp ? 0 : 20) + .padding(.bottom, 20) } NavigationLink( @@ -182,7 +182,6 @@ struct CTXSpendUserAuthScreen: View { } } .background(Color.secondaryBackground) - .ignoresSafeArea(.keyboard, edges: .bottom) .navigationBarHidden(true) .navigationBarBackButtonHidden(true) .edgesIgnoringSafeArea(.top) @@ -210,5 +209,3 @@ struct CTXSpendUserAuthScreen: View { } } } - -// TODO: toast should be on the buy screen diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift index 8b1e259ac..6d4f528a2 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift @@ -29,12 +29,14 @@ struct DashSpendPayScreen: View { @State private var showCustomErrorDialog = false @State private var errorMessage = "" @State private var errorTitle = "" + let onPurchaseSuccess: ((Data) -> Void)? - init(merchant: ExplorePointOfUse, justAuthenticated: Bool = false) { + init(merchant: ExplorePointOfUse, justAuthenticated: Bool = false, onPurchaseSuccess: ((Data) -> Void)? = nil) { self.merchant = merchant self._viewModel = .init(wrappedValue: DashSpendPayViewModel(merchant: merchant)) self.justAuthenticated = justAuthenticated self.showConfirmToast = false + self.onPurchaseSuccess = onPurchaseSuccess } var body: some View { @@ -127,7 +129,7 @@ struct DashSpendPayScreen: View { actionEnabled: viewModel.error == nil && !viewModel.showLimits && !viewModel.isLoading && viewModel.hasValidLimits, inProgress: viewModel.isProcessingPayment, actionHandler: { - if !viewModel.isUserSignedIn() { + if !viewModel.isUserSignedIn { showSignInError() return } @@ -211,6 +213,11 @@ struct DashSpendPayScreen: View { .onDisappear { viewModel.unsubscribeFromAll() } + .onChange(of: viewModel.isUserSignedIn) { isSignedIn in + if !isSignedIn { + presentationMode.wrappedValue.dismiss() + } + } .sheet(isPresented: $showConfirmationDialog) { let dialog = BottomSheet( title: NSLocalizedString("Confirm", comment: "DashSpend"), @@ -243,15 +250,10 @@ struct DashSpendPayScreen: View { private func purchaseGiftCard() { Task { do { - try await viewModel.purchaseGiftCardAndPay() - - // Close the confirmation dialog and show success toast + let txId = try await viewModel.purchaseGiftCardAndPay() showConfirmationDialog = false - showConfirmToast = true - DispatchQueue.main.asyncAfter(deadline: .now() + 3) { - showConfirmToast = false - presentationMode.wrappedValue.dismiss() - } + presentationMode.wrappedValue.dismiss() + onPurchaseSuccess?(txId) } catch let error as CTXSpendError { showConfirmationDialog = false errorTitle = NSLocalizedString("Purchase Failed", comment: "DashSpend") diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift index 3b3681a98..5e17db6b4 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift @@ -28,10 +28,12 @@ class DashSpendPayViewModel: NSObject, ObservableObject { private let sendCoinsService = SendCoinsService() private var merchantId: String = "" + private var merchantUrl: String? = nil private(set) var amount: Decimal = 0 private(set) var savingsFraction: Decimal = 0.0 @Published private(set) var isLoading = false @Published private(set) var isProcessingPayment = false + @Published private(set) var isUserSignedIn = false let currencySymbol: String = { let locale = Locale.current as NSLocale @@ -89,11 +91,17 @@ class DashSpendPayViewModel: NSObject, ObservableObject { init(merchant: ExplorePointOfUse) { merchantTitle = merchant.name merchantIconUrl = merchant.logoLocation ?? "" + merchantUrl = merchant.website savingsFraction = Decimal(merchant.merchant?.toSavingsFraction() ?? 0.0) if let merchantId = merchant.merchant?.merchantId { self.merchantId = merchantId } + + super.init() + + // Initialize with current sign-in state + isUserSignedIn = ctxSpendService.isUserSignedIn } func subscribeToUpdates() { @@ -101,6 +109,12 @@ class DashSpendPayViewModel: NSObject, ObservableObject { .sink { [weak self] _ in self?.refreshBalance() } .store(in: &cancellableBag) + ctxSpendService.$isUserSignedIn + .sink { [weak self] isSignedIn in + self?.isUserSignedIn = isSignedIn + } + .store(in: &cancellableBag) + if CoinJoinService.shared.mixingState.isInProgress { CoinJoinService.shared.$progress .removeDuplicates() @@ -118,25 +132,14 @@ class DashSpendPayViewModel: NSObject, ObservableObject { } } - func purchaseGiftCardAndPay() async throws { + func purchaseGiftCardAndPay() async throws -> Data { isProcessingPayment = true defer { isProcessingPayment = false } let response = try await purchaseGiftCardAPI() - // Success! Log the response - DSLogger.log("============ GIFT CARD PURCHASE SUCCESSFUL ============") - DSLogger.log("Merchant: \(response.merchantName)") - DSLogger.log("Amount: \(response.paymentFiatCurrency) \(response.paymentFiatAmount)") - DSLogger.log("Dash Amount: \(response.paymentCryptoAmount)") - DSLogger.log("Dash Payment URL: \(response.paymentUrls.first?.value ?? "none")") - DSLogger.log("Payment ID: \(response.paymentId)") - DSLogger.log("Created At: \(response.created)") - DSLogger.log("Status: \(response.status)") - DSLogger.log("====================================================") - // Process the payment using the payment URL - guard let paymentUrlString = response.paymentUrls.first?.value else { + guard let paymentUrlString = response.paymentUrls?.first?.value else { throw CTXSpendError.paymentProcessingError("No payment URL received") } @@ -145,10 +148,8 @@ class DashSpendPayViewModel: NSObject, ObservableObject { // Payment successful - save gift card information DSLogger.log("Payment transaction completed: \(transaction.txHashHexString)") saveGiftCardDummy(txHashData: transaction.txHashData, giftCardId: response.paymentId) - } - - func isUserSignedIn() -> Bool { - return ctxSpendService.isUserSignedIn + + return transaction.txHashData } func contactCTXSupport() { @@ -254,6 +255,16 @@ class DashSpendPayViewModel: NSObject, ObservableObject { private func saveGiftCardDummy(txHashData: Data, giftCardId: String) { DSLogger.log("Gift card saved - txId: \(txHashData.hexEncodedString()), giftCardId: \(giftCardId)") - // TODO: save dummy to SQLite + let giftCard = GiftCard( + txId: txHashData, + merchantName: merchantTitle, + merchantUrl: merchantUrl, + price: amount, + note: giftCardId // Store payment ID in note field temporarily + ) + + Task { + await GiftCardsDAOImpl.shared.create(dto: giftCard) + } } } diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift new file mode 100644 index 000000000..7b66d4e1f --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift @@ -0,0 +1,380 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import SwiftUI +import SDWebImageSwiftUI +import CoreImage.CIFilterBuiltins + +struct GiftCardDetailsView: View { + @StateObject private var viewModel: GiftCardDetailsViewModel + @State private var showHowToUse = false + @State private var navigationController: UINavigationController? = nil + @State private var originalBrightness: CGFloat = -1 + @State private var openTransaction: Bool = false + @Binding var backNavigationRequested: Bool + var onShowBackButton: (Bool) -> Void + + init(txId: Data, backNavigationRequested: Binding, onShowBackButton: @escaping (Bool) -> Void) { + _viewModel = StateObject(wrappedValue: GiftCardDetailsViewModel(txId: txId)) + _backNavigationRequested = backNavigationRequested + self.onShowBackButton = onShowBackButton + } + + var body: some View { + ScrollView { + VStack(spacing: 0) { + // Merchant header + HStack(spacing: 15) { + ZStack(alignment: .bottomTrailing) { + if let iconUrl = viewModel.uiState.merchantIconUrl { + WebImage(url: URL(string: iconUrl)) + .resizable() + .indicator(.activity) + .transition(.fade(duration: 0.3)) + .scaledToFit() + .frame(width: 48, height: 48) + .clipShape(Circle()) + } else { + Image("image.explore.dash.wts.payment.gift-card") + .resizable() + .scaledToFit() + .frame(width: 48, height: 48) + .foregroundColor(.dashBlue) + } + + // Secondary icon + if viewModel.uiState.merchantIconUrl != nil { + Image("image.explore.dash.wts.payment.gift-card") + .resizable() + .scaledToFit() + .frame(width: 16, height: 16) + .foregroundColor(.dashBlue) + .frame(width: 24, height: 24) + .background(Circle().fill(Color.secondaryBackground)) + .overlay(Circle().stroke(Color.secondaryBackground, lineWidth: 2)) + .offset(x: 2, y: 2) + } + } + + VStack(alignment: .leading, spacing: 4) { + Text(viewModel.uiState.merchantName) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + if let date = viewModel.uiState.purchaseDate { + Text(date, formatter: dateFormatter) + .font(.footnote) + .foregroundColor(.tertiaryText) + } + } + + Spacer() + } + .padding(.horizontal, 25) + .padding(.top, 15) + + // Gift card info container + VStack(spacing: 0) { + // Barcode section + if let barcodeImage = viewModel.uiState.barcodeImage { + Image(uiImage: barcodeImage) + .resizable() + .scaledToFit() + .frame(height: 150) + } else { + ZStack { + RoundedRectangle(cornerRadius: 12) + .fill(Color.gray50) + .frame(height: 108) + + if viewModel.uiState.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .scaleEffect(0.8) + } else if viewModel.uiState.loadingError != nil { + Text(NSLocalizedString("Failed to load barcode", comment: "DashSpend")) + .font(.footnote) + .foregroundColor(.systemRed) + } else { + Text(NSLocalizedString("Barcode placeholder", comment: "DashSpend")) + .font(.caption) + .foregroundColor(.tertiaryText) + } + } + .padding(.horizontal, 20) + .padding(.top, 15) + } + + // Original purchase value + HStack { + Text(NSLocalizedString("Original purchase", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(viewModel.uiState.formattedPrice) + .font(.subheadline) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 20) + .padding(.top, 20) + + // Check current balance link + if let merchantUrl = viewModel.uiState.merchantUrl { + Button(action: { + if let url = URL(string: merchantUrl) { + UIApplication.shared.open(url) + } + }) { + Text(NSLocalizedString("Check current balance", comment: "DashSpend")) + .font(.footnote) + .fontWeight(.medium) + .foregroundColor(.dashBlue) + } + .frame(maxWidth: .infinity, alignment: .trailing) + .padding(.horizontal, 16) + .padding(.top, 8) + } + + // Card number and PIN + if viewModel.uiState.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .padding(.vertical, 40) + } else if let error = viewModel.uiState.loadingError { + VStack(spacing: 10) { + Text(error.localizedDescription) + .font(.caption) + .foregroundColor(.systemRed) + .multilineTextAlignment(.center) + .padding(.horizontal, 20) + } + .padding(.vertical, 40) + } else { + VStack(spacing: 15) { + // Card number + if let cardNumber = viewModel.uiState.cardNumber { + HStack { + Text(NSLocalizedString("Card number", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardNumber) + .font(.subheadline) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardNumber + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .tint(.primaryText) + .frame(width: 20, height: 20) + } + .frame(width: 28, height: 40) + } + .padding(.leading, 20) + .padding(.trailing, 10) + } + + // Card PIN + if let cardPin = viewModel.uiState.cardPin { + HStack { + Text(NSLocalizedString("Card PIN", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardPin) + .font(.subheadline) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardPin + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .tint(.primaryText) + .frame(width: 20, height: 20) + } + .frame(width: 32, height: 40) + } + .padding(.leading, 20) + .padding(.trailing, 10) + } + } + .padding(.top, 22) + .padding(.bottom, 15) + } + } + .background(Color.secondaryBackground) + .cornerRadius(12) + .padding(.horizontal, 20) + .padding(.top, 20) + + Button(action: { + openTransaction = true + onShowBackButton(true) + }) { + HStack { + Text(NSLocalizedString("View transaction details", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + Spacer() + + Image("greyarrow") + .resizable() + .scaledToFit() + .frame(width: 12, height: 12) + } + .padding(.horizontal, 15) + .padding(.vertical, 20) + .background(Color.secondaryBackground) + .cornerRadius(12) + } + .padding(.horizontal, 20) + .padding(.top, 20) + + // How to use button + if !showHowToUse { + Button(action: { + withAnimation { + showHowToUse = true + } + }) { + Text(NSLocalizedString("See how to use this gift card", comment: "DashSpend")) + .font(.subtitle1) + .foregroundColor(.dashBlue) + } + .padding(.top, 30) + } else { + // How to use expanded content + VStack(alignment: .leading, spacing: 30) { + Text(NSLocalizedString("How to use your gift card", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.top, 20) + + // Self-checkout + FeatureSingleItem( + iconName: .custom("dp_user_generic"), + title: NSLocalizedString("Self-checkout", comment: "DashSpend"), + description: NSLocalizedString("Request assistance and show the barcode on your screen for scanning.", comment: "DashSpend") + ) + + // In store + FeatureSingleItem( + iconName: .custom("image.dashspend.shop"), + title: NSLocalizedString("In store", comment: "DashSpend"), + description: NSLocalizedString("Tell the cashier that you'd like to pay with a gift card and share the card number and pin.", comment: "DashSpend") + ) + + // Online + FeatureSingleItem( + iconName: .custom("image.dashspend.online"), + title: NSLocalizedString("Online", comment: "DashSpend"), + description: NSLocalizedString("In the payment section of your checkout, select \"gift card\" and enter your card number and pin.", comment: "DashSpend") + ) + } + .padding(.horizontal, 15) + .padding(.bottom, 35) + .background(Color.secondaryBackground) + .cornerRadius(12) + .padding(.horizontal, 20) + .padding(.top, 20) + } + + // Powered by CTX + VStack(spacing: 8) { + Text(NSLocalizedString("Powered by", comment: "DashSpend")) + .font(.callout) + .foregroundColor(.tertiaryText) + + Image("ctx.logo") + .resizable() + .frame(width: 49, height: 18) + } + .padding(.top, 34) + .padding(.bottom, 40) + } + + if let transaction = viewModel.uiState.transaction { + NavigationLink( + destination: + TXDetailVCWrapper( + transaction: transaction, + navigateBack: $backNavigationRequested, + onDismissed: { + onShowBackButton(false) + } + ).navigationBarHidden(true), + isActive: $openTransaction + ) { + SwiftUI.EmptyView() + }.opacity(0) + } + } + .background(Color.primaryBackground) + .onAppear { + viewModel.startObserving() + setMaxBrightness(true) + } + .onDisappear { + viewModel.stopObserving() + setMaxBrightness(false) + } + } + + private func setMaxBrightness(_ enable: Bool) { + if enable { + // Save original brightness + if originalBrightness < 0 { + originalBrightness = UIScreen.main.brightness + } + + UIScreen.main.brightness = 1.0 + } else { + // Restore original brightness + if originalBrightness >= 0 { + UIScreen.main.brightness = originalBrightness + originalBrightness = -1 + } + } + } + + private var dateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM dd, yyyy 'at' h:mm a" + return formatter + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift new file mode 100644 index 000000000..0ddb1d324 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift @@ -0,0 +1,215 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import Combine +import UIKit + +struct GiftCardDetailsUIState { + var merchantName: String = "" + var merchantIconUrl: String? = nil + var merchantUrl: String? = nil + var formattedPrice: String = "$0.00" + var cardNumber: String? = nil + var cardPin: String? = nil + var barcodeImage: UIImage? = nil + var purchaseDate: Date? = nil + var isLoadingCardDetails: Bool = false + var loadingError: Error? = nil + var transaction: DSTransaction? = nil +} + +@MainActor +class GiftCardDetailsViewModel: ObservableObject { + private var cancellableBag = Set() + private let ctxSpendService = CTXSpendService.shared + private let giftCardsDAO = GiftCardsDAOImpl.shared + private var tickerTimer: Timer? + private var retryCount = 0 + private let maxRetries = 3 + + let txId: Data + @Published private(set) var uiState = GiftCardDetailsUIState() + + private let currencyFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .currency + formatter.currencyCode = "USD" + return formatter + }() + + init(txId: Data) { + self.txId = txId + loadTransaction() + } + + func startObserving() { + // Observe gift card changes + giftCardsDAO.observeCard(byTxId: txId) + .receive(on: DispatchQueue.main) + .sink { [weak self] giftCard in + guard let self = self, let card = giftCard else { return } + + self.uiState.merchantName = card.merchantName + self.uiState.merchantUrl = card.merchantUrl + self.uiState.formattedPrice = self.currencyFormatter.string(from: card.price as NSDecimalNumber) ?? "$0.00" + self.uiState.cardNumber = card.number + self.uiState.cardPin = card.pin + + // Generate barcode if we have the value + if let barcodeValue = card.barcodeValue { + self.generateBarcode(from: barcodeValue, format: card.barcodeFormat ?? "CODE128") + } + + // If we don't have card details yet but have a note (payment ID), start ticker + if card.number == nil && card.note != nil { + self.startTicker() + } else { + self.stopTicker() + } + } + .store(in: &cancellableBag) + + // TODO: Observe merchant icon from transaction metadata if available + } + + func stopObserving() { + cancellableBag.removeAll() + stopTicker() + } + + private func loadTransaction() { + Task.detached { [weak self] in + guard let self = self else { return } + + let transaction = DWEnvironment.sharedInstance().currentWallet.allTransactions.first { transaction in + return transaction.txHashData == self.txId + } + + await MainActor.run { + if let tx = transaction { + self.uiState.purchaseDate = Date(timeIntervalSince1970: TimeInterval(tx.timestamp)) + self.uiState.transaction = tx + } + } + } + } + + private func startTicker() { + guard tickerTimer == nil else { return } + + uiState.isLoadingCardDetails = true + uiState.loadingError = nil + + Task { + await fetchGiftCardInfo() + } + + // Set up timer for periodic fetches + tickerTimer = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: true) { [weak self] _ in + Task { [weak self] in + await self?.fetchGiftCardInfo() + } + } + } + + private func stopTicker() { + tickerTimer?.invalidate() + tickerTimer = nil + uiState.isLoadingCardDetails = false + retryCount = 0 + } + + private func fetchGiftCardInfo() async { + guard let giftCard = await giftCardsDAO.get(byTxId: txId), + let _ = giftCard.note, + ctxSpendService.isUserSignedIn else { + stopTicker() + return + } + + do { + let base58TxId = ((txId as NSData).reverse() as NSData).base58String() + let response = try await ctxSpendService.getGiftCardByTxid(txid: base58TxId) + + switch response.status { + case "fulfilled": + if let cardNumber = response.cardNumber, !cardNumber.isEmpty { + // Update gift card with received details + await giftCardsDAO.updateCardDetails( + txId: txId, + number: cardNumber, + pin: response.cardPin + ) + + // Save barcode + if !cardNumber.isEmpty { + let cleanNumber = cardNumber.replacingOccurrences(of: " ", with: "") + .replacingOccurrences(of: "-", with: "") + await giftCardsDAO.updateBarcode( + txId: txId, + value: cleanNumber, + format: "CODE128" + ) + } + + stopTicker() + DSLogger.log("DashSpend: Gift card details fetched successfully") + } + + case "rejected": + await MainActor.run { + self.uiState.loadingError = CTXSpendError.customError( + NSLocalizedString("Gift card purchase was rejected", comment: "") + ) + } + stopTicker() + + default: + // Keep polling for other statuses + break + } + } catch { + retryCount += 1 + if retryCount >= maxRetries { + await MainActor.run { + self.uiState.loadingError = error + } + stopTicker() + } + DSLogger.log("DashSpend: Failed to fetch gift card info: \(error)") + } + } + + private func generateBarcode(from string: String, format: String) { + guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else { return } + + let data = string.data(using: .ascii) + filter.setValue(data, forKey: "inputMessage") + + guard let outputImage = filter.outputImage else { return } + + let scaleX = 3.0 + let scaleY = 5.0 + let transformedImage = outputImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY)) + + let context = CIContext() + if let cgImage = context.createCGImage(transformedImage, from: transformedImage.extent) { + uiState.barcodeImage = UIImage(cgImage: cgImage) + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift new file mode 100644 index 000000000..62c4f8571 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift @@ -0,0 +1,252 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class ExploreContentsView: UIView { + + var getTestDashHandler: (() -> Void)? + var whereToSpendHandler: (() -> Void)? + var atmHandler: (() -> Void)? + var stakingHandler: (() -> Void)? + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + private var isTestnet: Bool { + return DWEnvironment.sharedInstance().currentChain.isTestnet() + } + + private func setupView() { + backgroundColor = .dw_darkBlue() + + let contentView = UIView() + contentView.translatesAutoresizingMaskIntoConstraints = false + contentView.backgroundColor = .dw_secondaryBackground() + contentView.layer.cornerRadius = 8.0 + contentView.layer.masksToBounds = true + contentView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + addSubview(contentView) + + let subContentView = UIView() + subContentView.translatesAutoresizingMaskIntoConstraints = false + subContentView.backgroundColor = .dw_background() + subContentView.layer.cornerRadius = 8.0 + subContentView.layer.masksToBounds = true + contentView.addSubview(subContentView) + + let buttonsStackView = UIStackView() + buttonsStackView.translatesAutoresizingMaskIntoConstraints = false + buttonsStackView.spacing = 8 + buttonsStackView.axis = .vertical + buttonsStackView.distribution = .equalSpacing + subContentView.addSubview(buttonsStackView) + + // Add "Get Test Dash" item if testnet + if isTestnet { + let getTestDashItem = createItem( + image: UIImage(named: "dashCurrency"), + title: NSLocalizedString("Get Test Dash", comment: ""), + subtitle: NSLocalizedString("Test Dash is free and can be obtained from what is called a faucet.", comment: "") + ) { [weak self] in + self?.getTestDashHandler?() + } + buttonsStackView.addArrangedSubview(getTestDashItem) + } + + let merchantsItem = createItem( + image: UIImage(named: "image.explore.dash.wheretospend"), + title: NSLocalizedString("Where to Spend?", comment: ""), + subtitle: NSLocalizedString("Find merchants that accept Dash payments.", comment: "") + ) { [weak self] in + self?.whereToSpendHandler?() + } + buttonsStackView.addArrangedSubview(merchantsItem) + + let atmItem = createItem( + image: UIImage(named: "image.explore.dash.atm"), + title: NSLocalizedString("ATMs", comment: ""), + subtitle: NSLocalizedString("Find ATMs where you can buy or sell Dash.", comment: "") + ) { [weak self] in + self?.atmHandler?() + } + buttonsStackView.addArrangedSubview(atmItem) + + let cnItem = createItem( + image: UIImage(named: "image.explore.dash.staking"), + title: NSLocalizedString("Staking", comment: ""), + subtitle: NSLocalizedString("Easily stake Dash and earn passive income with a few simple clicks.", comment: "") + ) { [weak self] in + self?.stakingHandler?() + } + cnItem.addContent(CrowdNodeAPYView(frame: .zero)) + buttonsStackView.addArrangedSubview(cnItem) + + let verticalPadding: CGFloat = 10 + + NSLayoutConstraint.activate([ + contentView.topAnchor.constraint(equalTo: topAnchor), + contentView.bottomAnchor.constraint(equalTo: bottomAnchor), + contentView.leadingAnchor.constraint(equalTo: leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: trailingAnchor), + + subContentView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15), + subContentView.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -35), + subContentView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15), + subContentView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), + + buttonsStackView.topAnchor.constraint(equalTo: subContentView.topAnchor, constant: verticalPadding), + buttonsStackView.bottomAnchor.constraint(equalTo: subContentView.bottomAnchor, constant: -verticalPadding), + buttonsStackView.trailingAnchor.constraint(equalTo: subContentView.trailingAnchor), + buttonsStackView.leadingAnchor.constraint(equalTo: subContentView.leadingAnchor) + ]) + } + + private func createItem(image: UIImage?, title: String, subtitle: String, action: @escaping () -> Void) -> ExploreContentsViewCell { + let item = ExploreContentsViewCell(frame: .zero) + item.translatesAutoresizingMaskIntoConstraints = false + item.image = image + item.title = title + item.subtitle = subtitle + item.actionHandler = action + return item + } +} + +// MARK: - ExploreContentsViewCell + +private class ExploreContentsViewCell: UIView { + + private let iconImageView = UIImageView() + private let titleLabel = UILabel() + private let descLabel = UILabel() + private let contentStack = UIStackView() + + var actionHandler: (() -> Void)? + + var image: UIImage? { + get { iconImageView.image } + set { iconImageView.image = newValue } + } + + var title: String? { + get { titleLabel.text } + set { titleLabel.text = newValue } + } + + var subtitle: String? { + get { descLabel.text } + set { descLabel.text = newValue } + } + + override init(frame: CGRect) { + super.init(frame: frame) + configureHierarchy() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configureHierarchy() + } + + @objc private func buttonAction(_ sender: UIButton) { + actionHandler?() + } + + private func configureHierarchy() { + backgroundColor = .dw_background() + + let stackView = UIStackView() + stackView.axis = .horizontal + stackView.spacing = 10 + stackView.alignment = .top + stackView.translatesAutoresizingMaskIntoConstraints = false + addSubview(stackView) + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.contentMode = .center + stackView.addArrangedSubview(iconImageView) + + let labelsStackView = UIStackView() + labelsStackView.translatesAutoresizingMaskIntoConstraints = false + labelsStackView.axis = .vertical + labelsStackView.spacing = 1 + labelsStackView.alignment = .leading + stackView.addArrangedSubview(labelsStackView) + contentStack.axis = .vertical + contentStack.spacing = 1 + contentStack.alignment = .leading + + titleLabel.setContentCompressionResistancePriority(.required, for: .vertical) + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.textColor = .label + titleLabel.font = .dw_font(forTextStyle: .body) + titleLabel.textAlignment = .left + titleLabel.numberOfLines = 0 + labelsStackView.addArrangedSubview(titleLabel) + + descLabel.setContentCompressionResistancePriority(.required, for: .vertical) + descLabel.translatesAutoresizingMaskIntoConstraints = false + descLabel.textColor = .secondaryLabel + descLabel.font = .dw_font(forTextStyle: .footnote) + descLabel.textAlignment = .left + descLabel.numberOfLines = 0 + labelsStackView.addArrangedSubview(descLabel) + + // Replace labelsStackView with contentStack for extensibility + stackView.removeArrangedSubview(labelsStackView) + stackView.addArrangedSubview(contentStack) + contentStack.addArrangedSubview(titleLabel) + contentStack.addArrangedSubview(descLabel) + + let button = UIButton(type: .custom) + button.translatesAutoresizingMaskIntoConstraints = false + button.titleLabel?.text = "" + button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside) + addSubview(button) + + NSLayoutConstraint.activate([ + iconImageView.widthAnchor.constraint(equalToConstant: 34), + iconImageView.heightAnchor.constraint(equalToConstant: 34), + + stackView.topAnchor.constraint(equalTo: topAnchor, constant: 12), + stackView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -12), + stackView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 15), + stackView.trailingAnchor.constraint(equalTo: trailingAnchor), + + button.topAnchor.constraint(equalTo: topAnchor), + button.bottomAnchor.constraint(equalTo: bottomAnchor), + button.leadingAnchor.constraint(equalTo: leadingAnchor), + button.trailingAnchor.constraint(equalTo: trailingAnchor) + ]) + } + + func addContent(_ view: UIView) { + let last = contentStack.arrangedSubviews.last + if let last = last { + contentStack.setCustomSpacing(10, after: last) + } + contentStack.addArrangedSubview(view) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift new file mode 100644 index 000000000..fd7a1325e --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift @@ -0,0 +1,89 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class ExploreHeaderView: UIStackView { + + private let iconImageView = UIImageView() + private let titleLabel = UILabel() + private let descLabel = UILabel() + + var image: UIImage? { + get { iconImageView.image } + set { iconImageView.image = newValue } + } + + var title: String? { + get { titleLabel.text } + set { titleLabel.text = newValue } + } + + var subtitle: String? { + get { descLabel.text } + set { descLabel.text = newValue } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + private func setupView() { + backgroundColor = .dw_darkBlue() + spacing = 4 + axis = .vertical + distribution = .fillProportionally + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.contentMode = .scaleAspectFit + addArrangedSubview(iconImageView) + + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.textColor = .white + titleLabel.font = .dw_font(forTextStyle: .largeTitle) + titleLabel.textAlignment = .center + titleLabel.numberOfLines = 0 + titleLabel.minimumScaleFactor = 0.4 + titleLabel.adjustsFontSizeToFitWidth = true + addArrangedSubview(titleLabel) + + descLabel.translatesAutoresizingMaskIntoConstraints = false + descLabel.textColor = .white + descLabel.font = .dw_font(forTextStyle: .callout) + descLabel.textAlignment = .center + descLabel.numberOfLines = 0 + descLabel.adjustsFontSizeToFitWidth = true + descLabel.minimumScaleFactor = 0.4 + addArrangedSubview(descLabel) + + iconImageView.setContentHuggingPriority(.required, for: .vertical) + titleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + descLabel.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + + NSLayoutConstraint.activate([ + iconImageView.heightAnchor.constraint(lessThanOrEqualToConstant: 250.0), + descLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 15.0), + descLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -15.0) + ]) + } +} diff --git a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift similarity index 60% rename from DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h rename to DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift index 00e1da24c..c5fcd490b 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h +++ b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift @@ -1,6 +1,6 @@ // -// Created by PT -// Copyright © 2023 Dash Core Group. All rights reserved. +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. @@ -15,15 +15,12 @@ // limitations under the License. // -#import +import Foundation +import Combine -#ifndef DWHomeViewControllerDelegate_h -#define DWHomeViewControllerDelegate_h - -@protocol DWHomeViewControllerDelegate - -- (void)showPaymentsControllerWithActivePage:(NSInteger)pageIndex; - -@end - -#endif /* DWHomeViewControllerDelegate_h */ +class CustomIconMetadataProvider: MetadataProvider { + private var cancellableBag = Set() + var availableMetadata: [Data : TxRowMetadata] = [:] + + let metadataUpdated = PassthroughSubject() +} diff --git a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift index e48ded7a2..244caf2d1 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift @@ -17,8 +17,7 @@ import UIKit -extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTestnetViewControllerDelegate { - +extension HomeViewController: DWLocalCurrencyViewControllerDelegate, ExploreViewControllerDelegate { func performAction(for action: ShortcutAction, sender: UIView?) { switch action.type { case .secureWallet: @@ -116,7 +115,7 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTe } private func showExploreDash() { - let controller = DWExploreTestnetViewController() + let controller = ExploreViewController() controller.delegate = self let navigationController = BaseNavigationController(rootViewController: controller) present(navigationController, animated: true, completion: nil) @@ -155,11 +154,15 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTe // MARK: - DWExploreTestnetViewControllerDelegate - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.pay.rawValue) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.receive.rawValue) } + + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) { + showGiftCardDetails(txId: txId) + } } diff --git a/DashWallet/Sources/UI/Home/HomeViewController.swift b/DashWallet/Sources/UI/Home/HomeViewController.swift index 47aea95ab..4893af6b7 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController.swift @@ -19,12 +19,17 @@ import UIKit import SwiftUI import Combine +@objc(DWHomeViewControllerDelegate) +protocol HomeViewControllerDelegate: AnyObject { + func showPaymentsController(withActivePage pageIndex: Int) +} + class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { private var cancellableBag = Set() var model: DWHomeProtocol! var viewModel: HomeViewModel! private var homeView: HomeView! - weak var delegate: (DWHomeViewControllerDelegate & DWWipeDelegate)? + weak var delegate: (HomeViewControllerDelegate & DWWipeDelegate)? #if DASHPAY var isBackButtonHidden: Bool = false @@ -209,6 +214,14 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { present(nvc, animated: true, completion: nil) } + func showGiftCardDetails(txId: Data) { + let hostingController = UIHostingController(rootView: + GiftCardDetailsSheet(txId: txId).background(Color.primaryBackground) + ) + + present(hostingController, animated: true, completion: nil) + } + private func configureObservers() { viewModel.$showTimeSkewAlertDialog .sink { [weak self] showTimeSkew in diff --git a/DashWallet/Sources/UI/Home/Views/HomeView.swift b/DashWallet/Sources/UI/Home/Views/HomeView.swift index 273bbce1e..c9c6fe9d1 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeView.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeView.swift @@ -181,6 +181,7 @@ struct HomeViewContent: View { @State private var navigateToDashPayFlow: Bool = false @State private var navigateToCoinJoin: Bool = false @State private var skipToCreateUsername: Bool = false + @State private var giftCardTxId: Data? = nil @StateObject var viewModel: HomeViewModel #if DASHPAY @@ -294,6 +295,13 @@ struct HomeViewContent: View { .sheet(item: $selectedTxDataItem) { item in TransactionDetailsSheet(item: item) } + .sheet(isPresented: .constant(giftCardTxId != nil), onDismiss: { + giftCardTxId = nil + }) { + if let txId = giftCardTxId { + GiftCardDetailsSheet(txId: txId) + } + } #if DASHPAY .sheet(isPresented: $shouldShowMixDialog, onDismiss: { viewModel.shouldShowMixDashDialog = false @@ -405,10 +413,11 @@ struct HomeViewContent: View { } .frame(height: 80) - case .tx(let txItem): + case .tx(let txItem, let metadata): TransactionPreview( - title: txItem.stateTitle, + title: metadata?.title ?? txItem.stateTitle, subtitle: txItem.shortTimeString, + details: metadata?.details?.isEmpty == false ? metadata?.details : nil, icon: .custom(txItem.iconName), dashAmount: txItem.signedDashAmount, overrideFiatAmount: txItem.fiatAmount @@ -434,6 +443,27 @@ struct HomeViewContent: View { #endif } +struct GiftCardDetailsSheet: View { + var txId: Data + @State private var showBackButton: Bool = false + @State private var backNavigationRequested: Bool = false + + var body: some View { + BottomSheet(showBackButton: $showBackButton, onBackButtonPressed: { + backNavigationRequested = true + }) { + GiftCardDetailsView( + txId: txId, + backNavigationRequested: $backNavigationRequested, + onShowBackButton: { show in + showBackButton = show + } + ) + } + .background(Color.primaryBackground) + } +} + struct TransactionDetailsSheet: View { @State private var showBackButton: Bool = false @State private var backNavigationRequested: Bool = false @@ -470,7 +500,7 @@ struct TransactionDetailsSheet: View { showBackButton = show } ) - case .tx(let txItem): + case .tx(let txItem, _): TXDetailVCWrapper(tx: txItem, navigateBack: $backNavigationRequested) } } diff --git a/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift b/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift index 6d084f441..600ad885c 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift @@ -44,6 +44,7 @@ class HomeViewModel: ObservableObject { private var txByHash: [String: TransactionListDataItem] = [:] private var crowdNodeTxSet = FullCrowdNodeSignUpTxSet() private var coinJoinTxSets: [String: CoinJoinMixingTxSet] = [:] // Grouped by date + private var metadataProviders: [MetadataProvider] = [] @Published private(set) var txItems: [TransactionGroup] = [] @Published var shortcutItems: [ShortcutAction] = [] @@ -103,6 +104,7 @@ class HomeViewModel: ObservableObject { self.recalculateHeight() } + self.setupMetadataProviders() self.onSyncStateChanged() self.recalculateHeight() @@ -174,40 +176,40 @@ class HomeViewModel: ObservableObject { self.crowdNodeTxSet = FullCrowdNodeSignUpTxSet() self.coinJoinTxSets = [:] - var items: [TransactionListDataItem] = transactions.compactMap { - Tx.shared.updateRateIfNeeded(for: $0) - - if self.displayMode == .sent && $0.direction != .sent { + var items: [TransactionListDataItem] = transactions.compactMap { tx -> TransactionListDataItem? in + Tx.shared.updateRateIfNeeded(for: tx) + + if self.displayMode == .sent && tx.direction != .sent { return nil } - - if self.displayMode == .received && ($0.direction != .received || $0 is DSCoinbaseTransaction) { + + if self.displayMode == .received && (tx.direction != .received || tx is DSCoinbaseTransaction) { return nil } - - if self.displayMode == .rewards && !($0 is DSCoinbaseTransaction) { + + if self.displayMode == .rewards && !(tx is DSCoinbaseTransaction) { return nil } - - if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: $0) { + + if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: tx) { return nil } - - if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: $0) { + + if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: tx) { // CrowdNode transactions will be included below return nil } - let date = DWDateFormatter.sharedInstance.dateOnly(from: $0.date) + let date = DWDateFormatter.sharedInstance.dateOnly(from: tx.date) let coinJoinTxSet = self.coinJoinTxSets[date] ?? CoinJoinMixingTxSet() self.coinJoinTxSets[date] = coinJoinTxSet - - if coinJoinTxSet.tryInclude(tx: $0) { + + if coinJoinTxSet.tryInclude(tx: tx) { // CoinJoin transactions will be included below return nil } - - return .tx(Transaction(transaction: $0)) + + return .tx(Transaction(transaction: tx), self.resolveMetadata(for: tx.txHashData)) } self.txByHash.removeAll() @@ -262,7 +264,7 @@ class HomeViewModel: ObservableObject { Tx.shared.updateRateIfNeeded(for: tx) var itemId = tx.txHashHexString - var txItem: TransactionListDataItem = .tx(Transaction(transaction: tx)) + var txItem: TransactionListDataItem = .tx(Transaction(transaction: tx), resolveMetadata(for: tx.txHashData)) let dateKey = DWDateFormatter.sharedInstance.dateOnly(from: tx.date) if self.crowdNodeTxSet.tryInclude(tx: tx) { @@ -283,15 +285,19 @@ class HomeViewModel: ObservableObject { self.txByHash[itemId] = txItem var isChanged = true - if case let .tx(existingTx) = existingItem, case let .tx(newTx) = txItem { - isChanged = newTx.state != existingTx.state + if case let .tx(existingTx, oldMetadata) = existingItem, case let .tx(newTx, metadata) = txItem { + isChanged = newTx.state != existingTx.state || oldMetadata != metadata } if isChanged { if let groupIndex = self.txItems.firstIndex(where: { $0.id == dateKey }), let itemIndex = self.txItems[groupIndex].items.firstIndex(where: { $0.id == itemId }) { DispatchQueue.main.async { - self.txItems[groupIndex].items[itemIndex] = txItem + let updatedGroup = self.txItems[groupIndex] + var updatedItems = updatedGroup.items + updatedItems[itemIndex] = txItem + updatedGroup.items = updatedItems + self.txItems[groupIndex] = updatedGroup } } } @@ -361,6 +367,30 @@ class HomeViewModel: ObservableObject { return (false, 0) } } + + + private func resolveMetadata(for txId: Data) -> TxRowMetadata? { + var finalMetadata: TxRowMetadata? = nil + + for provider in self.metadataProviders { + if let metadata = provider.availableMetadata[txId] { + if finalMetadata == nil { + finalMetadata = metadata + } else { + if finalMetadata?.title == nil { + finalMetadata?.title = metadata.title + } + + if finalMetadata?.details == nil { + finalMetadata?.details = metadata.details + } + } + } + } + + print("METADATA: resolved finalMetadata: \(String(describing: finalMetadata))") + return finalMetadata + } } // MARK: - CoinJoin @@ -416,6 +446,26 @@ extension HomeViewModel { } } +// MARK: - Metadata Providers + +extension HomeViewModel { + private func setupMetadataProviders() { +// let privateMemoProvider = PrivateMemoProvider() +// privateMemoProvider.metadataUpdated +// .receive(on: self.queue) +// .sink { [weak self] txHash in +// guard let self = self else { return } +// +// let wallet = DWEnvironment.sharedInstance().currentWallet +// if let transaction = wallet.transaction(forHash: txHash.withUnsafeBytes { $0.load(as: UInt256.self) }) { +// self.onTransactionStatusChanged(tx: transaction) +// } +// } +// .store(in: &cancellableBag) +// +// self.metadataProviders = [privateMemoProvider] + } +} // MARK: - Shortcuts diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h b/DashWallet/Sources/UI/Home/Views/MetadataProvider.swift similarity index 55% rename from DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h rename to DashWallet/Sources/UI/Home/Views/MetadataProvider.swift index 4f15da679..95c13c6a5 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h +++ b/DashWallet/Sources/UI/Home/Views/MetadataProvider.swift @@ -1,6 +1,6 @@ // -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. @@ -15,19 +15,12 @@ // limitations under the License. // -#import +struct TxRowMetadata: Equatable { + var title: String? + var details: String? + // TODO: custom icon +} -NS_ASSUME_NONNULL_BEGIN - - -@interface DWExploreHeaderView : UIStackView - -extern CGFloat const kExploreHeaderViewHeight; - -@property (nullable, nonatomic, strong) UIImage *image; -@property (nullable, nonatomic, copy) NSString *title; -@property (nullable, nonatomic, copy) NSString *subtitle; - -@end - -NS_ASSUME_NONNULL_END +protocol MetadataProvider { + var availableMetadata: [Data: TxRowMetadata] { get } +} diff --git a/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift b/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift index 65ee6303b..8b0f0c3f1 100644 --- a/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift +++ b/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift @@ -28,7 +28,7 @@ class TransactionGroup: Identifiable { } enum TransactionListDataItem { - case tx(Transaction) + case tx(Transaction, TxRowMetadata?) case crowdnode(FullCrowdNodeSignUpTxSet) case coinjoin(CoinJoinMixingTxSet) } @@ -40,7 +40,7 @@ extension TransactionListDataItem: Identifiable { return FullCrowdNodeSignUpTxSet.id case .coinjoin(let set): return set.id - case .tx(let tx): + case .tx(let tx, _): return tx.txHashHexString } } @@ -51,7 +51,7 @@ extension TransactionListDataItem: Identifiable { return set.transactionMap.values.first!.date case .coinjoin(let set): return set.groupDay - case .tx(let tx): + case .tx(let tx, _): return tx.date } } diff --git a/DashWallet/Sources/UI/Main/MainTabbarController.swift b/DashWallet/Sources/UI/Main/MainTabbarController.swift index a21dc8afe..8020bdc48 100644 --- a/DashWallet/Sources/UI/Main/MainTabbarController.swift +++ b/DashWallet/Sources/UI/Main/MainTabbarController.swift @@ -87,7 +87,7 @@ class MainTabbarController: UITabBarController { #if DASHPAY weak var contactsNavigationController: DWRootContactsViewController? - weak var exploreNavigationController: DWExploreTestnetViewController? + weak var exploreNavigationController: ExploreViewController? #endif // TODO: Refactor this and send notification about wiped wallet instead of chaining the delegate @@ -226,7 +226,7 @@ extension MainTabbarController { item = UITabBarItem(title: nil, image: MainTabbarTabs.explore.icon, selectedImage: MainTabbarTabs.explore.selectedIcon) item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) - let exploreVC = DWExploreTestnetViewController() + let exploreVC = ExploreViewController() exploreVC.delegate = self exploreNavigationController = exploreVC nvc = BaseNavigationController(rootViewController: exploreVC) @@ -344,6 +344,11 @@ extension MainTabbarController: DWMainMenuViewControllerDelegate { func mainMenuViewControllerOpenHomeScreen(_ controller: DWMainMenuViewController) { selectedIndex = MainTabbarTabs.home.rawValue } + + func showGiftCard(_ txId: Data!) { + selectedIndex = MainTabbarTabs.home.rawValue + homeController?.showGiftCardDetails(txId: txId) + } } // MARK: DWWipeDelegate @@ -385,9 +390,9 @@ extension MainTabbarController: PaymentsViewControllerDelegate { } } -// MARK: DWHomeViewControllerDelegate +// MARK: HomeViewControllerDelegate -extension MainTabbarController: DWHomeViewControllerDelegate { +extension MainTabbarController: HomeViewControllerDelegate { func showPaymentsController(withActivePage pageIndex: NSInteger) { showPaymentsController(withActivePage: PaymentsViewControllerState(rawValue: pageIndex)!) } @@ -428,12 +433,16 @@ extension MainTabbarController: UITabBarControllerDelegate { // MARK: DWExploreTestnetViewControllerDelegate -extension MainTabbarController: DWExploreTestnetViewControllerDelegate { - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { +extension MainTabbarController: ExploreViewControllerDelegate { + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) { + homeController?.showGiftCardDetails(txId: txId) + } + + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.pay) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.receive) } } diff --git a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m index fb491ae58..a3f707f4a 100644 --- a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m @@ -21,7 +21,6 @@ #import #import "DWAboutModel.h" -#import "DWExploreTestnetViewController.h" #import "DWGlobalOptions.h" #import "DWMainMenuModel.h" #import "DWSecurityMenuViewController.h" @@ -38,7 +37,7 @@ @interface DWMainMenuViewController () @@ -138,7 +137,7 @@ - (void)mainMenuContentView:(DWMainMenuContentView *)view didSelectMenuItem:(id< break; } case DWMainMenuItemType_Explore: { - DWExploreTestnetViewController *controller = [[DWExploreTestnetViewController alloc] init]; + DWExploreViewController *controller = [[DWExploreViewController alloc] init]; controller.delegate = self; DWNavigationController *nvc = [[DWNavigationController alloc] initWithRootViewController:controller]; [self presentViewController:nvc animated:YES completion:nil]; @@ -249,14 +248,18 @@ - (void)settingsMenuViewControllerDidRescanBlockchain:(DWSettingsMenuViewControl } #pragma mark - DWExploreTestnetViewControllerDelegate -- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreTestnetViewController *)controller { +- (void)exploreViewControllerShowSendPayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Pay]; } -- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreTestnetViewController *)controller { +- (void)exploreViewControllerShowReceivePayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Receive]; } +- (void)exploreViewControllerShowGiftCard:(DWExploreViewController *)controller txId:(NSData *)txId { + [self.delegate showGiftCard:txId]; +} + #pragma mark - DWRootEditProfileViewControllerDelegate #if DASHPAY diff --git a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h index a40e52e87..bb11c35ae 100644 --- a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h +++ b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h @@ -25,6 +25,7 @@ - (void)mainMenuViewControllerImportPrivateKey:(DWMainMenuViewController *)controller; - (void)mainMenuViewControllerOpenHomeScreen:(DWMainMenuViewController *)controller; - (void)showPaymentsControllerWithActivePage:(NSInteger)pageIndex; +- (void)showGiftCard:(NSData *)txId; @end diff --git a/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift b/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift index 8e8d6f4fa..86f99dd3e 100644 --- a/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift +++ b/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift @@ -69,7 +69,7 @@ final class ProvideAmountViewController: SendAmountViewController { let stackView = UIStackView() stackView.axis = .vertical - stackView.spacing = 26 + stackView.spacing = UIDevice.isIphone5OrLess ? 10 : 26 stackView.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(stackView) @@ -111,10 +111,10 @@ final class ProvideAmountViewController: SendAmountViewController { stackView.addArrangedSubview(amountView) NSLayoutConstraint.activate([ - stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10), + stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: UIDevice.isIphone5OrLess ? 0 : 10), stackView.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), stackView.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), - swiftUIController.view.heightAnchor.constraint(equalToConstant: 100) + swiftUIController.view.heightAnchor.constraint(equalToConstant: UIDevice.isIphone5OrLess ? 84 : 100) ]) } @@ -197,6 +197,7 @@ struct ProvideAmountIntro: View { destination: destination, dashBalance: CoinJoinService.shared.mixingState.isInProgress ? model.coinJoinBalance : model.walletBalance, balanceLabel: balanceLabel + ":", + authCallback: model.auth, avatarView: avatarView ) } diff --git a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m index a9e883052..e9ce68724 100644 --- a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m +++ b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m @@ -159,7 +159,7 @@ - (void)processPaymentInput:(DWPaymentInput *)paymentInput { self.paymentInput = paymentInput; if (paymentInput.request) { - if (paymentInput.source == DWPaymentInputSource_ScanQR && paymentInput.request.isValidAsNonDashpayPaymentRequest) { + if ((paymentInput.source == DWPaymentInputSource_ScanQR || paymentInput.source == DWPaymentInputSource_URL) && paymentInput.request.isValidAsNonDashpayPaymentRequest) { DSPaymentProtocolRequest *protocolRequest = [self protocolRequestFromPaymentRequest:self.paymentInput.request]; [self txManagerRequestingAdditionalInfo:DSRequestingAdditionalInfo_Amount protocolRequest:protocolRequest]; diff --git a/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift b/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift index d6e6e0dd4..3f10b1e94 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift @@ -62,6 +62,10 @@ extension Color { Color("Gray500") } + static var gray50: Color { + Color("Gray50") + } + // Background and secondary background are mismatched in the assests. // The correct values per the design: // Primary background: #F7F7F7 diff --git a/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift b/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift index 5a0fca217..946587d27 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift @@ -25,6 +25,7 @@ struct SendIntro: View { var destination: String? = nil var dashBalance: UInt64? = nil var balanceLabel: String? = nil + var authCallback: ((@escaping (Bool) -> Void) -> Void)? = nil @ViewBuilder var avatarView: () -> Content var body: some View { @@ -65,7 +66,7 @@ struct SendIntro: View { } Button(action: { - balanceHidden.toggle() + toggleBalanceVisibility() }) { Image(systemName: balanceHidden ? "eye.slash.fill" : "eye.fill") .resizable() @@ -84,6 +85,18 @@ struct SendIntro: View { }.frame(maxWidth: .infinity, alignment: .leading) } + private func toggleBalanceVisibility() { + if let authCallback = authCallback, balanceHidden { + authCallback { [self] isAuthenticated in + if isAuthenticated { + balanceHidden.toggle() + } + } + } else { + balanceHidden.toggle() + } + } + @ViewBuilder private func FormattedFiatText(from dashAmount: UInt64) -> some View { let text = (try? CurrencyExchanger.shared.convertDash(amount: dashAmount.dashAmount, to: App.fiatCurrency).formattedFiatAmount) ?? NSLocalizedString("Not available", comment: "") diff --git a/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift b/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift index 83073867f..78713cf26 100644 --- a/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift +++ b/DashWallet/Sources/UI/Tx/Details/TxDetailViewController.swift @@ -378,6 +378,18 @@ struct TXDetailVCWrapper: UIViewControllerRepresentable { @Binding var navigateBack: Bool var onDismissed: (() -> Void)? = nil + init(tx: Transaction, navigateBack: Binding, onDismissed: (() -> Void)? = nil) { + self.tx = tx + self._navigateBack = navigateBack + self.onDismissed = onDismissed + } + + init(transaction: DSTransaction, navigateBack: Binding, onDismissed: (() -> Void)? = nil) { + self.tx = Transaction(transaction: transaction) + self._navigateBack = navigateBack + self.onDismissed = onDismissed + } + func makeCoordinator() -> Coordinator { Coordinator(self) } diff --git a/DashWallet/Sources/UI/Views/SharedViews/Keyboard/NumberKeyboard.swift b/DashWallet/Sources/UI/Views/SharedViews/Keyboard/NumberKeyboard.swift index ecd09e487..69d42c09b 100644 --- a/DashWallet/Sources/UI/Views/SharedViews/Keyboard/NumberKeyboard.swift +++ b/DashWallet/Sources/UI/Views/SharedViews/Keyboard/NumberKeyboard.swift @@ -170,7 +170,7 @@ extension NumberKeyboard { extension NumberKeyboard { enum Style { static let padding: CGFloat = 5 - static let buttonHeight: CGFloat = 50 + static let buttonHeight: CGFloat = UIDevice.isIphone5OrLess ? 45 : 50 static let buttonMaxWidth: CGFloat = 115 static let rowsCount: UInt = 4 static let sectionsCount = 3 diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index db510869d..96b70f2a6 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "كن جزءًا من Dash Masternode مع CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "محدد وجه التعريف"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ابحث عن التجار الذين يقبلون الداش، وأماكن شرائها وكيفية كسب الدخل منها."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "ابحث عن التجار الذين يقبلون داش كوسيلة للدفع."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "اكتشف مكان بيع أو شراء داش والعملات المشفرة الأخرى مقابل النقود."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ابحث عن التجار الذين يقبلون الداش، وأماكن شرائها وكيفية كسب الدخل منها."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "كيفية تأكيد عنوان API Dash الخاص بك"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "المعرف الشخصي التابع لعقدة Evolution"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "تحت المعالجة…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "دخل"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "معاينة الطلب"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "يرجى كتابتها"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "مستوى الأمان"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "مشاهدة في أفلود"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "اختر عملة "; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "بيع"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "فئة الضريبة"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "عرض عبارة الاسترداد"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index a0f787df5..53eacff5c 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Промяна"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Лимит на лицева идентификация"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес на собственика"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Моля запишете го долу"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Ниво на сигурност"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Виж Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Виж фразата за възстановяване"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index c5916ec9f..2c12d3dac 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 313fc1cd1..ad6b50fdf 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Změnit"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Najdi uživatele na Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Najděte obchodníky, kteří přijímají Dash."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Najděte, kde koupit nebo prodat DASH a další kryptoměny za hotovost."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Poznamenejte si ji"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Úroveň zabezpečení"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Prohlédnout na Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Prodej"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobrazit frázi pro obnovení"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index 2176c0fd4..59036f0ce 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/dashwallet-Bridging-Header.h b/DashWallet/dashwallet-Bridging-Header.h index c5d9e55b7..d2960e9bd 100644 --- a/DashWallet/dashwallet-Bridging-Header.h +++ b/DashWallet/dashwallet-Bridging-Header.h @@ -146,9 +146,7 @@ static const bool _SNAPSHOT = 0; #import "DWMainMenuViewController.h" #import "DWWipeDelegate.h" #import "DWPayModel.h" -#import "DWHomeViewControllerDelegate.h" #import "DWMainMenuViewControllerDelegate.h" -#import "DWExploreTestnetViewController.h" //MARK: Home #import "DWHomeModel.h" diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index d7e44f15e..1d1fd761f 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Banküberweisung"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Werde Teil eines Dash Masternodes mit CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Die Stornierung dieser Transaktion führt nicht zur Stornierung des Handelsauftrags. Du wirst deine DASH in Kürze auf deinem Coinbase Konto erhalten."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ändern"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Wechsel zu Standard"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face-ID Limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Autorisierungssitzung konnte nicht gestartet werden."; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Finde einen Benutzer des Dash-Netzwerks"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Finde Händler die DASH akzeptieren"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Finde Händler die Dash akzeptieren, Orte wo du Dash kaufen kannst und Wege wie du Einkommen damit erzielen kannst."; +"Find merchants that accept DASH" = "Finde Händler die DASH akzeptieren"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Finde Händler, die Dash als Zahlungsmethode akzeptieren."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Hier kannst du DASH und andere Kryptowährungen gegen Bargeld kaufen oder verkaufen."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Finde Händler die Dash akzeptieren, Orte wo du Dash kaufen kannst und Wege wie du Einkommen damit erzielen kannst."; /* CrowdNode */ "First deposit should be more than %@" = "Die erste Einzahlung sollte größer als %@ sein."; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Wie du deine API Dash Adresse bestätigst"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In Bearbeitung"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Einnahmen"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vorschau bestellen"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Besitzer-Adresse"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Bitte aufschreiben"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Details anfordern"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Sicherheitsstufe"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Auf Uphold ansehen"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Wähle einen Coin aus"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Verkaufen"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Steuerliche Kategorie"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash besitzen keinen echten Wert, aber du kannst sie an DashPay Alpha-Nutzern senden oder erhalten."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash ist kostenlos und kann von einem Faucet erhalten werden.\nKopiere eine Adresse von deiner Empfangsanzeige in deiner Wallet und klicke auf den Button unter deinem Dash Guthaben."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Wiederherstellungsphrase ansehen"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Stimme für alle"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 13780f36e..4a5e81d12 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Τραπεζικό έμβασμα"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Γίνετε μέλος ενός Dash Masternode με το CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Η ακύρωση αυτής της συναλλαγής δεν ακυρώνει την εντολή ανταλλαγής. Θα λάβετε DASH στο λογαριασμό σας Coinbase σύντομα."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Αλλαγή"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Αλλαγή σε Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "όριο Face ID "; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Αποτυχία εκκίνησης περιόδου λειτουργίας εξουσιοδότησης"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Βρείτε έναν χρήστη στο Δίκτυο του Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Βρείτε εμπόρους που δέχονται DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Βρείτε τους εμπόρους που δέχονται Dash, πού να αγοράσετε και πώς να βγάλετε εισόδημα με αυτό."; +"Find merchants that accept DASH" = "Βρείτε εμπόρους που δέχονται DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Βρείτε εμπόρους που δέχονται το Dash ως πληρωμή"; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Βρείτε πού μπορείτε να αγοράσετε ή να πουλήσετε DASH και άλλα κρυπτονομίσματα με μετρητά."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Βρείτε τους εμπόρους που δέχονται Dash, πού να αγοράσετε και πώς να βγάλετε εισόδημα με αυτό."; /* CrowdNode */ "First deposit should be more than %@" = "Η πρώτη κατάθεση πρέπει να είναι μεγαλύτερη από %@ "; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Πώς να επιβεβαιώσετε τη διεύθυνση API Dash σας"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Κλειδιά Evolution Node ID "; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Σε εξέλιξη..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Εισόδημα"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Προεπισκόπηση παραγγελίας"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Παρακαλώ να το γράψετε"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Λεπτομέρειες αιτήματος"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Επίπεδο Ασφάλειας"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Δείτε στο Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Επιλέξτε το νόμισμα"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Πωλήστε"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Φορολογική κατηγορία"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Τα Test Dash δεν έχουν καμία αξία στον πραγματικό κόσμο, αλλά μπορείτε να στείλετε και να λάβετε με άλλους χρήστες του DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Τα Test Dash είναι δωρεάν και μπορεί να αποκτηθούν από αυτό που ονομάζεται faucet.\nΑντιγράψτε μια διεύθυνση από την οθόνη Λήψης του πορτοφολιού σας και κάντε κλικ στο κουμπί παρακάτω για να λάβετε το Dash σας."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Ψηφίστε για Όλους"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index b7bd2c83d..28060be0a 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index edecabce2..d6c1d34c9 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 575abf717..cae1f3284 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transferencia bancaria"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Forma parte de un Masternode de Dash con CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "La cancelación de esta transacción no cancela la orden comercial. Recibirás DASH en tu cuenta de Coinbase en breve."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Cambia"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Cambiar a Intermedio"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Límite de Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "No se pudo iniciar la sesión de autenticación"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Encontrar un usuario en la red Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Encuentra comerciantes que acepten DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encuentra comercios que acepten Dash, dónde comprar y cómo obtener ingresos con él."; +"Find merchants that accept DASH" = "Encuentra comerciantes que acepten DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Encuentra comerciantes que acepten Dash como forma de pago."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Encuentra dónde comprar o vender DASH y otras criptomonedas por dinero en efectivo."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encuentra comercios que acepten Dash, dónde comprar y cómo obtener ingresos con él."; /* CrowdNode */ "First deposit should be more than %@" = "El primer depósito debe ser más de %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Cómo confirmar tu dirección API de Dash"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Llaves de identificación del nodo de evolución"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "En proceso..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Ingreso"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vista previa del pedido"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Dirección de Propietario"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Anótala, por favor"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Pedir detalles"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Nível de Segurida"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Ver en Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Selecciona la moneda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vender"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoría de impuestos"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Los Dash de prueba no tienen ningún valor en el mundo real, pero puedes enviarlos y recibirlos con otros usuarios de DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Los Dash de prueba son gratuitos y se pueden obtener desde lo que se llama faucet.\nCopia una dirección de la pantalla Recibir de tu billetera y haz clic en el botón a continuación para obtener su Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ver frase de recuperación"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vota por todas"; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index 9b0062777..079d092a1 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Palun kirjuta see üles"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index 89ce47526..71625ee63 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "از طریق کراودنود یکی از مسترنودهای دش بشوید."; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "فروشنده‌ای بیابید که دش می‌پذیرد"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "پدیرندگانی را بیابید که دش قبول می‌کنند، محل خرید و نیز کسب درآمد با دش"; +"Find merchants that accept DASH" = "فروشنده‌ای بیابید که دش می‌پذیرد"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "یافتن فروشندگانی که دش را می‌پذیرند"; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "یافتن مراکز خرید و فروش دش و سایر رمزارزها"; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "پدیرندگانی را بیابید که دش قبول می‌کنند، محل خرید و نیز کسب درآمد با دش"; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "چطور نشانی ای‌پی‌آی دش‌تان را تائید کنید"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "کلیدهای شناسه اولوشن نود"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "اجرای فرآیند..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "درآمد"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "پیش‌نمایش سفارش"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "لطفا آن را یادداشت کنید"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "سطح امنیتی"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "مشاهده در آپهلد"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "یک رمزارز انتخاب کنید"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "فروش"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "دسته‌بندی مالیاتی"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "مشاهده عبارت بازیابی"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index 2d240378b..a5cc50593 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index cb3c15fd2..2c729519f 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Maging bahagi ng isang Dash Masternode na may CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Ang pagkansela sa transaksyong ito ay hindi makakansela sa trade order. Makakatanggap ka ng DASH sa iyong Coinbase account sa ilang sandali."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Baguhin"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Baguhin sa Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Nabigong simulan ang auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Maghanap ng gumagamit sa Network ng Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Maghanap ng mga merchant na tumatanggap ng DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Maghanap ng mga merchant na tumatanggap ng Dash, kung saan ito bibilhin at kung paano kumita gamit ito."; +"Find merchants that accept DASH" = "Maghanap ng mga merchant na tumatanggap ng DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Maghanap ng mga merchant na tumatanggap ng Dash bilang bayad."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Hanapin kung saan bibili o magbenta ng DASH at iba pang cryptocurrencies para sa cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Maghanap ng mga merchant na tumatanggap ng Dash, kung saan ito bibilhin at kung paano kumita gamit ito."; /* CrowdNode */ "First deposit should be more than %@" = "Ang unang deposito ay dapat na higit sa %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Paano kumpirmahin ang iyong API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Mga key ng Evolution Node ID"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Pinoproseso…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Kita"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Preview ng Order"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Address ng may-ari"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Paki-sulat sa ibaba"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Mga detalye ng kahilingan"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Lebel ng seguridad"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Tingnan sa Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Piliin ang barya"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "magbenta"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategorya ng Buwis"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Ang Test Dash ay walang anumang halaga sa totoong mundo ngunit maaari mo itong ipadala at tanggapin kasama ng iba pang mga gumagamit ng DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Ang Test Dash ay libre at maaaring makuha mula sa tinatawag na gripo.\nKopyahin ang isang address mula sa Receive screen ng iyong wallet at i-click ang button sa ibaba upang makuha ang iyong Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ipakita ang recovery phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Bumoto para sa Lahat"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 0d873bd96..f7417734a 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Virement bancaire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Participez à un masternode Dash avec CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Annuler cette transaction n'annule pas l'ordre de trading. Vous recevrez sous peu des dashs sur votre compte Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Modifier"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Basculer sur Intermédiaire"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Limite pour Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Impossible de démarrer la session d'authentification"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Cherchez un utilisateur sur le réseau Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Trouver des vendeurs qui acceptent Dash"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Découvrez des vendeurs qui acceptent Dash, comment acheter des dashs et comment en gagner un revenu."; +"Find merchants that accept DASH" = "Trouver des vendeurs qui acceptent Dash"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Trouvez des vendeurs qui acceptent les paiements avec Dash."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Trouvez où acheter ou vendre des dashs et d'autres cryptomonnaies, contre des espèces."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Découvrez des vendeurs qui acceptent Dash, comment acheter des dashs et comment en gagner un revenu."; /* CrowdNode */ "First deposit should be more than %@" = "Le premier dépôt doit être supérieur à %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Comment confirmer votre adresse API Dash"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Clés ID pour nœud Evolution"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "En cours..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Revenu"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Prévisualisation de la commande"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adresse du propriétaire"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Veuillez l'écrire quelque part"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Détails de la demande"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Niveau de sécurité"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Voir sur Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Choisir les pièces"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vendre"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Catégorie de taxe"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Les dashs de test n'ont pas de valeur réelle, mais vous pouvez les envoyer et recevoir avec d'autres utilisateurs DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Les dashs de test sont gratuits et peuvent être obtenus à ce qu'on appelle un robinet.\nCopiez une adresse depuis l'onglet Recevoir de votre portefeuille, puis cliquez sur le bouton ci-dessous pour obtenir vos dashs de test."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Voir la phrase de récupération"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Voter pour tous"; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index ca454e252..3ac2444f7 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index d9b386b15..99640ec8f 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID összehatár"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Megtekintés Uphold-on"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index da64e3c59..7ae163407 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transfer antar bank"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Menjadi bagian dari Masternode Dash dengan CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Membatalkan transaksi ini tidak membatalkan pesanan perdagangan. Anda akan segera menerima DASH di akun Coinbase Anda."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ubah"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Ubah ke Menengah"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Identitas wajah terbatas"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Gagal memulai sesi autentikasi"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Temukan pengguna di Jaringan Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Temukan toko yang menerima Dash"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Temukan pedagang yang menerima Dash, tempat membelinya, dan cara memperoleh penghasilan dengannya."; +"Find merchants that accept DASH" = "Temukan toko yang menerima Dash"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Temukan pedagang yang menerima Dash sebagai pembayaran."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Temukan tempat untuk membeli atau menjual DASH dan mata uang kripto lainnya secara tunai."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Temukan pedagang yang menerima Dash, tempat membelinya, dan cara memperoleh penghasilan dengannya."; /* CrowdNode */ "First deposit should be more than %@" = "Setoran pertama harus lebih dari %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Bagaimana cara mengonfirmasi API alamat Dash Anda"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Kunci Evolution Node ID"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Dalam proses…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Pemasukan"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Pratinjau Pesanan"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Alamat pemilik"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Tolong catat"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Detail Permintaan"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Tingkat keamanan"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Lihat di Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Pilih koin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Jual"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategori Pajak"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash tidak memiliki nilai apa pun di dunia nyata tetapi Anda dapat mengirim dan menerimanya dengan pengguna DashPay Alpha lainnya."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash gratis dan dapat diperoleh dari apa yang disebut faucet.\nSalin alamat dari layar Terima dompet Anda dan klik tombol di bawah untuk mendapatkan Dash Anda."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Lihat frasa pemulihan"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Pilih untuk semua"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 0cd7b4c3b..46531abc6 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bonifico bancario"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Entra a far parte di un Dash Masternode con CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "L'annullamento di questa transazione non annulla l'ordine commerciale. A breve riceverai DASH sul tuo account Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Cambiare"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Passare ad Intermedio"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Limite \"Face ID\""; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Impossibile avviare la sessione di autenticazione"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Trova un utente su Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Trova commercianti che accettano DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Trova i commercianti che accettano Dash, dove acquistarlo e come guadagnarci."; +"Find merchants that accept DASH" = "Trova commercianti che accettano DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Trova i commercianti che accettano Dash come pagamento."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Trova dove acquistare o vendere DASH e altre criptovalute per contanti."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Trova i commercianti che accettano Dash, dove acquistarlo e come guadagnarci."; /* CrowdNode */ "First deposit should be more than %@" = "Il primo deposito dovrebbe essere superiore a %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Come confermare il tuo indirizzo API Dash"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "ID Keys del nodo Evolution"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Processo in corso..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Reddito"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Anteprima dell'ordine"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Indirizzo del proprietario"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Per favore scrivilo di seguito"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Richiedi dettagli"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Livello di sicurezza"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Vedi su Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Seleziona una coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vendi"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoria fiscale"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "i Dash di Test non hanno alcun valore nel mondo reale ma puoi inviarli e riceverli con altri utenti DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "I Dash di Test sono gratuiti e possono essere ottenuti da quello che viene chiamato faucet.\nCopia un indirizzo dalla schermata Ricevi del tuo wallet e fai clic sul pulsante qui sotto per ottenere i tuoi Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Visualizza la frase di recupero"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vota per tutti"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 4d764c846..e1902b185 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "銀行振込"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "CrowdNodeでDashのマスターノードに加入します"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "この取引をキャンセルしても、トレードの注文はキャンセルされません。CoinbaseのアカウントにまもなくDASHが入金されます。"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "変更する"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "通常のものに変更する"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face IDの送金可能額"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "認証セッションの開始に失敗しました"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Dashのネットワークでユーザーを探す"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "DASHが使える加盟店を探す"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dashを使用できる加盟店、Dashを購入できる場所、Dashで収入を得る方法を探します。"; +"Find merchants that accept DASH" = "DASHが使える加盟店を探す"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Dashでの支払いが可能な加盟店を探します。"; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "DASHやその他の仮想通貨を現金で売買できる場所を探します。"; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dashを使用できる加盟店、Dashを購入できる場所、Dashで収入を得る方法を探します。"; /* CrowdNode */ "First deposit should be more than %@" = "初回入金額は、%@以上必要です。"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "APIのDashアドレスの確認方法"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "エボリューションのノードIDキー"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "処理中"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "収入"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "注文プレビュー"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "所有者の諸々のキー"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "紙に書き留めて下さい"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "詳細の申請"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "セキュリティレベル"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Upholdで確認する"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "通貨を選択する"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "売却"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "税金の区分"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "テストDashは現実世界では何の価値もありませんが、他のDashPayのアルファユーザーと送受金ができます。"; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "テストDashは無料で、いわゆるフォーセットから入手できます。\nお客様のウォレットの受け取り画面からアドレスをコピーし、下のボタンをクリックするとDashを入手できます。"; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "復元フレーズを表示する"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "全てに投票"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index a877f4b77..eaaabb170 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "은행 송금"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "크라우드노드를 통해 대시 마스터노드의 일원이 되세요"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "이 거래를 취소하더라도 거래 주문은 취소되지 않습니다. 곧 귀하의 코인베이스 계좌로 DASH를 받게 됩니다."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "변경"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "중급으로 변경하기"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID 제한"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "승인 세션을 시작하는 데 실패하였습니다"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "대시 네트워크에서 사용자를 검색합니다"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "대시 거래를 허용하는 판매자 찾기"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "대시를 받는 판매자를 찾고, 구매처를 확인하고, 수익을 얻는 방법을 확인하세요."; +"Find merchants that accept DASH" = "대시 거래를 허용하는 판매자 찾기"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "대시 지불을 받는 상점을 찾아보세요."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "어디에서 대시 및 기타 암호화폐를 매수&매도할 수 있는지 찾아보세요."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "대시를 받는 판매자를 찾고, 구매처를 확인하고, 수익을 얻는 방법을 확인하세요."; /* CrowdNode */ "First deposit should be more than %@" = "첫 입금은 %@ 이상이어야 합니다"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "당신의 API 대시 주소를 확인하는 방법"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "에볼루션 노드 ID 키"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "처리중..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "수입"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "주문 미리보기"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "소유자 주소"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "적어주세요"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "요청 세부 내용"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "보안 수준"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "업홀드에서 확인"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "코인 선택"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "매도"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "세금 카테고리"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "테스트 대시는 실생활에서 어떤 가치도 지니지 않으나 다른 대시페이 알파 사용자들과 주고 받을 수 있습니다."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "테스트 대시는 무료이며 파셋이라 불리는 곳으로부터 얻을 수 있습니다\n지갑의 받기 화면에서 주소를 복사하고 아래 버튼을 클릭하여 대시를 받으세요."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "복구 문구 확인"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "모두 투표하기"; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index bf0a649f8..598adccad 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index b88938417..51e500826 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index e66cf57d3..ae8c6ee5b 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 100efda37..6ce328fda 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bankoverschrijving"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Word onderdeel van een Dash Masternode met CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Het annuleren van deze transactie annuleert de handelsorder niet. Je ontvangt binnenkort DASH op je Coinbase account."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Wissel"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Wijzig naar gemiddeld"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiet"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Kan authenticatiesessie niet starten"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Zoek een gebruiker op het Dash netwerk"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Vind winkeliers die Dash accepteren"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Vind winkeliers die Dash accepteren, waar Dash kunt kopen, en hoe je er inkomsten mee kunt genereren."; +"Find merchants that accept DASH" = "Vind winkeliers die Dash accepteren"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Vind acceptanten die Dash als aannemen."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Vind waar je DASH en andere cryptovaluta's kan kopen of verkopen voor cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Vind winkeliers die Dash accepteren, waar Dash kunt kopen, en hoe je er inkomsten mee kunt genereren."; /* CrowdNode */ "First deposit should be more than %@" = "Eerste storting moet meer zijn dan %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Hoe je het API Dash adres kunt bevestigen"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID sleutels"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Bezig...."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Inkomen"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Voorbeeld bestelling"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adres eigenaar"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Schrijf het a.u.b. op"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Verkrijg details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Beveiligingsniveau"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Bekijk op Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Selecteer de munt"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Verkoop"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Belastingcategorie"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash heeft geen enkele waarde in de echte wereld, maar je kunt het verzenden en ontvangen met andere DashPay Alpha-gebruikers."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is gratis en kan worden verkregen via een soort uitgifte portaal genaamd faucet.\nKopieer een adres uit het ontvangstscherm van de portemonnee en klik op de onderstaande knop om test Dash te krijgen."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Toon herstelzin"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Stem voor alle"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 550e99fed..e098bcb31 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transfer Bankowy"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Zostań współwłaścicielem Masternoda dzięki CrwodNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Anulowanie tej transakcji nie anuluje zlecenia. Wkrótce otrzymasz DASH na swoje konto na Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Reszta"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Zmień na Średniozaawansowany"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Nie powiodło się rozpoczęcie sessji auth."; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Znajdź użytkownika na Sieci Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Znajdź sprzedawców, którzy akceptują DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Znajdź handlowców którzy akceptują Dash, gdzie go zakupić oraz jak zarabiać dzięki niemu."; +"Find merchants that accept DASH" = "Znajdź sprzedawców, którzy akceptują DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Znajdź sprzedawcę, który przyjmuje płatności w Dash. "; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Znajdź miejsce gdzie możesz kupić Dash i inne kryptowaluty."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Znajdź handlowców którzy akceptują Dash, gdzie go zakupić oraz jak zarabiać dzięki niemu."; /* CrowdNode */ "First deposit should be more than %@" = "Pierwszy przelew powinien być większy niż %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Jak potwierdzić adres API Dash"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Klucze Evolution Node ID"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "W trakcie..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Przychód"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Podgląd Zamówienia"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adres Właściciela"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Proszę to zapisać"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Zarządaj szczegółów"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Poziom Bezpieczeństwa"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Sprawdź na Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Wybierz monetę"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sprzedawaj"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Kategoria Podatkowa"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash nie ma żadnej wartości w prawdziwym świecie, ale możesz go używać do robienia transakcji z innymi użytkownikami DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash jest bezpłatny i można go uzyskać z tak zwanego kranu (faucet).\nSkopiuj adres z zakładki Odbierz w swoim portfelu i kliknij przycisk poniżej, aby otrzymać Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Pokaż Frazę Odzyskiwania Portfela"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Głosuj nad wszyskimi"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index a09e4b0e8..cc8f934ea 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Transferência bancária"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Torne-se parte de um Masternode Dash com CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Cancelar esta transação não cancela a ordem de negociação. Você receberá DASH em sua conta Coinbase em breve."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Alterar"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Mudar para Intermediário"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Limite de ID de face"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Falha ao iniciar a sessão de autenticação"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Encontre um usuário na rede Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Encontrar comerciantes que aceitam DASH."; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encontre comerciantes que aceitem Dash, descubra onde comprar e como gerar renda com ele. "; +"Find merchants that accept DASH" = "Encontrar comerciantes que aceitam DASH."; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Encontre comércios que aceitam Dash como pagamento."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Encontre onde comprar ou vender DASH e outras criptomoedas por dinheiro."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Encontre comerciantes que aceitem Dash, descubra onde comprar e como gerar renda com ele. "; /* CrowdNode */ "First deposit should be more than %@" = "O primeiro depósito deve ser superior a %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Como confirmar seu endereço de API Dash"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Chaves de Identificação de Nós Evolution "; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "Processando..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Receita"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Visualização do pedido"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Endereço do Proprietário"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Por favor, anote"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Detalhes da solicitação"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Nível de Segurança"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Veja no Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Selecione a moeda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vender"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Categoria fiscal"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "O Dash de teste não tem valor no mundo real, mas você pode enviá-lo e recebê-lo com outros usuários do DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "O Dash de teste é gratuito e pode ser obtido através do que é chamado de \"faucet\". Copie um endereço da tela de Recebimento da sua carteira e clique no botão abaixo para obter seu Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Ver Frase de Recuperação"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Votar em todos"; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 6e13bfd97..5b8f24daa 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "limita Face ID-ului"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Te rog scrie"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Vezi pe Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 08c1ee6fc..2b9c5adf0 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Банковский перевод"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Станьте частью мастерноды Dash вместе с CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Отмена транзакции не повлияет на торговый ордер. Вскоре DASH поступит на ваш счёт в Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Изменить"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Сменить на Средний"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Лимит Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Не удалось запустить сеанс авторизации"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Найти пользователя в сети Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Найти магазины, где принимают DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Узнайте, где принимают Dash, где можно купить монеты и как получить доход с их помощью. "; +"Find merchants that accept DASH" = "Найти магазины, где принимают DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Найдите места где принимают DASH в качестве оплаты."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Найдите, где купить или продать DASH и другие криптовалюты за наличные."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Узнайте, где принимают Dash, где можно купить монеты и как получить доход с их помощью. "; /* CrowdNode */ "First deposit should be more than %@" = "Первый депозит должен быть не менее %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Как подтвердить свой API Dash адрес"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Ключи идентификаторов Evolution нод"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "В процессе..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Доходы"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Просмотр заказа"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес владельца"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Пожалуйста, запишите её"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Узнать подробности"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Уровень безопасности"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Посмотреть на Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Выбрать монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Продать"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Категория"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Тестовый Dash не обладает никакой ценностью в реальном мире, но вы можете обмениваться этими монетами с другими пользователями DashPay Alpha"; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Тестовый Dash распространяется бесплатно, его можно получить из так называемого крана.\nСкопируйте адрес с экрана \"Получить\" в вашем кошельке и нажмите на кнопку ниже, чтобы получить Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Посмотреть фразу восстановления"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Голосовать за все"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 7e43a08e9..86ea90e5d 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bankový prevod"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Staňte sa súčasťou Dash Masternode s CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Zrušenie tejto transakcie nezruší obchodný príkaz. Čoskoro dostanete DASH na svoj Coinbase účet."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Zmeniť"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Zmeniť na stredne pokročilé"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Limit pre Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Nepodarilo sa spustiť autorizáciu"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Nájsť používateľa v sieti Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Nájdite obchodníkov, ktorí akceptujú DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Nájdite obchodníkov, ktorí akceptujú Dash, kde ho kúpiť a ako s ním zarobiť."; +"Find merchants that accept DASH" = "Nájdite obchodníkov, ktorí akceptujú DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Nájsť obchodníkov, ktorí akceptujú Dash ako platbu."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Zistiť, kde za hotovosť kúpiť alebo predať DASH a iné kryptomeny."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Nájdite obchodníkov, ktorí akceptujú Dash, kde ho kúpiť a ako s ním zarobiť."; /* CrowdNode */ "First deposit should be more than %@" = "Prvý vklad by mal byť vyšší ako %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Ako potvrdiť svoju API Dash adresu "; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Identifikačné kľúče uzla Evolution"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "V procese…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Príjem"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Ukážka objednávky"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Prosím, zapíšte si ju"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Vyžiadať podrobnosti"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Úroveň zabezpečenia"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Ukázať na Upholde"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Vyberte mincu"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Predať"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Daňová kategória"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Testovací Dash nemá v skutočnom svete žiadnu hodnotu, ale môžete ho odosielať a prijímať s ostatnými používateľmi DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Testovací Dash je zadarmo a možno ho získať z takzvaného faucetu.\nSkopírujte adresu z prijímacej obrazovky vašej peňaženky a kliknutím na tlačidlo nižšie získate svoj Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Zobraziť frázu pre obnovenie"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Hlasovať za všetkých"; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index ca2ac382c..1efed565a 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Preveri v Upholdu"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index 27105ef96..b251868ec 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Preveri seznam skrivnih besed za obnovo denarnice"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 0e84f0ae6..d2d19265d 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index cde429ab5..4e7ea71fa 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Limit u prepoznavanju lica"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Molimo vas zapišite"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Vidi na Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 753aed654..946088f9e 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ändra"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index bfcd1ef2f..6db9a898d 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "การโอนเงินผ่านทางธนาคาร "; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "เป็นส่วนหนึ่งของ Dash มาสเตอร์โหนด กับ CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "การยกเลิกธุรกรรมนี้ไม่ได้ยกเลิกคำสั่งซื้อขาย คุณจะได้รับ Dash ในบัญชี Coinbase ของคุณในไม่ช้า"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "เปลี่ยนแปลง"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "เปลี่ยนเป็นระดับกลาง"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "ขีดจำกัด Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "ไม่สามารถเริ่มเซสชันการรับรองความถูกต้องได้"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "ค้นหาผู้ใช้บนเครือข่าย Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "ค้นหาร้านค้าที่ยอมรับ DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ค้นหาร้านค้าที่รับ Dash ซื้อได้ที่ไหนและวิธีสร้างรายได้จาก Dash"; +"Find merchants that accept DASH" = "ค้นหาร้านค้าที่ยอมรับ DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "ค้นหาร้าค้าที่ยอมรับการชำระเงินด้วย Dash "; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "ค้นหาสถานที่ซื้อหรือขาย Dash และ คริปโทเคเรนซีอื่น ๆ เป็นเงินสด"; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "ค้นหาร้านค้าที่รับ Dash ซื้อได้ที่ไหนและวิธีสร้างรายได้จาก Dash"; /* CrowdNode */ "First deposit should be more than %@" = "เงินฝากครั้งแรกควรมากกว่า %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "วิธียืนยันที่อยู่ API Dash ของคุณ"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "วิวัฒนาการรหัส Node ID"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "อยู่ในระหว่างการดำเนินงาน…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "รายได้"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "คำสั่งซื้อตัวอย่าง"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "ที่อยู่เจ้าของ"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "กรุณาเขียนลงไป"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "ขอรายละเอียด"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "เลเวลความปลอดภัย"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "เปิดดูที่ Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "เลือกเหรียญ"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "ขาย"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "หมวดภาษี"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash ไม่มีค่าใดๆ ในโลกแห่งความเป็นจริง แต่คุณสามารถส่งและรับกับผู้ใช้ DashPay Alpha คนอื่นๆ ได้"; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash นั้นฟรีและสามารถรับได้จากสิ่งที่เรียกว่า faucet\nคัดลอกที่อยู่จากหน้าจอรับของกระเป๋าเงินของคุณ และคลิกที่ปุ่มด้านล่างเพื่อรับ Dash ของคุณ"; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "ดูวลีกู้คืน"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "โหวตให้ทุกคน"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index fe4019990..06aa0cd3b 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Banka Havalesi"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "CrowdNode ile Dash Masternode'un parçası olun"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Bu işlemin iptal edilmesi işlem emrini iptal etmez. Kısa bir süre sonra Coinbase hesabınızda DASH alacaksınız."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Değiştir"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Orta Seviyeye Değiştir"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiti"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Kimlik doğrulama oturumu başlatılamadı"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Dash Ağında bir kullanıcı bulun"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "DASH'i kabul eden satıcıları bulun"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dash'i kabul eden satıcıları bulun. Nereden satın alınır ve onunla nasıl gelir elde edilir."; +"Find merchants that accept DASH" = "DASH'i kabul eden satıcıları bulun"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Dash'i ödeme olarak kabul eden satıcıları bulun."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "DASH ve diğer kripto para birimlerini nakit olarak nereden alıp satabileceğinizi bulun."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Dash'i kabul eden satıcıları bulun. Nereden satın alınır ve onunla nasıl gelir elde edilir."; /* CrowdNode */ "First deposit should be more than %@" = "İlk yatırılan para %@ değerinden fazla olmalıdır"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "API Dash adresinizi nasıl onaylarsınız?"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node Kimlik Anahtarları"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "İşlemde…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Gelir"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Sipariş Önizleme"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Sahip Adresi"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Lütfen bir yere yazın"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "İstek detayları"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Güvenlik Seviyesi"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Uphold'da Gör"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Koin seçin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sat"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Vergi Kategorisi"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash'in gerçek dünyada hiçbir değeri yoktur ancak onu diğer DashPay Alpha kullanıcılarıyla gönderip alabilirsiniz."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash ücretsizdir ve musluk denilen yerden elde edilebilir.\nCüzdanınızın Alma ekranından bir adres kopyalayın ve Dash'ınızı almak için aşağıdaki düğmeye tıklayın."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Herkese Oy Ver"; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index 9ccc47a4c..d77759f97 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Банківський переказ"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Стань частиною Dash Мастерноди з CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Скасування цієї операції не скасовує трейд. Незабаром ви отримаєте DASH на свій обліковий запис Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Змінити"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Зміна на проміжний"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Ліміт Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Не вдалося розпочати сеанс авторизації"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Знайдіть користувача в Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Знайдіть продавців, які приймають DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Знайти торговців, які приймають Dash, де їх купити та як з ними заробити."; +"Find merchants that accept DASH" = "Знайдіть продавців, які приймають DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Знайдіть місця де приймають DASH в якості оплати."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Знайдіть, де купити або продати DASH та інші криптовалюти за готівку."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Знайти торговців, які приймають Dash, де їх купити та як з ними заробити."; /* CrowdNode */ "First deposit should be more than %@" = "Перший депозит має бути більшим ніж %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "Як підтвердити свою API Dash адресу"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Ключі ідентифікатора вузла Evolution"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "В процесі..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Дохід"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Попередній перегляд замовлення"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Адреса власника"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Будь ласка, запишіть її"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Запросити деталі"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Рівень безпеки"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Переглянути на Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Виберіть монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Продати"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Податкова категорія"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Tестові Dash не мають жодної цінності в реальному світі, але ви можете надсилати й отримувати їх разом з іншими користувачами DashPay Alpha."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Тестові Dash є безкоштовними і їх можна отримати з так званого\"крану\".\nСкопіюйте адресу з екрана отримання вашого гаманця та натисніть кнопку нижче, щоб отримати свій Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Переглянути фразу відновлення"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Голосувати за всіх"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index a40934f37..3a863ccf3 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Thay đổi"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Giới hạn Face ID"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Tìm một người dùng trên mạng lưới Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Địa chỉ của chủ sở hữu"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Hãy vui lòng ghi xuống"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Mức độ bảo mật"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "Xem trên Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Xem cụm từ phục hồi"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index dbe96b738..f57315214 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "面容ID限制"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 267306408..4e86bd2cb 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "Bank Wire"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "Become part of a Dash Masternode with CrowdNode"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID 解鎖的限制"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "Failed to start auth session"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; +"Find merchants that accept DASH" = "Find merchants that accept DASH"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "Find merchants who accept Dash as payment."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "Find where to buy or sell DASH and other cryptocurrencies for cash."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "Find merchants that accept Dash, where to buy it and how to earn income with it."; /* CrowdNode */ "First deposit should be more than %@" = "First deposit should be more than %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "How to confirm your API Dash address"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "In process…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "Income"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "Request details"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "Security Level"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "See on Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "Tax Category"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Vote for All"; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index d83903248..0c8d79def 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "电汇"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "通过CrowdNode成为Dash主节点的一部分"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易无法撤销这笔交易订单. 您的Coinbase账户不久会将收到Dash."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "更改"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "改变到常规"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "脸部识别限制"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "无法启动身份验证会话"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "在Dash网络上查找用户"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "查找接受 DASH 支付的商家"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "寻找接受 Dash 的商家, 可以在哪里购买以及如何通过它获得收益."; +"Find merchants that accept DASH" = "查找接受 DASH 支付的商家"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "查找接受Dash支付方式的商户."; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "查找在哪里购买或出售Dash和其他加密货币以换取现金."; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "寻找接受 Dash 的商家, 可以在哪里购买以及如何通过它获得收益."; /* CrowdNode */ "First deposit should be more than %@" = "首次存款应超过 %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "如何确认您的API Dash地址"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution 节点 ID 私钥"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "正在进行..."; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "收入"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "订单预览"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "所有者地址"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "请将其写下来"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "申请的细节"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "安全级别"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "查看Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "选择币种"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "出售"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "税务种类"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash没有任何实际价值, 但您可以与其他 DashPay 测试用户进行收发."; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "Test Dash 是免费的, 可以通过阀门来获得.\n从您钱包的接收页面复制一个地址并点击下方按钮来获得您的 Dash."; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看助记词"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "投给所有"; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index cddf23ed1..9cf98180e 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -313,6 +313,9 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "電匯"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "通過 CrowdNode 成為達世幣主節點的一部分"; @@ -407,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易不會取消交易訂單。您很快就會在您的 Coinbase 帳戶中收到 DASH。"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "變更"; @@ -422,6 +431,9 @@ /* CoinJoin */ "Change to Intermediate" = "更改為中階"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; @@ -880,6 +892,9 @@ /* No comment provided by engineer. */ "Face ID limit" = "Face ID 解鎖的限制"; +/* No comment provided by engineer. */ +"Failed to load barcode" = "Failed to load barcode"; + /* Coinbase */ "Failed to start auth session" = "無法啟動身份驗證會話"; @@ -935,16 +950,16 @@ "Find a user on the Dash Network" = "在達世幣網絡上查找用戶"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "尋找接受達世幣付款的商家"; +"Find ATMs where you can buy or sell Dash." = "Find ATMs where you can buy or sell Dash."; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "尋找接受達世幣的商家、可以在哪裡購買以及如何透過它賺取收入。"; +"Find merchants that accept DASH" = "尋找接受達世幣付款的商家"; /* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "查找接受達世幣作為付款的商家。"; +"Find merchants that accept Dash payments." = "Find merchants that accept Dash payments."; /* No comment provided by engineer. */ -"Find where to buy or sell DASH and other cryptocurrencies for cash." = "查找在哪裡購買或出售達世幣和其他加密貨幣以換取現金。"; +"Find merchants that accept Dash, where to buy it and how to earn income with it." = "尋找接受達世幣的商家、可以在哪裡購買以及如何透過它賺取收入。"; /* CrowdNode */ "First deposit should be more than %@" = "首次存款應超過 %@"; @@ -1030,6 +1045,9 @@ /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; +/* No comment provided by engineer. */ +"Gift card purchase was rejected" = "Gift card purchase was rejected"; + /* DashSpend confirmation */ "Gift card total" = "Gift card total"; @@ -1084,6 +1102,9 @@ /* CrowdNode */ "How to confirm your API Dash address" = "如何確認您的 API 達世幣位址"; +/* No comment provided by engineer. */ +"How to use your gift card" = "How to use your gift card"; + /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution 節點 ID 金鑰"; @@ -1171,6 +1192,12 @@ /* CrowdNode Portal */ "In process…" = "進行中…"; +/* No comment provided by engineer. */ +"In store" = "In store"; + +/* No comment provided by engineer. */ +"In the payment section of your checkout, select \"gift card\" and enter your card number and pin." = "In the payment section of your checkout, select \"gift card\" and enter your card number and pin."; + /* No comment provided by engineer. */ "Income" = "收入"; @@ -1706,6 +1733,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "訂單預覽"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "所有者位址"; @@ -1868,6 +1898,9 @@ /* No comment provided by engineer. */ "Please write it down" = "請寫下來"; +/* No comment provided by engineer. */ +"Powered by" = "Powered by"; + /* No comment provided by engineer. */ "Preview" = "Preview"; @@ -2003,6 +2036,9 @@ /* No comment provided by engineer. */ "Request a username and say goodbye to numerical addresses" = "Request a username and say goodbye to numerical addresses"; +/* No comment provided by engineer. */ +"Request assistance and show the barcode on your screen for scanning." = "Request assistance and show the barcode on your screen for scanning."; + /* Voting */ "Request details" = "索取詳情"; @@ -2123,6 +2159,9 @@ /* No comment provided by engineer. */ "Security Level" = "安全等級"; +/* No comment provided by engineer. */ +"See how to use this gift card" = "See how to use this gift card"; + /* No comment provided by engineer. */ "See on Uphold" = "參見 Uphold"; @@ -2148,6 +2187,9 @@ /* Coinbase */ "Select the coin" = "選擇幣種"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "出售"; @@ -2365,11 +2407,14 @@ /* No comment provided by engineer. */ "Tax Category" = "稅種"; +/* No comment provided by engineer. */ +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + /* Terms & conditions */ "Terms & conditions" = "Terms & conditions"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "測試用的達世幣在現實世界中沒有任何價值,但您可以與其他 DashPay Alpha 用戶一起發送和接收它。"; +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is free and can be obtained from what is called a faucet."; /* No comment provided by engineer. */ "Test Dash is free and can be obtained from what is called a faucet.\nCopy an address from the Receive screen of your wallet and click on the button bellow to get your Dash." = "測試用的達世幣是免費的,可以從所謂的水龍頭獲得。\n從錢包的接收畫面複製位址,然後點擊下面的按鈕以獲取您的達世幣。"; @@ -2736,6 +2781,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看恢復詞組"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "給所有人投票"; diff --git a/Shared/Resources/SharedAssets.xcassets/Colors/Gray50.colorset/Contents.json b/Shared/Resources/SharedAssets.xcassets/Colors/Gray50.colorset/Contents.json new file mode 100644 index 000000000..4df7d0452 --- /dev/null +++ b/Shared/Resources/SharedAssets.xcassets/Colors/Gray50.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF6", + "red" : "0xF5" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +}