From d8fb3d14da1b4d9a293f23d5b68b6c4674e25c23 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Wed, 21 May 2025 23:23:19 +0800 Subject: [PATCH 1/8] fix: compact UI for SE 1st gen --- .../Enter Amount/ProvideAmountViewController.swift | 6 +++--- .../UI/Views/SharedViews/Keyboard/NumberKeyboard.swift | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift b/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift index 25e169044..406fdf659 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) @@ -107,10 +107,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) ]) } 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 From 2c051ece569f90db2cb32483a6d8f3ef4817797c Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Tue, 27 May 2025 19:54:46 +0700 Subject: [PATCH 2/8] feat: redeem gift card draft --- DashWallet.xcodeproj/project.pbxproj | 30 ++ .../Database/DatabaseConnection.swift | 2 +- .../Migrations/AddGiftCardsTable.swift | 38 ++ .../Explore Dash/Model/DAO/GiftCardsDAO.swift | 250 +++++++++++ .../Model/Entites/CTXSpendModels.swift | 45 +- .../Explore Dash/Model/Entites/GiftCard.swift | 69 +++ .../Services/CTXSpendEndpoint.swift | 2 + .../Models/Uphold/DWUpholdMainnetConstants.m | 1 - .../PointOfUseDetailsViewController.swift | 14 +- .../Views/DashSpend/DashSpendPayScreen.swift | 19 +- .../DashSpend/DashSpendPayViewModel.swift | 16 +- .../Views/DashSpend/GiftCardDetailsView.swift | 402 ++++++++++++++++++ .../DashSpend/GiftCardDetailsViewModel.swift | 203 +++++++++ .../Sources/UI/Home/HomeViewController.swift | 30 ++ .../Sources/UI/Home/Views/HomeView.swift | 27 ++ DashWallet/ar.lproj/Localizable.strings | 51 +++ DashWallet/bg.lproj/Localizable.strings | 51 +++ DashWallet/ca.lproj/Localizable.strings | 51 +++ DashWallet/cs.lproj/Localizable.strings | 51 +++ DashWallet/da.lproj/Localizable.strings | 51 +++ DashWallet/de.lproj/Localizable.strings | 51 +++ DashWallet/el.lproj/Localizable.strings | 51 +++ DashWallet/en.lproj/Localizable.strings | 51 +++ DashWallet/eo.lproj/Localizable.strings | 51 +++ DashWallet/es.lproj/Localizable.strings | 51 +++ DashWallet/et.lproj/Localizable.strings | 51 +++ DashWallet/fa.lproj/Localizable.strings | 51 +++ DashWallet/fi.lproj/Localizable.strings | 51 +++ DashWallet/fil.lproj/Localizable.strings | 51 +++ DashWallet/fr.lproj/Localizable.strings | 51 +++ DashWallet/hr.lproj/Localizable.strings | 51 +++ DashWallet/hu.lproj/Localizable.strings | 51 +++ DashWallet/id.lproj/Localizable.strings | 51 +++ DashWallet/it.lproj/Localizable.strings | 51 +++ DashWallet/ja.lproj/Localizable.strings | 51 +++ DashWallet/ko.lproj/Localizable.strings | 51 +++ DashWallet/mk.lproj/Localizable.strings | 51 +++ DashWallet/ms.lproj/Localizable.strings | 51 +++ DashWallet/nb.lproj/Localizable.strings | 51 +++ DashWallet/nl.lproj/Localizable.strings | 51 +++ DashWallet/pl.lproj/Localizable.strings | 51 +++ DashWallet/pt.lproj/Localizable.strings | 51 +++ DashWallet/ro.lproj/Localizable.strings | 51 +++ DashWallet/ru.lproj/Localizable.strings | 51 +++ DashWallet/sk.lproj/Localizable.strings | 51 +++ DashWallet/sl.lproj/Localizable.strings | 51 +++ DashWallet/sl_SI.lproj/Localizable.strings | 51 +++ DashWallet/sq.lproj/Localizable.strings | 51 +++ DashWallet/sr.lproj/Localizable.strings | 51 +++ DashWallet/sv.lproj/Localizable.strings | 51 +++ DashWallet/th.lproj/Localizable.strings | 51 +++ DashWallet/tr.lproj/Localizable.strings | 51 +++ DashWallet/uk.lproj/Localizable.strings | 51 +++ DashWallet/vi.lproj/Localizable.strings | 51 +++ DashWallet/zh-Hans.lproj/Localizable.strings | 51 +++ .../zh-Hant-TW.lproj/Localizable.strings | 51 +++ DashWallet/zh.lproj/Localizable.strings | 51 +++ DashWallet/zh_TW.lproj/Localizable.strings | 51 +++ 58 files changed, 3314 insertions(+), 27 deletions(-) create mode 100644 DashWallet/Sources/Infrastructure/Database/Migrations/AddGiftCardsTable.swift create mode 100644 DashWallet/Sources/Models/Explore Dash/Model/DAO/GiftCardsDAO.swift create mode 100644 DashWallet/Sources/Models/Explore Dash/Model/Entites/GiftCard.swift create mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift create mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index bc674a480..c4556c8fc 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -698,6 +698,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 */; }; @@ -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 = ""; }; @@ -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 */, ); @@ -6073,6 +6091,8 @@ 7545ED552DA91AC80075F45C /* DashSpend */ = { isa = PBXGroup; children = ( + 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */, + 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */, 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */, 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */, 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */, @@ -8642,6 +8662,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 +8704,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 */, @@ -8884,6 +8907,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 */, @@ -8998,6 +9022,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 */, @@ -9217,6 +9242,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 */, @@ -9645,6 +9671,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 +9770,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 */, @@ -9922,6 +9951,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/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..48e0017f1 100644 --- a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift @@ -36,22 +36,39 @@ 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] + + 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 + } } 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..9fa80500f 100644 --- a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift @@ -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/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/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift index 0f9132360..090de5a8e 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift @@ -225,7 +225,19 @@ 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?.navigationController?.popToRootViewController(animated: true) + + // Show gift card details after navigation completes + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + NotificationCenter.default.post( + name: .showGiftCardDetails, + object: nil, + userInfo: ["txId": txId] + ) + } + } ) self.navigationController?.pushViewController(hostingController, animated: true) diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift index 8b1e259ac..9e869adaa 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift @@ -29,12 +29,15 @@ struct DashSpendPayScreen: View { @State private var showCustomErrorDialog = false @State private var errorMessage = "" @State private var errorTitle = "" + @State private var successTxId: Data? = nil + 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 { @@ -243,15 +246,15 @@ struct DashSpendPayScreen: View { private func purchaseGiftCard() { Task { do { - try await viewModel.purchaseGiftCardAndPay() + let txId = try await viewModel.purchaseGiftCardAndPay() - // Close the confirmation dialog and show success toast + // Close the confirmation dialog and dismiss the screen showConfirmationDialog = false - showConfirmToast = true - DispatchQueue.main.asyncAfter(deadline: .now() + 3) { - showConfirmToast = false - presentationMode.wrappedValue.dismiss() - } + successTxId = txId + + // Navigate back to home and show gift card details + 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..9210ee805 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift @@ -118,7 +118,7 @@ class DashSpendPayViewModel: NSObject, ObservableObject { } } - func purchaseGiftCardAndPay() async throws { + func purchaseGiftCardAndPay() async throws -> Data { isProcessingPayment = true defer { isProcessingPayment = false } @@ -145,6 +145,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) + + return transaction.txHashData } func isUserSignedIn() -> Bool { @@ -254,6 +256,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: nil, // TODO: get merchant URL from API + 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..4ca994dcf --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift @@ -0,0 +1,402 @@ +// +// 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 + + init(txId: Data) { + _viewModel = StateObject(wrappedValue: GiftCardDetailsViewModel(txId: txId)) + } + + var body: some View { + ScrollView { + VStack(spacing: 0) { + // Merchant header + HStack(spacing: 15) { + ZStack(alignment: .bottomTrailing) { + if let iconUrl = viewModel.merchantIconUrl { + WebImage(url: URL(string: iconUrl)) + .resizable() + .indicator(.activity) + .transition(.fade(duration: 0.3)) + .scaledToFit() + .frame(width: 48, height: 48) + .clipShape(Circle()) + } else { + Image(systemName: "gift.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 48, height: 48) + .foregroundColor(.dashBlue) + } + + // Secondary icon + if viewModel.merchantIconUrl != nil { + Image(systemName: "gift.fill") + .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.merchantName) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + if let date = viewModel.purchaseDate { + Text(date, formatter: dateFormatter) + .font(.footnote) + .foregroundColor(.tertiaryText) + } + } + + Spacer() + } + .padding(.horizontal, 25) + .padding(.top, 20) + + // Gift card info container + VStack(spacing: 0) { + // Barcode section + if let barcodeImage = viewModel.barcodeImage { + Image(uiImage: barcodeImage) + .resizable() + .scaledToFit() + .frame(height: 108) + .padding(.horizontal, 20) + .padding(.top, 15) + } else { + ZStack { + RoundedRectangle(cornerRadius: 10) + .fill(Color.gray) + .frame(height: 108) + + if viewModel.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .scaleEffect(0.8) + } else if viewModel.loadingError != nil { + Text(NSLocalizedString("Failed to load barcode", comment: "")) + .font(.footnote) + .foregroundColor(.systemRed) + } else { + Text(NSLocalizedString("Barcode placeholder", comment: "")) + .font(.caption) + .foregroundColor(.tertiaryText) + } + } + .padding(.horizontal, 20) + .padding(.top, 15) + } + + // Original purchase value + HStack { + Text(NSLocalizedString("Original Purchase Value", comment: "")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(viewModel.formattedPrice) + .font(.caption) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 20) + .padding(.top, 20) + + // Check current balance link + if viewModel.merchantUrl != nil { + Button(action: { + if let url = URL(string: viewModel.merchantUrl!) { + UIApplication.shared.open(url) + } + }) { + Text(NSLocalizedString("Check current balance", comment: "")) + .font(.footnote) + .fontWeight(.medium) + .foregroundColor(.dashBlue) + } + .frame(maxWidth: .infinity, alignment: .trailing) + .padding(.horizontal, 20) + .padding(.top, 8) + } + + // Card number and PIN + if viewModel.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .padding(.vertical, 40) + } else if let error = viewModel.loadingError { + VStack(spacing: 10) { + Text(error.localizedDescription) + .font(.caption) + .foregroundColor(.systemRed) + .multilineTextAlignment(.center) + .padding(.horizontal, 20) + } + .padding(.vertical, 40) + } else { + VStack(spacing: 22) { + // Card number + if let cardNumber = viewModel.cardNumber { + HStack { + Text(NSLocalizedString("Card Number", comment: "")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardNumber) + .font(.caption) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardNumber + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .frame(width: 20, height: 20) + .foregroundColor(.dashBlue) + } + .frame(width: 32, height: 40) + } + .padding(.horizontal, 20) + } + + // Card PIN + if let cardPin = viewModel.cardPin { + HStack { + Text(NSLocalizedString("Card PIN", comment: "")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardPin) + .font(.caption) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardPin + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .frame(width: 20, height: 20) + .foregroundColor(.dashBlue) + } + .frame(width: 32, height: 40) + } + .padding(.horizontal, 20) + } + } + .padding(.top, 22) + .padding(.bottom, 15) + } + } + .background(Color.secondaryBackground) + .cornerRadius(10) + .padding(.horizontal, 15) + .padding(.top, 20) + + // View transaction details button + Button(action: { + navigateToTransactionDetails() + }) { + HStack { + Text(NSLocalizedString("View transaction details", comment: "")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + Spacer() + + Image("greyarrow") + .resizable() + .scaledToFit() + .frame(width: 12, height: 12) + } + .padding(.horizontal, 15) + .padding(.vertical, 17) + .background(Color.dashBlue) + .cornerRadius(10) + } + .padding(.horizontal, 15) + .padding(.top, 15) + + // How to use button + if !showHowToUse { + Button(action: { + withAnimation { + showHowToUse = true + } + viewModel.logHowToUse() + }) { + Text(NSLocalizedString("See how to use this gift card", comment: "")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.dashBlue) + } + .padding(.top, 20) + } else { + // How to use expanded content + VStack(alignment: .leading, spacing: 30) { + Text(NSLocalizedString("How to use your gift card", comment: "")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.top, 20) + + // Self-checkout + HStack(alignment: .top, spacing: 25) { + Image(systemName: "qrcode") + .resizable() + .scaledToFit() + .frame(width: 24, height: 24) + .foregroundColor(.dashBlue) + + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Self-checkout", comment: "")) + .font(.subtitle1) + .foregroundColor(.primaryText) + + Text(NSLocalizedString("Request assistance and show the barcode on your screen for scanning.", comment: "")) + .font(.body2) + .foregroundColor(.tertiaryText) + .fixedSize(horizontal: false, vertical: true) + } + } + + // In store + HStack(alignment: .top, spacing: 25) { + Image(systemName: "storefront") + .resizable() + .scaledToFit() + .frame(width: 24, height: 24) + .foregroundColor(.dashBlue) + + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("In store", comment: "")) + .font(.subtitle1) + .foregroundColor(.primaryText) + + Text(NSLocalizedString("Tell the cashier that you'd like to pay with a gift card and share the card number and pin.", comment: "")) + .font(.body2) + .foregroundColor(.tertiaryText) + .fixedSize(horizontal: false, vertical: true) + } + } + + // Online + HStack(alignment: .top, spacing: 25) { + Image(systemName: "globe") + .resizable() + .scaledToFit() + .frame(width: 24, height: 24) + .foregroundColor(.dashBlue) + + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Online", comment: "")) + .font(.subtitle1) + .foregroundColor(.primaryText) + + Text(NSLocalizedString("In the payment section of your checkout, select \"gift card\" and enter your card number and pin.", comment: "")) + .font(.body2) + .foregroundColor(.tertiaryText) + .fixedSize(horizontal: false, vertical: true) + } + } + } + .padding(.horizontal, 15) + .padding(.bottom, 35) + .background(Color.secondaryBackground) + .cornerRadius(10) + .padding(.horizontal, 15) + .padding(.top, 20) + } + + // Powered by CTX + VStack(spacing: 8) { + Text(NSLocalizedString("Powered by", comment: "")) + .font(.callout) + .foregroundColor(.tertiaryText) + + Text("CTX") + .font(.system(size: 18, weight: .bold)) + .foregroundColor(.dashBlue) + } + .padding(.top, 30) + .padding(.bottom, 40) + } + } + .background(Color.primaryBackground) + .onAppear { + viewModel.startObserving() + } + .onDisappear { + viewModel.stopObserving() + } + } + + private func navigateToTransactionDetails() { +// // Navigate to transaction details +// if let topVC = UIApplication.shared.topViewController() { +// let tx = DWEnvironment.sharedInstance().currentWallet.allTransactions.first { transaction in +// guard let tx = transaction as? DSTransaction else { return false } +// return tx.txHashData == viewModel.txId +// } +// +// if let transaction = tx as? DSTransaction { +// let controller = TXDetailViewController() +// controller.transaction = transaction +// navigationController = UINavigationController(rootViewController: controller) +// navigationController?.isModalInPresentation = true +// topVC.present(navigationController!, animated: true) +// } +// } + } + + private var dateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM dd, yyyy 'at' h:mm a" + return formatter + } +} + +extension Notification.Name { + static let showGiftCardDetails = Notification.Name("showGiftCardDetails") +} 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..ac0ee82a3 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift @@ -0,0 +1,203 @@ +// +// 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 +import CoreImage.CIFilterBuiltins + +@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 merchantName: String = "" + @Published private(set) var merchantIconUrl: String? = nil + @Published private(set) var merchantUrl: String? = nil + @Published private(set) var formattedPrice: String = "$0.00" + @Published private(set) var cardNumber: String? = nil + @Published private(set) var cardPin: String? = nil + @Published private(set) var barcodeImage: UIImage? = nil + @Published private(set) var purchaseDate: Date? = nil + @Published private(set) var isLoadingCardDetails: Bool = false + @Published private(set) var loadingError: Error? = nil + + private let currencyFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .currency + formatter.currencyCode = "USD" + return formatter + }() + + init(txId: Data) { + self.txId = txId + loadTransactionDate() + } + + 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.merchantName = card.merchantName + self.merchantUrl = card.merchantUrl + self.formattedPrice = self.currencyFormatter.string(from: card.price as NSDecimalNumber) ?? "$0.00" + self.cardNumber = card.number + self.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() + } + + func logHowToUse() { + // TODO: Log analytics event + DSLogger.log("DashSpend: User tapped 'How to use' for gift card") + } + + private func loadTransactionDate() { + // Get transaction date + if let tx = DWEnvironment.sharedInstance().currentWallet.allTransactions.first(where: { transaction in + return transaction.txHashData == txId + }) { + purchaseDate = Date(timeIntervalSince1970: TimeInterval(tx.timestamp)) + } + } + + private func startTicker() { + guard tickerTimer == nil else { return } + + isLoadingCardDetails = true + 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 + isLoadingCardDetails = false + retryCount = 0 + } + + private func fetchGiftCardInfo() async { + guard let giftCard = await giftCardsDAO.get(byTxId: txId), + let paymentId = giftCard.note, + ctxSpendService.isUserSignedIn else { + stopTicker() + return + } + + do { + let response = try await ctxSpendService.getGiftCardByTxid(txid: txId.hexEncodedString()) + + 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": + loadingError = CTXSpendError.customError( + NSLocalizedString("Gift card purchase was rejected", comment: "") + ) + stopTicker() + + default: + // Keep polling for other statuses + break + } + } catch { + retryCount += 1 + if retryCount >= maxRetries { + 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 = 3.0 + let transformedImage = outputImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY)) + + let context = CIContext() + if let cgImage = context.createCGImage(transformedImage, from: transformedImage.extent) { + barcodeImage = UIImage(cgImage: cgImage) + } + } +} diff --git a/DashWallet/Sources/UI/Home/HomeViewController.swift b/DashWallet/Sources/UI/Home/HomeViewController.swift index 47aea95ab..2b03ebf91 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController.swift @@ -209,6 +209,27 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { present(nvc, animated: true, completion: nil) } + private func showGiftCardDetails(txId: Data) { + let giftCardDetailsView = GiftCardDetailsView(txId: txId) + let hostingController = UIHostingController(rootView: + BottomSheet(title: NSLocalizedString("Gift Card Details", comment: ""), showBackButton: .constant(false)) { + giftCardDetailsView + } + .background(Color.primaryBackground) + ) + + // Configure bottom sheet presentation + if #available(iOS 15.0, *) { + if let sheet = hostingController.sheetPresentationController { + sheet.detents = [.large()] + sheet.prefersGrabberVisible = true + sheet.prefersScrollingExpandsWhenScrolledToEdge = false + } + } + + present(hostingController, animated: true, completion: nil) + } + private func configureObservers() { viewModel.$showTimeSkewAlertDialog .sink { [weak self] showTimeSkew in @@ -235,6 +256,15 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { self?.viewModel.reclassifyTransactionShown(isShown: true) } .store(in: &cancellableBag) + + // Observe gift card purchase completion + NotificationCenter.default.publisher(for: .showGiftCardDetails) + .compactMap { $0.userInfo?["txId"] as? Data } + .receive(on: DispatchQueue.main) + .sink { [weak self] txId in + self?.showGiftCardDetails(txId: txId) + } + .store(in: &cancellableBag) } private func showTimeSkewDialog(diffSeconds: Int64, coinjoin: Bool) { diff --git a/DashWallet/Sources/UI/Home/Views/HomeView.swift b/DashWallet/Sources/UI/Home/Views/HomeView.swift index 273bbce1e..0a270e0a2 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeView.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeView.swift @@ -158,6 +158,14 @@ extension HomeView: HomeHeaderViewDelegate { } } +extension HomeView { + func showGiftCardDetails(txId: Data) { + // This will be called from the presenting controller + // Need to pass it to HomeViewContent + // TODO + } +} + struct TxPreviewModel: Identifiable, Equatable { var id: String var title: String @@ -181,6 +189,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 +303,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 @@ -434,6 +450,17 @@ struct HomeViewContent: View { #endif } +struct GiftCardDetailsSheet: View { + var txId: Data + + var body: some View { + BottomSheet(title: NSLocalizedString("Gift Card Details", comment: ""), showBackButton: .constant(false)) { + GiftCardDetailsView(txId: txId) + } + .background(Color.primaryBackground) + } +} + struct TransactionDetailsSheet: View { @State private var showBackButton: Bool = false @State private var backNavigationRequested: Bool = false diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index db510869d..daf5bdb3e 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "معاينة الطلب"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "اختر عملة "; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "بيع"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..752898064 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес на собственика"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..7b3b1e45f 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..162abda0a 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Prodej"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..8edf29423 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index d7e44f15e..8efa81e93 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."; +/* No comment provided by engineer. */ +"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."; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gutscheinkarte"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vorschau bestellen"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Besitzer-Adresse"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Wähle einen Coin aus"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Verkaufen"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..ea7870c1d 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 σύντομα."; +/* No comment provided by engineer. */ +"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" = "Αποτυχία εκκίνησης περιόδου λειτουργίας εξουσιοδότησης"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Δωροκάρτα"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Προεπισκόπηση παραγγελίας"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Επιλέξτε το νόμισμα"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Πωλήστε"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..ea5208c09 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..3af9ac636 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..1966ea63f 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Tarjeta de regalo"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vista previa del pedido"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Dirección de Propietario"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Selecciona la moneda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vender"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..9a5b19831 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..dde9360c0 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "پیش‌نمایش سفارش"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "یک رمزارز انتخاب کنید"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "فروش"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..a31398d4c 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..f9a7db627 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Preview ng Order"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Address ng may-ari"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Piliin ang barya"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "magbenta"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..1ac48792d 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Carte-cadeau"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Prévisualisation de la commande"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Adresse du propriétaire"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Choisir les pièces"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vendre"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..c63031457 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..0d3d6ff61 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..9f7042a9d 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Kartu ucapan"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Pratinjau Pesanan"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Alamat pemilik"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Pilih koin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Jual"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..74be7d4e8 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Anteprima dell'ordine"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Indirizzo del proprietario"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Seleziona una coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vendi"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..708bd54fb 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が入金されます。"; +/* No comment provided by engineer. */ +"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" = "認証セッションの開始に失敗しました"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "ギフトカード"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "注文プレビュー"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "所有者の諸々のキー"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "通貨を選択する"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "売却"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..c8bbcf410 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를 받게 됩니다."; +/* No comment provided by engineer. */ +"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" = "승인 세션을 시작하는 데 실패하였습니다"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "기프트 카드"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "주문 미리보기"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "소유자 주소"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "코인 선택"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "매도"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..81bf4d939 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..e2d362be7 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..d5a2861b1 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..f7dc28961 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Cadeaukaart"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Voorbeeld bestelling"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Adres eigenaar"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Selecteer de munt"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Verkoop"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..9da698dc2 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."; +/* No comment provided by engineer. */ +"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."; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Karta podarunkowa"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Podgląd Zamówienia"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Adres Właściciela"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Wybierz monetę"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sprzedawaj"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..cd5401823 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Vale-presente"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Visualização do pedido"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Endereço do Proprietário"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Selecione a moeda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Vender"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..2a0540aab 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..810dbe570 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."; +/* No comment provided by engineer. */ +"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" = "Не удалось запустить сеанс авторизации"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарочный сертификат"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Просмотр заказа"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес владельца"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Выбрать монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Продать"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..3d1cb15eb 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Darčeková karta"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Ukážka objednávky"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Vyberte mincu"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Predať"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..609030259 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..44120c8ea 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..08dc25ce8 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..ddbf189e2 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..1eebae034 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..a99fdc33f 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 ของคุณในไม่ช้า"; +/* No comment provided by engineer. */ +"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" = "ไม่สามารถเริ่มเซสชันการรับรองความถูกต้องได้"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "บัตรของขวัญ"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "คำสั่งซื้อตัวอย่าง"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "ที่อยู่เจ้าของ"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "เลือกเหรียญ"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "ขาย"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..f4426c4e8 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."; +/* No comment provided by engineer. */ +"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ı"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Hediye Kartı"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Sipariş Önizleme"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Sahip Adresi"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Koin seçin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sat"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..a9e6fc103 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."; +/* No comment provided by engineer. */ +"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" = "Не вдалося розпочати сеанс авторизації"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарункова карта"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Попередній перегляд замовлення"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Адреса власника"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Виберіть монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Продати"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..fafb0a4c6 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Địa chỉ của chủ sở hữu"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..08c32814a 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..ee0765a75 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."; +/* No comment provided by engineer. */ +"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"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..fdbaa8078 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."; +/* No comment provided by engineer. */ +"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" = "无法启动身份验证会话"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "礼品卡"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "订单预览"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "所有者地址"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "选择币种"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "出售"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,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..7507fc44b 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。"; +/* No comment provided by engineer. */ +"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" = "無法啟動身份驗證會話"; @@ -1027,9 +1042,15 @@ /* Explore Dash: Filters */ "Gift Card" = "禮物卡"; +/* No comment provided by engineer. */ +"Gift Card Details" = "Gift Card Details"; + /* 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 +1105,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 +1195,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 +1736,9 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "訂單預覽"; +/* No comment provided by engineer. */ +"Original Purchase Value" = "Original Purchase Value"; + /* No comment provided by engineer. */ "Owner Address" = "所有者位址"; @@ -1868,6 +1901,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 +2039,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 +2162,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 +2190,9 @@ /* Coinbase */ "Select the coin" = "選擇幣種"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "出售"; @@ -2365,6 +2410,9 @@ /* 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"; @@ -2736,6 +2784,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看恢復詞組"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "給所有人投票"; From 7888d6e0a77c796d39695da03f590714be9e05e0 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Wed, 28 May 2025 12:32:27 +0700 Subject: [PATCH 3/8] fix: gift card model --- .../Model/Entites/CTXSpendModels.swift | 15 ++++++++++++++- .../Views/DashSpend/DashSpendPayScreen.swift | 6 ------ .../Views/DashSpend/DashSpendPayViewModel.swift | 11 ----------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift index 48e0017f1..87e7b1123 100644 --- a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift @@ -47,11 +47,18 @@ struct GiftCardResponse: Codable { let paymentId: String let percentDiscount: String let rate: String - let redeemUrl: 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? + enum CodingKeys: String, CodingKey { case id case status @@ -68,6 +75,12 @@ struct GiftCardResponse: Codable { case fiatAmount = "paymentFiatAmount" case fiatCurrency = "paymentFiatCurrency" case paymentUrls + case cardFiatAmount + case cardFiatCurrency + case userId + case merchantName + case userEmail + case created } } diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift index 9e869adaa..250df4aa3 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift @@ -29,7 +29,6 @@ struct DashSpendPayScreen: View { @State private var showCustomErrorDialog = false @State private var errorMessage = "" @State private var errorTitle = "" - @State private var successTxId: Data? = nil let onPurchaseSuccess: ((Data) -> Void)? init(merchant: ExplorePointOfUse, justAuthenticated: Bool = false, onPurchaseSuccess: ((Data) -> Void)? = nil) { @@ -247,12 +246,7 @@ struct DashSpendPayScreen: View { Task { do { let txId = try await viewModel.purchaseGiftCardAndPay() - - // Close the confirmation dialog and dismiss the screen showConfirmationDialog = false - successTxId = txId - - // Navigate back to home and show gift card details presentationMode.wrappedValue.dismiss() onPurchaseSuccess?(txId) } catch let error as CTXSpendError { diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift index 9210ee805..9acb7a6ca 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift @@ -124,17 +124,6 @@ class DashSpendPayViewModel: NSObject, ObservableObject { 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 { throw CTXSpendError.paymentProcessingError("No payment URL received") From db0fc1020389a3a27648fc0434c21eb832f61093 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Wed, 28 May 2025 13:02:51 +0700 Subject: [PATCH 4/8] chore: refactor Explore VCs to Swift --- DashWallet.xcodeproj/project.pbxproj | 48 ++- .../UI/CrowdNode/Views/CrowdNodeAPYView.swift | 1 - ...loreTestnetViewController+DashWallet.swift | 47 --- .../DWExploreTestnetViewController.h | 38 --- .../DWExploreTestnetViewController.m | 153 ---------- .../Explore Dash/ExploreViewController.swift | 177 ++++++++++++ .../Explore Dash/Views/DWExploreHeaderView.h | 33 --- .../Explore Dash/Views/DWExploreHeaderView.m | 114 -------- .../Views/DWExploreTestnetContentsView.h | 41 --- .../Views/DWExploreTestnetContentsView.m | 273 ------------------ .../Views/ExploreContentsView.swift | 235 +++++++++++++++ .../Views/ExploreHeaderView.swift | 89 ++++++ .../Home/HomeViewController+Shortcuts.swift | 8 +- .../UI/Main/MainTabbarController.swift | 6 +- .../UI/Menu/Main/DWMainMenuViewController.m | 9 +- DashWallet/ar.lproj/Localizable.strings | 8 +- DashWallet/bg.lproj/Localizable.strings | 8 +- DashWallet/ca.lproj/Localizable.strings | 8 +- DashWallet/cs.lproj/Localizable.strings | 8 +- DashWallet/da.lproj/Localizable.strings | 8 +- DashWallet/dashwallet-Bridging-Header.h | 1 - DashWallet/de.lproj/Localizable.strings | 8 +- DashWallet/el.lproj/Localizable.strings | 8 +- DashWallet/en.lproj/Localizable.strings | 8 +- DashWallet/eo.lproj/Localizable.strings | 8 +- DashWallet/es.lproj/Localizable.strings | 8 +- DashWallet/et.lproj/Localizable.strings | 8 +- DashWallet/fa.lproj/Localizable.strings | 8 +- DashWallet/fi.lproj/Localizable.strings | 8 +- DashWallet/fil.lproj/Localizable.strings | 8 +- DashWallet/fr.lproj/Localizable.strings | 8 +- DashWallet/hr.lproj/Localizable.strings | 8 +- DashWallet/hu.lproj/Localizable.strings | 8 +- DashWallet/id.lproj/Localizable.strings | 8 +- DashWallet/it.lproj/Localizable.strings | 8 +- DashWallet/ja.lproj/Localizable.strings | 8 +- DashWallet/ko.lproj/Localizable.strings | 8 +- DashWallet/mk.lproj/Localizable.strings | 8 +- DashWallet/ms.lproj/Localizable.strings | 8 +- DashWallet/nb.lproj/Localizable.strings | 8 +- DashWallet/nl.lproj/Localizable.strings | 8 +- DashWallet/pl.lproj/Localizable.strings | 8 +- DashWallet/pt.lproj/Localizable.strings | 8 +- DashWallet/ro.lproj/Localizable.strings | 8 +- DashWallet/ru.lproj/Localizable.strings | 8 +- DashWallet/sk.lproj/Localizable.strings | 8 +- DashWallet/sl.lproj/Localizable.strings | 8 +- DashWallet/sl_SI.lproj/Localizable.strings | 8 +- DashWallet/sq.lproj/Localizable.strings | 8 +- DashWallet/sr.lproj/Localizable.strings | 8 +- DashWallet/sv.lproj/Localizable.strings | 8 +- DashWallet/th.lproj/Localizable.strings | 8 +- DashWallet/tr.lproj/Localizable.strings | 8 +- DashWallet/uk.lproj/Localizable.strings | 8 +- DashWallet/vi.lproj/Localizable.strings | 8 +- DashWallet/zh-Hans.lproj/Localizable.strings | 8 +- .../zh-Hant-TW.lproj/Localizable.strings | 8 +- DashWallet/zh.lproj/Localizable.strings | 8 +- DashWallet/zh_TW.lproj/Localizable.strings | 8 +- 59 files changed, 702 insertions(+), 915 deletions(-) delete mode 100644 DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController+DashWallet.swift delete mode 100644 DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.h delete mode 100644 DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.m create mode 100644 DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift delete mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h delete mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m delete mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h delete mode 100644 DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m create mode 100644 DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift create mode 100644 DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index c4556c8fc..524cf454d 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 */; }; @@ -610,6 +605,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 */; }; @@ -1235,7 +1236,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 */; }; @@ -1261,7 +1261,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 */; }; @@ -1395,7 +1394,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 */; }; @@ -2370,12 +2368,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 = ""; }; @@ -2479,7 +2471,6 @@ 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 = ""; }; @@ -2502,6 +2493,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 = ""; }; @@ -5727,9 +5721,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"; @@ -5820,10 +5812,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 = ""; @@ -8524,6 +8514,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 */, @@ -8762,6 +8753,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 */, @@ -8788,7 +8780,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 */, @@ -8816,7 +8807,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 */, @@ -8984,7 +8974,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 */, @@ -9068,7 +9057,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 */, @@ -9090,6 +9078,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 */, @@ -9550,7 +9539,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 */, @@ -9594,7 +9582,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 */, @@ -9810,7 +9797,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 */, @@ -9846,6 +9832,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 */, @@ -9861,6 +9848,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 */, @@ -9871,7 +9859,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 */, @@ -9894,6 +9881,7 @@ 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 */, 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/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..19c3fb685 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift @@ -0,0 +1,177 @@ +// +// 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 exploreTestnetViewControllerShowSendPayment(_ controller: ExploreViewController) + func exploreTestnetViewControllerShowReceivePayment(_ controller: ExploreViewController) +} + +// 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() + + // Contents + 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.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) + ]) + } + + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + // MARK: - Actions + + @objc private func showAtms() { + let vc = AtmListViewController() + vc.payWithDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreTestnetViewControllerShowReceivePayment(self) + } + vc.sellDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreTestnetViewControllerShowSendPayment(self) + } + navigationController?.pushViewController(vc, animated: true) + } + + @objc private func showStakingIfSynced() { + if SyncingActivityMonitor.shared.state == .syncDone { + let vc = CrowdNodeModelObjcWrapper.getRootVC() + navigationController?.pushViewController(vc, animated: true) + } else { + notifyChainSyncing() + } + } + + @objc 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) + } + + @objc private func buttonAction() { + let account = DWEnvironment.sharedInstance().currentAccount + + guard let paymentAddress = account.receiveAddress else { + return + } + + UIPasteboard.general.string = paymentAddress + if let url = URL(string: "https://testnet-faucet.dash.org/") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + } + + // MARK: - Where to Spend + + @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) + 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) + } + + navigationController?.pushViewController(vc, animated: true) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h deleted file mode 100644 index 4f15da679..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h +++ /dev/null @@ -1,33 +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 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 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/ExploreContentsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift new file mode 100644 index 000000000..7df45b425 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift @@ -0,0 +1,235 @@ +// +// 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 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 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) + + 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/HomeViewController+Shortcuts.swift b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift index e48ded7a2..de14e91d0 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift @@ -17,7 +17,7 @@ import UIKit -extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTestnetViewControllerDelegate { +extension HomeViewController: DWLocalCurrencyViewControllerDelegate, ExploreViewControllerDelegate { func performAction(for action: ShortcutAction, sender: UIView?) { switch action.type { @@ -116,7 +116,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 +155,11 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTe // MARK: - DWExploreTestnetViewControllerDelegate - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { + func exploreTestnetViewControllerShowSendPayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.pay.rawValue) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreTestnetViewControllerShowReceivePayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.receive.rawValue) } } diff --git a/DashWallet/Sources/UI/Main/MainTabbarController.swift b/DashWallet/Sources/UI/Main/MainTabbarController.swift index a21dc8afe..fe7f51cd3 100644 --- a/DashWallet/Sources/UI/Main/MainTabbarController.swift +++ b/DashWallet/Sources/UI/Main/MainTabbarController.swift @@ -428,12 +428,12 @@ extension MainTabbarController: UITabBarControllerDelegate { // MARK: DWExploreTestnetViewControllerDelegate -extension MainTabbarController: DWExploreTestnetViewControllerDelegate { - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { +extension MainTabbarController: ExploreViewControllerDelegate { + func exploreTestnetViewControllerShowSendPayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.pay) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreTestnetViewControllerShowReceivePayment(_ 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..ccae48321 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,11 +248,11 @@ - (void)settingsMenuViewControllerDidRescanBlockchain:(DWSettingsMenuViewControl } #pragma mark - DWExploreTestnetViewControllerDelegate -- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreTestnetViewController *)controller { +- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Pay]; } -- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreTestnetViewController *)controller { +- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Receive]; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index daf5bdb3e..47cbdb6ca 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 752898064..5ce431de3 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index 7b3b1e45f..b90756951 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 162abda0a..34bfa91a9 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index 8edf29423..ec6b692d2 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/dashwallet-Bridging-Header.h b/DashWallet/dashwallet-Bridging-Header.h index c5d9e55b7..daff20c1e 100644 --- a/DashWallet/dashwallet-Bridging-Header.h +++ b/DashWallet/dashwallet-Bridging-Header.h @@ -148,7 +148,6 @@ static const bool _SNAPSHOT = 0; #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 8efa81e93..568e19444 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -950,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."; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index ea7870c1d..b34c78f54 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -950,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 %@" = "Η πρώτη κατάθεση πρέπει να είναι μεγαλύτερη από %@ "; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index ea5208c09..56c0047de 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index 3af9ac636..2d7d9df85 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 1966ea63f..978480a01 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index 9a5b19831..830671d6c 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index dde9360c0..a9b43a80a 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index a31398d4c..8cc16ebd9 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index f9a7db627..12dd4cf3f 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 1ac48792d..86d78f72c 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -950,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 à %@"; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index c63031457..c20081b03 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index 0d3d6ff61..85a59a513 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 9f7042a9d..194d1854c 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 74be7d4e8..4dda2b185 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 708bd54fb..8206dd4da 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -950,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 %@" = "初回入金額は、%@以上必要です。"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index c8bbcf410..ea5bd75c9 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -950,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 %@" = "첫 입금은 %@ 이상이어야 합니다"; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index 81bf4d939..5e0b00a63 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index e2d362be7..be6551b85 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index d5a2861b1..d37b757db 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index f7dc28961..c888cbe3a 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 9da698dc2..7675307f0 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -950,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ż %@"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index cd5401823..005489dec 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 2a0540aab..25c47aaf4 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 810dbe570..23f486696 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -950,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 %@" = "Первый депозит должен быть не менее %@"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 3d1cb15eb..c45277bd0 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index 609030259..65169e048 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index 44120c8ea..0810a9710 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 08dc25ce8..bca7d15f8 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index ddbf189e2..037807cc4 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 1eebae034..6b6794783 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index a99fdc33f..a3b35cad1 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -950,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 %@" = "เงินฝากครั้งแรกควรมากกว่า %@"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index f4426c4e8..2e2840770 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -950,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"; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index a9e6fc103..194dfaecc 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -950,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 %@" = "Перший депозит має бути більшим ніж %@"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index fafb0a4c6..822e74138 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 08c32814a..01f14aa13 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index ee0765a75..0d8edb634 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -950,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 %@"; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index fdbaa8078..46194d865 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -950,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 %@" = "首次存款应超过 %@"; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index 7507fc44b..07ce5b7b3 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -950,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 %@" = "首次存款應超過 %@"; From 7ff6ca921dcb234e807801196212633ccc8ec6b5 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Wed, 28 May 2025 20:06:41 +0700 Subject: [PATCH 5/8] fix: dash testnet faucet in explore --- .../Explore/DWExploreTestnetViewController.m | 133 ------------------ .../Explore Dash/ExploreViewController.swift | 54 ++++--- .../Views/ExploreContentsView.swift | 17 +++ .../UI/Main/MainTabbarController.swift | 4 +- DashWallet/ar.lproj/Localizable.strings | 2 +- DashWallet/bg.lproj/Localizable.strings | 2 +- DashWallet/ca.lproj/Localizable.strings | 2 +- DashWallet/cs.lproj/Localizable.strings | 2 +- DashWallet/da.lproj/Localizable.strings | 2 +- DashWallet/de.lproj/Localizable.strings | 2 +- DashWallet/el.lproj/Localizable.strings | 2 +- DashWallet/en.lproj/Localizable.strings | 2 +- DashWallet/eo.lproj/Localizable.strings | 2 +- DashWallet/es.lproj/Localizable.strings | 2 +- DashWallet/et.lproj/Localizable.strings | 2 +- DashWallet/fa.lproj/Localizable.strings | 2 +- DashWallet/fi.lproj/Localizable.strings | 2 +- DashWallet/fil.lproj/Localizable.strings | 2 +- DashWallet/fr.lproj/Localizable.strings | 2 +- DashWallet/hr.lproj/Localizable.strings | 2 +- DashWallet/hu.lproj/Localizable.strings | 2 +- DashWallet/id.lproj/Localizable.strings | 2 +- DashWallet/it.lproj/Localizable.strings | 2 +- DashWallet/ja.lproj/Localizable.strings | 2 +- DashWallet/ko.lproj/Localizable.strings | 2 +- DashWallet/mk.lproj/Localizable.strings | 2 +- DashWallet/ms.lproj/Localizable.strings | 2 +- DashWallet/nb.lproj/Localizable.strings | 2 +- DashWallet/nl.lproj/Localizable.strings | 2 +- DashWallet/pl.lproj/Localizable.strings | 2 +- DashWallet/pt.lproj/Localizable.strings | 2 +- DashWallet/ro.lproj/Localizable.strings | 2 +- DashWallet/ru.lproj/Localizable.strings | 2 +- DashWallet/sk.lproj/Localizable.strings | 2 +- DashWallet/sl.lproj/Localizable.strings | 2 +- DashWallet/sl_SI.lproj/Localizable.strings | 2 +- DashWallet/sq.lproj/Localizable.strings | 2 +- DashWallet/sr.lproj/Localizable.strings | 2 +- DashWallet/sv.lproj/Localizable.strings | 2 +- DashWallet/th.lproj/Localizable.strings | 2 +- DashWallet/tr.lproj/Localizable.strings | 2 +- DashWallet/uk.lproj/Localizable.strings | 2 +- DashWallet/vi.lproj/Localizable.strings | 2 +- DashWallet/zh-Hans.lproj/Localizable.strings | 2 +- .../zh-Hant-TW.lproj/Localizable.strings | 2 +- DashWallet/zh.lproj/Localizable.strings | 2 +- DashWallet/zh_TW.lproj/Localizable.strings | 2 +- 47 files changed, 93 insertions(+), 201 deletions(-) delete mode 100644 DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m 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/ExploreViewController.swift b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift index 19c3fb685..a5be5b478 100644 --- a/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift @@ -44,19 +44,32 @@ class ExploreViewController: UIViewController, NavigationFullscreenable { super.viewDidLoad() view.backgroundColor = .dw_darkBlue() - - // Contents + 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() } @@ -86,13 +99,21 @@ class ExploreViewController: UIViewController, NavigationFullscreenable { ]) } - override var preferredStatusBarStyle: UIStatusBarStyle { - return .lightContent - } - // MARK: - Actions - @objc private func showAtms() { + 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 } @@ -105,7 +126,7 @@ class ExploreViewController: UIViewController, NavigationFullscreenable { navigationController?.pushViewController(vc, animated: true) } - @objc private func showStakingIfSynced() { + private func showStakingIfSynced() { if SyncingActivityMonitor.shared.state == .syncDone { let vc = CrowdNodeModelObjcWrapper.getRootVC() navigationController?.pushViewController(vc, animated: true) @@ -114,7 +135,7 @@ class ExploreViewController: UIViewController, NavigationFullscreenable { } } - @objc private func 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) @@ -137,22 +158,9 @@ class ExploreViewController: UIViewController, NavigationFullscreenable { present(alert, animated: true, completion: nil) } - @objc private func buttonAction() { - let account = DWEnvironment.sharedInstance().currentAccount - - guard let paymentAddress = account.receiveAddress else { - return - } - - UIPasteboard.general.string = paymentAddress - if let url = URL(string: "https://testnet-faucet.dash.org/") { - UIApplication.shared.open(url, options: [:], completionHandler: nil) - } - } - // MARK: - Where to Spend - @objc public func showWhereToSpendViewController() { + private func showWhereToSpendViewController() { if UserDefaults.standard.bool(forKey: kMerchantTypesShown) != true { let hostingController = UIHostingController(rootView: MerchantTypesDialog { [weak self] in UserDefaults.standard.setValue(true, forKey: kMerchantTypesShown) diff --git a/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift index 7df45b425..62c4f8571 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift @@ -19,6 +19,7 @@ import UIKit class ExploreContentsView: UIView { + var getTestDashHandler: (() -> Void)? var whereToSpendHandler: (() -> Void)? var atmHandler: (() -> Void)? var stakingHandler: (() -> Void)? @@ -33,6 +34,10 @@ class ExploreContentsView: UIView { setupView() } + private var isTestnet: Bool { + return DWEnvironment.sharedInstance().currentChain.isTestnet() + } + private func setupView() { backgroundColor = .dw_darkBlue() @@ -58,6 +63,18 @@ class ExploreContentsView: UIView { 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: ""), diff --git a/DashWallet/Sources/UI/Main/MainTabbarController.swift b/DashWallet/Sources/UI/Main/MainTabbarController.swift index fe7f51cd3..e8175efe9 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) diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 47cbdb6ca..fdb900850 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 5ce431de3..bded4a7f4 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index b90756951..6abef9737 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 34bfa91a9..20b1ad32b 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index ec6b692d2..e5b49a96a 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 568e19444..e3acd7c08 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index b34c78f54..147044f51 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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 σας."; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 56c0047de..dc85b7eac 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index 2d7d9df85..fa19235cf 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 978480a01..e2561ec31 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index 830671d6c..e0b3bdb86 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index a9b43a80a..ccb4de0cf 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index 8cc16ebd9..79b84e18b 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index 12dd4cf3f..b7a368c01 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 86d78f72c..26715adc8 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index c20081b03..0c7a368ee 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index 85a59a513..46bb9c294 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 194d1854c..d806840ba 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 4dda2b185..b4fcd0833 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 8206dd4da..8267a2a08 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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を入手できます。"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index ea5bd75c9..86baab14f 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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지갑의 받기 화면에서 주소를 복사하고 아래 버튼을 클릭하여 대시를 받으세요."; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index 5e0b00a63..875bccc80 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index be6551b85..7fc6299dc 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index d37b757db..46d7f9ff1 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index c888cbe3a..756abfd25 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 7675307f0..7f546d93e 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 005489dec..76ac232ff 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 25c47aaf4..6b28b1c34 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 23f486696..24c2bcad1 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index c45277bd0..a004b7c36 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index 65169e048..43680b2a2 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index 0810a9710..c43c9ef71 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index bca7d15f8..7781f0f78 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index 037807cc4..35d4d0f73 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 6b6794783..3381c2a8b 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index a3b35cad1..503c3a24a 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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 ของคุณ"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 2e2840770..d7b1f5b62 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index 194dfaecc..40ca55370 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 822e74138..239f2aff1 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 01f14aa13..f43952c7f 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 0d8edb634..8cf2d48d5 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index 46194d865..a9824b2c9 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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."; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index 07ce5b7b3..2c85fb4b4 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -2417,7 +2417,7 @@ "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從錢包的接收畫面複製位址,然後點擊下面的按鈕以獲取您的達世幣。"; From 5591e098ed078e131d2fc3f1904cf1ae3e7ceb06 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Sat, 31 May 2025 14:18:15 +0700 Subject: [PATCH 6/8] feat: gift card details screen --- DashWallet.xcodeproj/project.pbxproj | 2 - .../Contents.json | 23 ++ .../network.png | Bin 0 -> 695 bytes .../network@2x.png | Bin 0 -> 1327 bytes .../network@3x.png | Bin 0 -> 1988 bytes .../Contents.json | 23 ++ .../merchant.png | Bin 0 -> 452 bytes .../merchant@2x.png | Bin 0 -> 709 bytes .../merchant@3x.png | Bin 0 -> 1032 bytes .../Model/Entites/CTXSpendModels.swift | 4 +- .../Services/CTXSpendEndpoint.swift | 2 +- .../Services/CTXSpendService.swift | 4 +- .../Models/Uphold/DWUpholdMainnetConstants.m | 1 + .../Explore Dash/ExploreViewController.swift | 16 +- .../PointOfUseDetailsViewController.swift | 12 +- .../ExplorePointOfUseListViewController.swift | 2 + .../List/MerchantListViewController.swift | 1 + .../DashSpend/CTXSpendUserAuthScreen.swift | 187 +++++++------ .../Views/DashSpend/DashSpendPayScreen.swift | 7 +- .../DashSpend/DashSpendPayViewModel.swift | 22 +- .../Views/DashSpend/GiftCardDetailsView.swift | 260 ++++++++---------- .../DashSpend/GiftCardDetailsViewModel.swift | 90 +++--- .../UI/Home/DWHomeViewControllerDelegate.h | 29 -- .../Home/HomeViewController+Shortcuts.swift | 9 +- .../Sources/UI/Home/HomeViewController.swift | 33 +-- .../Sources/UI/Home/Views/HomeView.swift | 22 +- .../UI/Main/MainTabbarController.swift | 17 +- .../UI/Menu/Main/DWMainMenuViewController.m | 8 +- .../Main/DWMainMenuViewControllerDelegate.h | 1 + .../UI/SwiftUI Components/Color+DWStyle.swift | 4 + .../Tx/Details/TxDetailViewController.swift | 12 + DashWallet/ar.lproj/Localizable.strings | 11 +- DashWallet/bg.lproj/Localizable.strings | 11 +- DashWallet/ca.lproj/Localizable.strings | 11 +- DashWallet/cs.lproj/Localizable.strings | 11 +- DashWallet/da.lproj/Localizable.strings | 11 +- DashWallet/dashwallet-Bridging-Header.h | 1 - DashWallet/de.lproj/Localizable.strings | 11 +- DashWallet/el.lproj/Localizable.strings | 11 +- DashWallet/en.lproj/Localizable.strings | 11 +- DashWallet/eo.lproj/Localizable.strings | 11 +- DashWallet/es.lproj/Localizable.strings | 11 +- DashWallet/et.lproj/Localizable.strings | 11 +- DashWallet/fa.lproj/Localizable.strings | 11 +- DashWallet/fi.lproj/Localizable.strings | 11 +- DashWallet/fil.lproj/Localizable.strings | 11 +- DashWallet/fr.lproj/Localizable.strings | 11 +- DashWallet/hr.lproj/Localizable.strings | 11 +- DashWallet/hu.lproj/Localizable.strings | 11 +- DashWallet/id.lproj/Localizable.strings | 11 +- DashWallet/it.lproj/Localizable.strings | 11 +- DashWallet/ja.lproj/Localizable.strings | 11 +- DashWallet/ko.lproj/Localizable.strings | 11 +- DashWallet/mk.lproj/Localizable.strings | 11 +- DashWallet/ms.lproj/Localizable.strings | 11 +- DashWallet/nb.lproj/Localizable.strings | 11 +- DashWallet/nl.lproj/Localizable.strings | 11 +- DashWallet/pl.lproj/Localizable.strings | 11 +- DashWallet/pt.lproj/Localizable.strings | 11 +- DashWallet/ro.lproj/Localizable.strings | 11 +- DashWallet/ru.lproj/Localizable.strings | 11 +- DashWallet/sk.lproj/Localizable.strings | 11 +- DashWallet/sl.lproj/Localizable.strings | 11 +- DashWallet/sl_SI.lproj/Localizable.strings | 11 +- DashWallet/sq.lproj/Localizable.strings | 11 +- DashWallet/sr.lproj/Localizable.strings | 11 +- DashWallet/sv.lproj/Localizable.strings | 11 +- DashWallet/th.lproj/Localizable.strings | 11 +- DashWallet/tr.lproj/Localizable.strings | 11 +- DashWallet/uk.lproj/Localizable.strings | 11 +- DashWallet/vi.lproj/Localizable.strings | 11 +- DashWallet/zh-Hans.lproj/Localizable.strings | 11 +- .../zh-Hant-TW.lproj/Localizable.strings | 11 +- DashWallet/zh.lproj/Localizable.strings | 11 +- DashWallet/zh_TW.lproj/Localizable.strings | 11 +- .../Colors/Gray50.colorset/Contents.json | 38 +++ 76 files changed, 624 insertions(+), 679 deletions(-) create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png create mode 100644 DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png delete mode 100644 DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h create mode 100644 Shared/Resources/SharedAssets.xcassets/Colors/Gray50.colorset/Contents.json diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 524cf454d..3197df7ef 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -3025,7 +3025,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 = ""; }; @@ -4611,7 +4610,6 @@ 2A2CD6E522F46D1A008C7BC9 /* Models */, 2A307CB322E6FA7F00A18347 /* Views */, 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */, - C94946DE2A25EDA8008A678D /* DWHomeViewControllerDelegate.h */, 75FFD6B72BF47BA20032879E /* HomeViewController.swift */, 75FFD6BA2BF48DF80032879E /* HomeViewController+JailbreakCheck.swift */, 75FFD6BD2BF491FC0032879E /* HomeViewController+BackupReminder.swift */, 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 0000000000000000000000000000000000000000..3a9a51f5823ebb4e3bff1e3cec8eeb1862eaa033 GIT binary patch literal 695 zcmV;o0!aOdP)8P{t-%s5Xp&x*pc1}vu9zIO4i8le!qoEzC#l^uro&N(31D)H$Xtoe8x^RzR=m! z*sP=5b_bhZ3uv`XiD05)D7DDWEP5tGMu2U0Mhu3d08xtEk~_%(@A?xPJ(Zye@_dEa zFveZ9PcwFy;eCIbXJBfsmL+42dmDW+h7YPcE$QZ1xR-Ao)Js5T`j}?&8a@cTEa~RR zN+_)-J*^pcF2^*w5qxkmr(2ed`I<{A!A*l{Xll!SP|d6wDeJJVAe$;w=T>HE7Lh4; z{LyFV4$_CX&LdvP))G7f7v1wZ(9|(zW(W;_kJ6xW3 z@IeNLlCDF7Y`f(Phv&D_t3q^RGYEYpEN;8v^<<8DKiezijW)ktaz1e7Qi18%002ovPDHLkV1i%rHLd^v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4bf5d550532ae216e4ac16fcd91314b5f67dba0a GIT binary patch literal 1327 zcmV+~11K~#7F?OIKC z6FCqrsgqfUC2!2oKEX^*Fy;h-6X2X6aRO{Hdt%@Om=h3AKsW*61U6t`Yu0wRP_^uK zt0Z-oy0hZ(y_eY1Q%UtBl~h#*xCy+N9Tb02G(S?f0qj9rAjA3o5Cj~-T77`Wcg8W~ zuwD;gvN!?-uRtbOFuFa577!4NLeqbpK(0=83$;Fl^WJgI7{sM!@|nZrWbs}LFxa%F z-Z3{Sz>9BBD~u!c97J-@S`@cNp1s%KQbIk~4En}?EayW=F^19K&wvTZ8iflzUwqWe zkFCWrZGNgTKl4!ZsqC%QQ_!kcHoacsVlm^Mk!ArVKOPoZ67ZkZkJ^9SdujEdh5XDL zC_Tr;*RjpP8s}J&k;XF5zubog)C+(NscZ^Wt?!tzHCJqh!a@xYCzi(=^_Pwn3=TlZ zw;QDd5f;Gg_i>mqxwP7OUb~RRSiW~^&$WIT9F08G2;o1(xNVH)15oea{Laq2#-+}{ zXDL6HAXj~({q35TNAhr*4B_nd8`|w!0Jnn5!WuEN5$*4zFfkXIxkIW@@TQgmdGZ`= zR{-Nh>Y2fdrwRcNAr^Q6T63;08z>GOF9uYACNE+ZzP5e2-ad7v4*_ZDVaB=ZX&f)M z6M*eS^s}LgEEzysIJ9JLFKjQi6M*YQa&=|3r5He4P+BFf8B~@RGXfNcLk)q0M9%FF z@h`Lnp`~XlOjlaL2#{w3;9}IXwWP=m9Ro_sf5??qFaiiTVUf{8X0#9&2T(?+Ys4oC zix=@fen{i@*;*uTmc91cFOk^_;GKigi^-_%qlk7g)kXUTIejE%KY>v@q^MpW91BSU|@nk`aqmSG#33CB$sMz?9Si@-A?Z>|e`GEPBPG zpf_LA-2!`Sss!HiWD}d4ctCMtQP1Qi0O=yc(#j1LyfB~ko6MjQz@MM=!54tE-$qV= zwBWytH{qudAe^6c;lvN>6SM}Q&GHm@m~O+*T~>l?1sXrlEJY03W;n1Avi(|ivaMiZ z(Gp2^1#RKblDU1zl~u)Yle-gL$Y?r9a&;>zG3x_*zO&xFvTdq0vj&>Ers-R(xPy`h z(6p6IGIs|B?;sX5ncEbb3(XUjvj|)PjCn>-Kbif2ldCDjxznY4fr_JAiabB|<&FFW z4t#OqUJJpOnB{sggG*}*n#|z+;ArIK(Ldf7L%2eNb>BK6{8bj76)IlD%$3zMUsHpw zuaP04$^&PDUF&iga<_t;8N@xG>G-3efZklCMAOOS(3A3WYhCAhvAUbNsB993Cf||y zl#IL92lf!2RD!1fcy(gb7`iWKOA#v+UD}KJ@|)YDcojujGe512Sr%)Y^$xj-UY-D3 zp!Q_aued;6o!NJb*T^W2DO}%%DY0^yGBt^`GNvE7P{yc@$&#f lk2PpDDDDt+!}L|k#4pTU51hXoxhwzx002ovPDHLkV1gWcW)J`X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fc8d292b10d9ee58d12f1d97b22a08f201503e53 GIT binary patch literal 1988 zcmV;#2RrzQP)fa%-Vz05z^!_bDR#&R+Qnfu$|9()y??VQf6%Yyre%J>g z57ck%hvOV};c)wgzV1s0Bzvbix}&f2>GYrK8qTg3jttfB>hJl7Cbg;=0a1cMggl0~ zPmbtoM?Da5K%6~SLOLX`J^6ADjP0)+9jgD{tLx680n!D8Z(pzr^;2nSeF(pAKclbx zdZ7f^1vh=tcj1eXTi4pu))}g{U#pihfCMFd9~^AHZwh0{^b zdgk!i7%E9Q{!*JDUaK`cjyMfMCn+jgFs5Z%drtm-35IQC|sE_r3sZhuDQC@&x|i7^tM5NefH1()TG=hi`qktKxkTZ z!nLD1*|Ixx)GP)!HP^Sb)}D?IAOL>>VaKHK8yP6=(WdF;cL>yoMQIU+1%C9VFUbo( z0cp*VN8k&;|71NbDpc_j;%Spw#P9p+|6}k0`{Jod^#Ve>_0=3hUym+!_8}Q&Zv*ei z#3lIC)4^s9ZULc5Fn$3cNa7)lgDfGPHrcTXBk2G*`>6Zq`V;buo=;Wv4tbd|y!pj$ zUaWWpO;Iqr4{1$qz}L(SrjL#|$)Q185u=U#Y(1)~Q6bf{ls_K`s|7Z8J#KyFM9y%NP!>}&GXf%=oo|EkoBhP3gxpm3gocV+NMUMb zMnGxih1fMnuo7~^IH92|-o*6f#>|X>Qq0TwFtUW~5ciO52uaPF`5xD6%&AbrD*GM+ zVo!+^X&R(`=T^y;8KjRglF}gl6tW|KvL5Dg2&o9@@J8Npi>1D;co_SUIFbHLN;bTi zK(3%3Cg%`upkg8VnS$CzC!IG=`CpTB7O-K%h7B7wFR^J{U205env6^a#zaW{43J8agA3{J)tVPLNp1dr8OeB%B z^N4e_CQ!2B2K@uJ;Xu{t2w7KRNE^w)C~ zQH$antHV)?v^dL#Bu3rXlt1jVr806|K<*+nH>MV29mxmKG*m`^Y|0jnwu0WOY(awGVo9DZ=~_XZB<)qrwd&6sR{& z7tDm2mr#AHsbj6L7c&oY2>!gJt7j4d(T64+)r=63#w=8yC_yjaS8<3%`oh~pmeOdK z@0JpXg3%r-@C?bb)SDgnZ9L##vua`lKTTRlqg^6(I%5gs7VxV>Ma^;T1hGO`)iY|6 z6u&{87GTaJRTUT;h!TOE#wQ6L9kQ;y58JXLylx)tmKVFVousM)V*^nkT-xi_9<%$* zZp=0n;Q~VR0^9wrGnjN~QD`8FK7(?ob=rgX!Do%!5hi_e6BI(hF31f=I6fQ^XPk`s zwK>|jc=cwxOP)U+;pgRY?Ko;p^_ZKR%)kf0Jv#6$ubZ8-9#nVSsfFsCOE|XTKjUkT zwbmpG$28X@7>i6MU8Pa4mNd$>F$scZf|_J@t3qwN(UG_78l1HYxPJH@ud9?mTWSz+ zM8=^sE1*RdJDsrmij~FPXUuL@mwL&#LBY((C!iUoGaY3vJ9<*sL??{zy2&M!Mg9YC WTWNezu>X|`D?Cd zP2gc?L1nJ(A11QK+Av|!U@Tmsp@fq%I^n!&U=)b8`AMV=yNRf7z;2>{{Bhtpv83ER6D8kdk3z6Dx4)@I(Ku>vrUb$$}iI0|ff1_gO zXbsvWW2pC%)>+S}lQ@AZL^OX4#9K*z(lY9N?MH6FlikFV*fNrWd0Te4E-5&wbrW^! zb=ws?kyyZ|_>i~#Y4O#UM|Qx{?H&^BEYD!lIZh?GXez-)vvq=N$cr73WZ|)hB6GKS zHja5jlJ~ti9D9j~A|v@+V%>-&J)+1&9>Gr&k)%cx%URur?TF;pxJ{4u7|U}RJgNcq zcYoj4a6}=k0C;Klt71naY7!t@;>DZY*n+H+HO5mcYu*aBYiE?IjiYEP!9`OEE*h!d z3$_J1QlM0oa3?jj45co~CDeax4dP7B5*I7KHI)v#E*;QF_{|$i$M3;)6rCtxzDm&9 z0r`hJd10GK-5-A~mbJr1S2wr@4`iv+Yb^-~>%i&~O5{LBk1>4A7ab2-{B6q$j}KfS!PG1A2mH+R$!Um&EFO zvM3=)PB2ae+xlkg36>T7{z!UHda}SW^nX-=ppHoFLZAVKExKC8%jAZh@rs`D3NpGx zXY+iSN+PjT3-GFiNVV~D4PV3vQiOm!L+AC#b(33&FTYz*Q5X3YV4e{jCpf5uwnDoQ z{c#@=+9)Oi5~DMJ@v#v7>r?6qO%$7u#Mqy`ARiR#mQZ*Rm?nB;>kRiTqBm~R`82V* zz>r4cGyJU#@sS3e-dI`hJE$cO!twuGP2Er9Ix48s!|noV56N_>&VWAz`p^EKEkx5} z=k0<9nyK2y(Z&!joe#AuI`a`~yVUf;xO*GNr3rDF74!5+_wcqgf_ZY`6}0Vcml za{D&OtMFiHpG$OV#S_Ba)vFR7jTge;7J{R)B$CQ=Sl2B?G-)Cc9gXIzu2Q?MBH^6C z@RHXQJ0^C2NS`J)5ia0fw8>rFBq8E2mSXUKnM*e<`bCyoy31AFMM9JY?==iw2!j{G z;Ds=FAq-v!gBQZ!g)n#_3|7s3!=mCUCI)9|zuUTRh|=~`8aaB&JRHQ9HKRi+3R zr|?pftq|)-5iU&Or6Xe@)|4VlPT{2@Lm}3jB1}r*r65DEk&q(nUmvI3na8awwC#D) z#3{T6G9bGa;Ytz4+mX6Rw>yvPw9)(3wU)Y4cqzzE2v>?QLKDwMw5*pi?27A%EVJ0B znZF1!r+B4cp(g42m=d||DCnZ=SF6|z>!O6#fw^mx?J9sQ7I+RiZA!w$8j2{4laS+-SRB?kEs!BilN|;}H9>)+}_(VB6Tn zIqY+dSgrj+MV*42L4?kHOSr>5>EiywDZEIXO;R4 zDH@RaWw<)^vz0Hgr$Xp3U_{1W(legxfbnQ?KK368*?-I8_`M+j0000())? @objc var sellDashHandler: (()->())? + @objc var onGiftCardPurchased: ((Data)->())? private var contentView: UIView! private var detailsView: PointOfUseDetailsView! @@ -227,16 +228,7 @@ extension PointOfUseDetailsViewController { let hostingController = UIHostingController( rootView: DashSpendPayScreen(merchant: self.pointOfUse, justAuthenticated: justAuthenticated) { [weak self] txId in // Navigate back to home and show gift card details - self?.navigationController?.popToRootViewController(animated: true) - - // Show gift card details after navigation completes - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - NotificationCenter.default.post( - name: .showGiftCardDetails, - object: nil, - userInfo: ["txId": txId] - ) - } + self?.onGiftCardPurchased?(txId) } ) 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/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 250df4aa3..6d4f528a2 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift @@ -129,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 } @@ -213,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"), diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift index 9acb7a6ca..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() @@ -125,7 +139,7 @@ class DashSpendPayViewModel: NSObject, ObservableObject { let response = try await purchaseGiftCardAPI() // 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") } @@ -138,10 +152,6 @@ class DashSpendPayViewModel: NSObject, ObservableObject { return transaction.txHashData } - func isUserSignedIn() -> Bool { - return ctxSpendService.isUserSignedIn - } - func contactCTXSupport() { let subject = "CTX Issue: Spending Limit Problem" @@ -248,7 +258,7 @@ class DashSpendPayViewModel: NSObject, ObservableObject { let giftCard = GiftCard( txId: txHashData, merchantName: merchantTitle, - merchantUrl: nil, // TODO: get merchant URL from API + merchantUrl: merchantUrl, price: amount, note: giftCardId // Store payment ID in note field temporarily ) diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift index 4ca994dcf..7b66d4e1f 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift @@ -23,9 +23,15 @@ 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) { + init(txId: Data, backNavigationRequested: Binding, onShowBackButton: @escaping (Bool) -> Void) { _viewModel = StateObject(wrappedValue: GiftCardDetailsViewModel(txId: txId)) + _backNavigationRequested = backNavigationRequested + self.onShowBackButton = onShowBackButton } var body: some View { @@ -34,7 +40,7 @@ struct GiftCardDetailsView: View { // Merchant header HStack(spacing: 15) { ZStack(alignment: .bottomTrailing) { - if let iconUrl = viewModel.merchantIconUrl { + if let iconUrl = viewModel.uiState.merchantIconUrl { WebImage(url: URL(string: iconUrl)) .resizable() .indicator(.activity) @@ -43,7 +49,7 @@ struct GiftCardDetailsView: View { .frame(width: 48, height: 48) .clipShape(Circle()) } else { - Image(systemName: "gift.circle.fill") + Image("image.explore.dash.wts.payment.gift-card") .resizable() .scaledToFit() .frame(width: 48, height: 48) @@ -51,8 +57,8 @@ struct GiftCardDetailsView: View { } // Secondary icon - if viewModel.merchantIconUrl != nil { - Image(systemName: "gift.fill") + if viewModel.uiState.merchantIconUrl != nil { + Image("image.explore.dash.wts.payment.gift-card") .resizable() .scaledToFit() .frame(width: 16, height: 16) @@ -65,12 +71,12 @@ struct GiftCardDetailsView: View { } VStack(alignment: .leading, spacing: 4) { - Text(viewModel.merchantName) + Text(viewModel.uiState.merchantName) .font(.body2) .fontWeight(.medium) .foregroundColor(.primaryText) - if let date = viewModel.purchaseDate { + if let date = viewModel.uiState.purchaseDate { Text(date, formatter: dateFormatter) .font(.footnote) .foregroundColor(.tertiaryText) @@ -80,34 +86,32 @@ struct GiftCardDetailsView: View { Spacer() } .padding(.horizontal, 25) - .padding(.top, 20) + .padding(.top, 15) // Gift card info container VStack(spacing: 0) { // Barcode section - if let barcodeImage = viewModel.barcodeImage { + if let barcodeImage = viewModel.uiState.barcodeImage { Image(uiImage: barcodeImage) .resizable() .scaledToFit() - .frame(height: 108) - .padding(.horizontal, 20) - .padding(.top, 15) + .frame(height: 150) } else { ZStack { - RoundedRectangle(cornerRadius: 10) - .fill(Color.gray) + RoundedRectangle(cornerRadius: 12) + .fill(Color.gray50) .frame(height: 108) - if viewModel.isLoadingCardDetails { + if viewModel.uiState.isLoadingCardDetails { SwiftUI.ProgressView() .progressViewStyle(CircularProgressViewStyle()) .scaleEffect(0.8) - } else if viewModel.loadingError != nil { - Text(NSLocalizedString("Failed to load barcode", comment: "")) + } else if viewModel.uiState.loadingError != nil { + Text(NSLocalizedString("Failed to load barcode", comment: "DashSpend")) .font(.footnote) .foregroundColor(.systemRed) } else { - Text(NSLocalizedString("Barcode placeholder", comment: "")) + Text(NSLocalizedString("Barcode placeholder", comment: "DashSpend")) .font(.caption) .foregroundColor(.tertiaryText) } @@ -118,43 +122,43 @@ struct GiftCardDetailsView: View { // Original purchase value HStack { - Text(NSLocalizedString("Original Purchase Value", comment: "")) - .font(.caption) + Text(NSLocalizedString("Original purchase", comment: "DashSpend")) + .font(.subheadline) .fontWeight(.medium) .foregroundColor(.tertiaryText) Spacer() - Text(viewModel.formattedPrice) - .font(.caption) + Text(viewModel.uiState.formattedPrice) + .font(.subheadline) .foregroundColor(.primaryText) } .padding(.horizontal, 20) .padding(.top, 20) // Check current balance link - if viewModel.merchantUrl != nil { + if let merchantUrl = viewModel.uiState.merchantUrl { Button(action: { - if let url = URL(string: viewModel.merchantUrl!) { + if let url = URL(string: merchantUrl) { UIApplication.shared.open(url) } }) { - Text(NSLocalizedString("Check current balance", comment: "")) + Text(NSLocalizedString("Check current balance", comment: "DashSpend")) .font(.footnote) .fontWeight(.medium) .foregroundColor(.dashBlue) } .frame(maxWidth: .infinity, alignment: .trailing) - .padding(.horizontal, 20) + .padding(.horizontal, 16) .padding(.top, 8) } // Card number and PIN - if viewModel.isLoadingCardDetails { + if viewModel.uiState.isLoadingCardDetails { SwiftUI.ProgressView() .progressViewStyle(CircularProgressViewStyle()) .padding(.vertical, 40) - } else if let error = viewModel.loadingError { + } else if let error = viewModel.uiState.loadingError { VStack(spacing: 10) { Text(error.localizedDescription) .font(.caption) @@ -164,19 +168,19 @@ struct GiftCardDetailsView: View { } .padding(.vertical, 40) } else { - VStack(spacing: 22) { + VStack(spacing: 15) { // Card number - if let cardNumber = viewModel.cardNumber { + if let cardNumber = viewModel.uiState.cardNumber { HStack { - Text(NSLocalizedString("Card Number", comment: "")) - .font(.caption) + Text(NSLocalizedString("Card number", comment: "DashSpend")) + .font(.subheadline) .fontWeight(.medium) .foregroundColor(.tertiaryText) Spacer() Text(cardNumber) - .font(.caption) + .font(.subheadline) .foregroundColor(.primaryText) Button(action: { @@ -186,26 +190,27 @@ struct GiftCardDetailsView: View { Image("icon_copy_outline") .resizable() .scaledToFit() + .tint(.primaryText) .frame(width: 20, height: 20) - .foregroundColor(.dashBlue) } - .frame(width: 32, height: 40) + .frame(width: 28, height: 40) } - .padding(.horizontal, 20) + .padding(.leading, 20) + .padding(.trailing, 10) } // Card PIN - if let cardPin = viewModel.cardPin { + if let cardPin = viewModel.uiState.cardPin { HStack { - Text(NSLocalizedString("Card PIN", comment: "")) - .font(.caption) + Text(NSLocalizedString("Card PIN", comment: "DashSpend")) + .font(.subheadline) .fontWeight(.medium) .foregroundColor(.tertiaryText) Spacer() Text(cardPin) - .font(.caption) + .font(.subheadline) .foregroundColor(.primaryText) Button(action: { @@ -215,12 +220,13 @@ struct GiftCardDetailsView: View { Image("icon_copy_outline") .resizable() .scaledToFit() + .tint(.primaryText) .frame(width: 20, height: 20) - .foregroundColor(.dashBlue) } .frame(width: 32, height: 40) } - .padding(.horizontal, 20) + .padding(.leading, 20) + .padding(.trailing, 10) } } .padding(.top, 22) @@ -228,17 +234,17 @@ struct GiftCardDetailsView: View { } } .background(Color.secondaryBackground) - .cornerRadius(10) - .padding(.horizontal, 15) + .cornerRadius(12) + .padding(.horizontal, 20) .padding(.top, 20) - // View transaction details button Button(action: { - navigateToTransactionDetails() + openTransaction = true + onShowBackButton(true) }) { HStack { - Text(NSLocalizedString("View transaction details", comment: "")) - .font(.caption) + Text(NSLocalizedString("View transaction details", comment: "DashSpend")) + .font(.subheadline) .fontWeight(.medium) .foregroundColor(.primaryText) @@ -250,12 +256,12 @@ struct GiftCardDetailsView: View { .frame(width: 12, height: 12) } .padding(.horizontal, 15) - .padding(.vertical, 17) - .background(Color.dashBlue) - .cornerRadius(10) + .padding(.vertical, 20) + .background(Color.secondaryBackground) + .cornerRadius(12) } - .padding(.horizontal, 15) - .padding(.top, 15) + .padding(.horizontal, 20) + .padding(.top, 20) // How to use button if !showHowToUse { @@ -263,131 +269,107 @@ struct GiftCardDetailsView: View { withAnimation { showHowToUse = true } - viewModel.logHowToUse() }) { - Text(NSLocalizedString("See how to use this gift card", comment: "")) - .font(.body2) - .fontWeight(.medium) + Text(NSLocalizedString("See how to use this gift card", comment: "DashSpend")) + .font(.subtitle1) .foregroundColor(.dashBlue) } - .padding(.top, 20) + .padding(.top, 30) } else { // How to use expanded content VStack(alignment: .leading, spacing: 30) { - Text(NSLocalizedString("How to use your gift card", comment: "")) - .font(.caption) + 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 - HStack(alignment: .top, spacing: 25) { - Image(systemName: "qrcode") - .resizable() - .scaledToFit() - .frame(width: 24, height: 24) - .foregroundColor(.dashBlue) - - VStack(alignment: .leading, spacing: 4) { - Text(NSLocalizedString("Self-checkout", comment: "")) - .font(.subtitle1) - .foregroundColor(.primaryText) - - Text(NSLocalizedString("Request assistance and show the barcode on your screen for scanning.", comment: "")) - .font(.body2) - .foregroundColor(.tertiaryText) - .fixedSize(horizontal: false, vertical: true) - } - } + 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 - HStack(alignment: .top, spacing: 25) { - Image(systemName: "storefront") - .resizable() - .scaledToFit() - .frame(width: 24, height: 24) - .foregroundColor(.dashBlue) - - VStack(alignment: .leading, spacing: 4) { - Text(NSLocalizedString("In store", comment: "")) - .font(.subtitle1) - .foregroundColor(.primaryText) - - Text(NSLocalizedString("Tell the cashier that you'd like to pay with a gift card and share the card number and pin.", comment: "")) - .font(.body2) - .foregroundColor(.tertiaryText) - .fixedSize(horizontal: false, vertical: true) - } - } + 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 - HStack(alignment: .top, spacing: 25) { - Image(systemName: "globe") - .resizable() - .scaledToFit() - .frame(width: 24, height: 24) - .foregroundColor(.dashBlue) - - VStack(alignment: .leading, spacing: 4) { - Text(NSLocalizedString("Online", comment: "")) - .font(.subtitle1) - .foregroundColor(.primaryText) - - Text(NSLocalizedString("In the payment section of your checkout, select \"gift card\" and enter your card number and pin.", comment: "")) - .font(.body2) - .foregroundColor(.tertiaryText) - .fixedSize(horizontal: false, vertical: true) - } - } + 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(10) - .padding(.horizontal, 15) + .cornerRadius(12) + .padding(.horizontal, 20) .padding(.top, 20) } // Powered by CTX VStack(spacing: 8) { - Text(NSLocalizedString("Powered by", comment: "")) + Text(NSLocalizedString("Powered by", comment: "DashSpend")) .font(.callout) .foregroundColor(.tertiaryText) - Text("CTX") - .font(.system(size: 18, weight: .bold)) - .foregroundColor(.dashBlue) + Image("ctx.logo") + .resizable() + .frame(width: 49, height: 18) } - .padding(.top, 30) + .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 navigateToTransactionDetails() { -// // Navigate to transaction details -// if let topVC = UIApplication.shared.topViewController() { -// let tx = DWEnvironment.sharedInstance().currentWallet.allTransactions.first { transaction in -// guard let tx = transaction as? DSTransaction else { return false } -// return tx.txHashData == viewModel.txId -// } -// -// if let transaction = tx as? DSTransaction { -// let controller = TXDetailViewController() -// controller.transaction = transaction -// navigationController = UINavigationController(rootViewController: controller) -// navigationController?.isModalInPresentation = true -// topVC.present(navigationController!, animated: true) -// } -// } + 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 { @@ -395,8 +377,4 @@ struct GiftCardDetailsView: View { formatter.dateFormat = "MMMM dd, yyyy 'at' h:mm a" return formatter } -} - -extension Notification.Name { - static let showGiftCardDetails = Notification.Name("showGiftCardDetails") } diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift index ac0ee82a3..0ddb1d324 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift @@ -18,7 +18,20 @@ import Foundation import Combine import UIKit -import CoreImage.CIFilterBuiltins + +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 { @@ -30,16 +43,7 @@ class GiftCardDetailsViewModel: ObservableObject { private let maxRetries = 3 let txId: Data - @Published private(set) var merchantName: String = "" - @Published private(set) var merchantIconUrl: String? = nil - @Published private(set) var merchantUrl: String? = nil - @Published private(set) var formattedPrice: String = "$0.00" - @Published private(set) var cardNumber: String? = nil - @Published private(set) var cardPin: String? = nil - @Published private(set) var barcodeImage: UIImage? = nil - @Published private(set) var purchaseDate: Date? = nil - @Published private(set) var isLoadingCardDetails: Bool = false - @Published private(set) var loadingError: Error? = nil + @Published private(set) var uiState = GiftCardDetailsUIState() private let currencyFormatter: NumberFormatter = { let formatter = NumberFormatter() @@ -50,7 +54,7 @@ class GiftCardDetailsViewModel: ObservableObject { init(txId: Data) { self.txId = txId - loadTransactionDate() + loadTransaction() } func startObserving() { @@ -60,11 +64,11 @@ class GiftCardDetailsViewModel: ObservableObject { .sink { [weak self] giftCard in guard let self = self, let card = giftCard else { return } - self.merchantName = card.merchantName - self.merchantUrl = card.merchantUrl - self.formattedPrice = self.currencyFormatter.string(from: card.price as NSDecimalNumber) ?? "$0.00" - self.cardNumber = card.number - self.cardPin = card.pin + 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 { @@ -88,25 +92,28 @@ class GiftCardDetailsViewModel: ObservableObject { stopTicker() } - func logHowToUse() { - // TODO: Log analytics event - DSLogger.log("DashSpend: User tapped 'How to use' for gift card") - } - - private func loadTransactionDate() { - // Get transaction date - if let tx = DWEnvironment.sharedInstance().currentWallet.allTransactions.first(where: { transaction in - return transaction.txHashData == txId - }) { - purchaseDate = Date(timeIntervalSince1970: TimeInterval(tx.timestamp)) + 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 } - isLoadingCardDetails = true - loadingError = nil + uiState.isLoadingCardDetails = true + uiState.loadingError = nil Task { await fetchGiftCardInfo() @@ -123,20 +130,21 @@ class GiftCardDetailsViewModel: ObservableObject { private func stopTicker() { tickerTimer?.invalidate() tickerTimer = nil - isLoadingCardDetails = false + uiState.isLoadingCardDetails = false retryCount = 0 } private func fetchGiftCardInfo() async { guard let giftCard = await giftCardsDAO.get(byTxId: txId), - let paymentId = giftCard.note, + let _ = giftCard.note, ctxSpendService.isUserSignedIn else { stopTicker() return } do { - let response = try await ctxSpendService.getGiftCardByTxid(txid: txId.hexEncodedString()) + let base58TxId = ((txId as NSData).reverse() as NSData).base58String() + let response = try await ctxSpendService.getGiftCardByTxid(txid: base58TxId) switch response.status { case "fulfilled": @@ -164,9 +172,11 @@ class GiftCardDetailsViewModel: ObservableObject { } case "rejected": - loadingError = CTXSpendError.customError( - NSLocalizedString("Gift card purchase was rejected", comment: "") - ) + await MainActor.run { + self.uiState.loadingError = CTXSpendError.customError( + NSLocalizedString("Gift card purchase was rejected", comment: "") + ) + } stopTicker() default: @@ -176,7 +186,9 @@ class GiftCardDetailsViewModel: ObservableObject { } catch { retryCount += 1 if retryCount >= maxRetries { - loadingError = error + await MainActor.run { + self.uiState.loadingError = error + } stopTicker() } DSLogger.log("DashSpend: Failed to fetch gift card info: \(error)") @@ -192,12 +204,12 @@ class GiftCardDetailsViewModel: ObservableObject { guard let outputImage = filter.outputImage else { return } let scaleX = 3.0 - let scaleY = 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) { - barcodeImage = UIImage(cgImage: cgImage) + uiState.barcodeImage = UIImage(cgImage: cgImage) } } } diff --git a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h b/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h deleted file mode 100644 index 00e1da24c..000000000 --- a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// Created by PT -// Copyright © 2023 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#ifndef DWHomeViewControllerDelegate_h -#define DWHomeViewControllerDelegate_h - -@protocol DWHomeViewControllerDelegate - -- (void)showPaymentsControllerWithActivePage:(NSInteger)pageIndex; - -@end - -#endif /* DWHomeViewControllerDelegate_h */ diff --git a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift index de14e91d0..244caf2d1 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift @@ -18,7 +18,6 @@ import UIKit extension HomeViewController: DWLocalCurrencyViewControllerDelegate, ExploreViewControllerDelegate { - func performAction(for action: ShortcutAction, sender: UIView?) { switch action.type { case .secureWallet: @@ -155,11 +154,15 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, ExploreView // MARK: - DWExploreTestnetViewControllerDelegate - func exploreTestnetViewControllerShowSendPayment(_ controller: ExploreViewController) { + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.pay.rawValue) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: ExploreViewController) { + 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 2b03ebf91..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,24 +214,11 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { present(nvc, animated: true, completion: nil) } - private func showGiftCardDetails(txId: Data) { - let giftCardDetailsView = GiftCardDetailsView(txId: txId) + func showGiftCardDetails(txId: Data) { let hostingController = UIHostingController(rootView: - BottomSheet(title: NSLocalizedString("Gift Card Details", comment: ""), showBackButton: .constant(false)) { - giftCardDetailsView - } - .background(Color.primaryBackground) + GiftCardDetailsSheet(txId: txId).background(Color.primaryBackground) ) - // Configure bottom sheet presentation - if #available(iOS 15.0, *) { - if let sheet = hostingController.sheetPresentationController { - sheet.detents = [.large()] - sheet.prefersGrabberVisible = true - sheet.prefersScrollingExpandsWhenScrolledToEdge = false - } - } - present(hostingController, animated: true, completion: nil) } @@ -256,15 +248,6 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { self?.viewModel.reclassifyTransactionShown(isShown: true) } .store(in: &cancellableBag) - - // Observe gift card purchase completion - NotificationCenter.default.publisher(for: .showGiftCardDetails) - .compactMap { $0.userInfo?["txId"] as? Data } - .receive(on: DispatchQueue.main) - .sink { [weak self] txId in - self?.showGiftCardDetails(txId: txId) - } - .store(in: &cancellableBag) } private func showTimeSkewDialog(diffSeconds: Int64, coinjoin: Bool) { diff --git a/DashWallet/Sources/UI/Home/Views/HomeView.swift b/DashWallet/Sources/UI/Home/Views/HomeView.swift index 0a270e0a2..d15d77be0 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeView.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeView.swift @@ -158,14 +158,6 @@ extension HomeView: HomeHeaderViewDelegate { } } -extension HomeView { - func showGiftCardDetails(txId: Data) { - // This will be called from the presenting controller - // Need to pass it to HomeViewContent - // TODO - } -} - struct TxPreviewModel: Identifiable, Equatable { var id: String var title: String @@ -452,10 +444,20 @@ struct HomeViewContent: View { struct GiftCardDetailsSheet: View { var txId: Data + @State private var showBackButton: Bool = false + @State private var backNavigationRequested: Bool = false var body: some View { - BottomSheet(title: NSLocalizedString("Gift Card Details", comment: ""), showBackButton: .constant(false)) { - GiftCardDetailsView(txId: txId) + BottomSheet(showBackButton: $showBackButton, onBackButtonPressed: { + backNavigationRequested = true + }) { + GiftCardDetailsView( + txId: txId, + backNavigationRequested: $backNavigationRequested, + onShowBackButton: { show in + showBackButton = show + } + ) } .background(Color.primaryBackground) } diff --git a/DashWallet/Sources/UI/Main/MainTabbarController.swift b/DashWallet/Sources/UI/Main/MainTabbarController.swift index e8175efe9..8020bdc48 100644 --- a/DashWallet/Sources/UI/Main/MainTabbarController.swift +++ b/DashWallet/Sources/UI/Main/MainTabbarController.swift @@ -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)!) } @@ -429,11 +434,15 @@ extension MainTabbarController: UITabBarControllerDelegate { // MARK: DWExploreTestnetViewControllerDelegate extension MainTabbarController: ExploreViewControllerDelegate { - func exploreTestnetViewControllerShowSendPayment(_ controller: ExploreViewController) { + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) { + homeController?.showGiftCardDetails(txId: txId) + } + + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.pay) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: ExploreViewController) { + 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 ccae48321..a3f707f4a 100644 --- a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m @@ -248,14 +248,18 @@ - (void)settingsMenuViewControllerDidRescanBlockchain:(DWSettingsMenuViewControl } #pragma mark - DWExploreTestnetViewControllerDelegate -- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreViewController *)controller { +- (void)exploreViewControllerShowSendPayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Pay]; } -- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreViewController *)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/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/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/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index fdb900850..96b70f2a6 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "معاينة الطلب"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index bded4a7f4..53eacff5c 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Адрес на собственика"; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index 6abef9737..2c12d3dac 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 20b1ad32b..ad6b50fdf 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index e5b49a96a..59036f0ce 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/dashwallet-Bridging-Header.h b/DashWallet/dashwallet-Bridging-Header.h index daff20c1e..d2960e9bd 100644 --- a/DashWallet/dashwallet-Bridging-Header.h +++ b/DashWallet/dashwallet-Bridging-Header.h @@ -146,7 +146,6 @@ static const bool _SNAPSHOT = 0; #import "DWMainMenuViewController.h" #import "DWWipeDelegate.h" #import "DWPayModel.h" -#import "DWHomeViewControllerDelegate.h" #import "DWMainMenuViewControllerDelegate.h" //MARK: Home diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index e3acd7c08..1d1fd761f 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gutscheinkarte"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vorschau bestellen"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Besitzer-Adresse"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 147044f51..4a5e81d12 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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 σύντομα."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Δωροκάρτα"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Προεπισκόπηση παραγγελίας"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index dc85b7eac..28060be0a 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index fa19235cf..d6c1d34c9 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index e2561ec31..cae1f3284 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Tarjeta de regalo"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vista previa del pedido"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Dirección de Propietario"; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index e0b3bdb86..079d092a1 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index ccb4de0cf..71625ee63 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "پیش‌نمایش سفارش"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index 79b84e18b..a5cc50593 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index b7a368c01..2c729519f 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Preview ng Order"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Address ng may-ari"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 26715adc8..f7417734a 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Carte-cadeau"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Prévisualisation de la commande"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Adresse du propriétaire"; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index 0c7a368ee..3ac2444f7 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index 46bb9c294..99640ec8f 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index d806840ba..7ae163407 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Kartu ucapan"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Pratinjau Pesanan"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Alamat pemilik"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index b4fcd0833..46531abc6 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Anteprima dell'ordine"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Indirizzo del proprietario"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 8267a2a08..e1902b185 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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が入金されます。"; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "ギフトカード"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "注文プレビュー"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "所有者の諸々のキー"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 86baab14f..eaaabb170 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "이 거래를 취소하더라도 거래 주문은 취소되지 않습니다. 곧 귀하의 코인베이스 계좌로 DASH를 받게 됩니다."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "기프트 카드"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "주문 미리보기"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "소유자 주소"; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index 875bccc80..598adccad 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index 7fc6299dc..51e500826 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 46d7f9ff1..ae8c6ee5b 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 756abfd25..6ce328fda 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Cadeaukaart"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Voorbeeld bestelling"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Adres eigenaar"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 7f546d93e..e098bcb31 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Karta podarunkowa"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Podgląd Zamówienia"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Adres Właściciela"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 76ac232ff..cc8f934ea 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Vale-presente"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Visualização do pedido"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Endereço do Proprietário"; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 6b28b1c34..5b8f24daa 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 24c2bcad1..2b9c5adf0 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарочный сертификат"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Просмотр заказа"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Адрес владельца"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index a004b7c36..86ea90e5d 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Darčeková karta"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Ukážka objednávky"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index 43680b2a2..1efed565a 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index c43c9ef71..b251868ec 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 7781f0f78..d2d19265d 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index 35d4d0f73..4e7ea71fa 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 3381c2a8b..946088f9e 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 503c3a24a..6db9a898d 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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 ของคุณในไม่ช้า"; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "บัตรของขวัญ"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "คำสั่งซื้อตัวอย่าง"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "ที่อยู่เจ้าของ"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index d7b1f5b62..06aa0cd3b 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Hediye Kartı"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Sipariş Önizleme"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Sahip Adresi"; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index 40ca55370..d77759f97 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарункова карта"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Попередній перегляд замовлення"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Адреса власника"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 239f2aff1..3a863ccf3 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Địa chỉ của chủ sở hữu"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index f43952c7f..f57315214 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 8cf2d48d5..4e86bd2cb 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index a9824b2c9..0c8d79def 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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."; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "礼品卡"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "订单预览"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "所有者地址"; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index 2c85fb4b4..9cf98180e 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -410,8 +410,8 @@ /* 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。"; -/* No comment provided by engineer. */ -"Card Number" = "Card Number"; +/* DashSpend */ +"Card number" = "Card number"; /* No comment provided by engineer. */ "Card PIN" = "Card PIN"; @@ -1042,9 +1042,6 @@ /* Explore Dash: Filters */ "Gift Card" = "禮物卡"; -/* No comment provided by engineer. */ -"Gift Card Details" = "Gift Card Details"; - /* DashSpend */ "Gift card purchase successful" = "Gift card purchase successful"; @@ -1736,8 +1733,8 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "訂單預覽"; -/* No comment provided by engineer. */ -"Original Purchase Value" = "Original Purchase Value"; +/* DashSpend */ +"Original purchase" = "Original purchase"; /* No comment provided by engineer. */ "Owner Address" = "所有者位址"; 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 + } +} From d184cc162b530a6eb2fd40c3c966e2a9355d0f6f Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Sat, 31 May 2025 15:15:48 +0700 Subject: [PATCH 7/8] feat: metadata providers --- DashWallet.xcodeproj/project.pbxproj | 20 ++++ .../Models/Uphold/DWUpholdMainnetConstants.m | 1 - .../CustomIconMetadataProvider.swift | 87 ++++++++++++++++++ .../Sources/UI/Home/Views/HomeView.swift | 7 +- .../Sources/UI/Home/Views/HomeViewModel.swift | 92 ++++++++++++++----- .../UI/Home/Views/MetadataProvider.swift | 26 ++++++ .../Home/Views/TransactionListDataItem.swift | 6 +- 7 files changed, 211 insertions(+), 28 deletions(-) create mode 100644 DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift create mode 100644 DashWallet/Sources/UI/Home/Views/MetadataProvider.swift diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 3197df7ef..364f6be6a 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -578,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 */; }; @@ -2475,6 +2479,8 @@ 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 = ""; }; @@ -3791,6 +3797,7 @@ C9F451FE2A0CE60400825057 /* Home Header View */, 2A2CD70B22F97A9D008C7BC9 /* Shortcuts */, 2A4E533C22F025ED00E5168A /* Cells */, + 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */, C9F452002A0CE6C900825057 /* HomeView.swift */, 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */, 751C05DC2D3E39A600475E52 /* TransactionListDataItem.swift */, @@ -4605,6 +4612,7 @@ 2A9CEBB622E1FA0000A50237 /* Home */ = { isa = PBXGroup; children = ( + 7549BE552DEAECA5004F0BAF /* Custom Icons */, 2A1A60B92674083B003DAC65 /* Syncing Views */, 2A913E7223A2EAEF006A2A59 /* Protocols */, 2A2CD6E522F46D1A008C7BC9 /* Models */, @@ -6092,6 +6100,14 @@ path = DashSpend; sourceTree = ""; }; + 7549BE552DEAECA5004F0BAF /* Custom Icons */ = { + isa = PBXGroup; + children = ( + 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */, + ); + path = "Custom Icons"; + sourceTree = ""; + }; 754C27C62CC3C0B900BA7B9F /* Usernames */ = { isa = PBXGroup; children = ( @@ -8769,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 */, @@ -8841,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 */, @@ -9456,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 */, @@ -9886,6 +9905,7 @@ 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 */, 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/Home/Custom Icons/CustomIconMetadataProvider.swift b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift new file mode 100644 index 000000000..95d3a8a41 --- /dev/null +++ b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift @@ -0,0 +1,87 @@ +// +// 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 + +class CustomIconMetadataProvider: MetadataProvider { + private var cancellableBag = Set() + private let iconBitmapDao = iconBitmapDAOImpl.shared + var availableMetadata: [Data : TxRowMetadata] = [:] + + let metadataUpdated = PassthroughSubject() + + init() { + loadMetadata() +// self.metadataDao.$lastChange +// .receive(on: DispatchQueue.main) +// .sink { [weak self] change in +// guard let self = self, let change = change else { return } +// +// switch change { +// case .created(let metadata), .updated(let metadata, _): +// onMemoUpdated(metadata: metadata) +// +// case .deleted(let metadata): +// availableMetadata.removeValue(forKey: metadata.txHash) +// metadataUpdated.send(metadata.txHash) +// +// case .deletedAll: +// for metadata in availableMetadata { +// metadataUpdated.send(metadata.key) +// } +// availableMetadata = [:] +// } +// } +// .store(in: &cancellableBag) + } + + private func loadMetadata() { +// let txMetadata = metadataDao.getPrivateMemos() +// +// for metadata in txMetadata { +// var txRowMetadata = availableMetadata[metadata.txHash] +// +// if txRowMetadata != nil { +// txRowMetadata!.details = metadata.memo +// } else { +// txRowMetadata = TxRowMetadata( +// title: nil, +// details: metadata.memo +// ) +// } +// +// availableMetadata[metadata.txHash] = txRowMetadata +// } + } + +// private func onMemoUpdated(metadata: TransactionMetadata) { +// var txRowMetadata = availableMetadata[metadata.txHash] +// +// if txRowMetadata != nil { +// txRowMetadata!.details = metadata.memo +// } else { +// txRowMetadata = TxRowMetadata( +// title: nil, +// details: metadata.memo +// ) +// } +// +// availableMetadata[metadata.txHash] = txRowMetadata +// metadataUpdated.send(metadata.txHash) +// } +} diff --git a/DashWallet/Sources/UI/Home/Views/HomeView.swift b/DashWallet/Sources/UI/Home/Views/HomeView.swift index d15d77be0..c9c6fe9d1 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeView.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeView.swift @@ -413,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 @@ -499,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/Home/Views/MetadataProvider.swift b/DashWallet/Sources/UI/Home/Views/MetadataProvider.swift new file mode 100644 index 000000000..95c13c6a5 --- /dev/null +++ b/DashWallet/Sources/UI/Home/Views/MetadataProvider.swift @@ -0,0 +1,26 @@ +// +// 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. +// + +struct TxRowMetadata: Equatable { + var title: String? + var details: String? + // TODO: custom icon +} + +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 } } From c290f183a165f2f5e91eb294b5282832f393db17 Mon Sep 17 00:00:00 2001 From: Andrei Ashikhmin Date: Wed, 4 Jun 2025 18:25:47 +0700 Subject: [PATCH 8/8] chore: cleanup --- .../CustomIconMetadataProvider.swift | 61 ------------------- 1 file changed, 61 deletions(-) diff --git a/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift index 95d3a8a41..c5fcd490b 100644 --- a/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift +++ b/DashWallet/Sources/UI/Home/Custom Icons/CustomIconMetadataProvider.swift @@ -20,68 +20,7 @@ import Combine class CustomIconMetadataProvider: MetadataProvider { private var cancellableBag = Set() - private let iconBitmapDao = iconBitmapDAOImpl.shared var availableMetadata: [Data : TxRowMetadata] = [:] let metadataUpdated = PassthroughSubject() - - init() { - loadMetadata() -// self.metadataDao.$lastChange -// .receive(on: DispatchQueue.main) -// .sink { [weak self] change in -// guard let self = self, let change = change else { return } -// -// switch change { -// case .created(let metadata), .updated(let metadata, _): -// onMemoUpdated(metadata: metadata) -// -// case .deleted(let metadata): -// availableMetadata.removeValue(forKey: metadata.txHash) -// metadataUpdated.send(metadata.txHash) -// -// case .deletedAll: -// for metadata in availableMetadata { -// metadataUpdated.send(metadata.key) -// } -// availableMetadata = [:] -// } -// } -// .store(in: &cancellableBag) - } - - private func loadMetadata() { -// let txMetadata = metadataDao.getPrivateMemos() -// -// for metadata in txMetadata { -// var txRowMetadata = availableMetadata[metadata.txHash] -// -// if txRowMetadata != nil { -// txRowMetadata!.details = metadata.memo -// } else { -// txRowMetadata = TxRowMetadata( -// title: nil, -// details: metadata.memo -// ) -// } -// -// availableMetadata[metadata.txHash] = txRowMetadata -// } - } - -// private func onMemoUpdated(metadata: TransactionMetadata) { -// var txRowMetadata = availableMetadata[metadata.txHash] -// -// if txRowMetadata != nil { -// txRowMetadata!.details = metadata.memo -// } else { -// txRowMetadata = TxRowMetadata( -// title: nil, -// details: metadata.memo -// ) -// } -// -// availableMetadata[metadata.txHash] = txRowMetadata -// metadataUpdated.send(metadata.txHash) -// } }